大语言模型中常用的tokenizer算法

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 不同算法有各自的适用场景和优缺点,选择时应根据具体需求和数据特点进行综合考虑。通过本文的介绍,希望您能更好地理解和应用这些tokenizer算法,从而提升NLP任务的效果和效率。

大语言模型中常用的tokenizer算法对于自然语言处理(NLP)任务至关重要。它们将文本分解为更小的单元(token),这些单元可以是单词、子词或字符,进而用于模型训练和推理。以下是几种常用的tokenizer算法及其详细介绍。

常用的Tokenizer算法

1. 基于规则的Tokenizer

1.1 空格分词

空格分词是最简单的tokenization方法之一,通过空格将文本分割成单词。尽管简单,但在处理复杂文本时效果不佳,尤其是在多语言环境中。

text = "Hello, world! This is a test."
tokens = text.split()
print(tokens)
# 输出: ['Hello,', 'world!', 'This', 'is', 'a', 'test.']
​

1.2 正则表达式分词

使用正则表达式来定义更复杂的分词规则,可以处理标点符号、特殊字符等。比如:

import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\b\w+\b', text)
print(tokens)
# 输出: ['Hello', 'world', 'This', 'is', 'a', 'test']
​

2. 基于统计的Tokenizer

2.1 词汇表分词(WordPiece)

WordPiece是用于BERT模型的tokenizer,通过数据驱动的方法生成词汇表。它将文本分解为最小的子词单元,处理未见过的词汇时表现出色。

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.tokenize("unaffable")
print(tokens)
# 输出: ['un', '##aff', '##able']
​

2.2 Byte-Pair Encoding (BPE)

BPE是一种基于频率统计的分词算法,常用于GPT系列模型。它从字符级别开始,通过合并频率最高的字符对,逐步构建子词单元。

from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers
tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel()
trainer = trainers.BpeTrainer(special_tokens=["<pad>", "<s>", "</s>", "<unk>", "<mask>"])
tokenizer.train(files=["my_dataset.txt"], trainer=trainer)
tokens = tokenizer.encode("unaffable").tokens
print(tokens)
# 输出: ['un', 'aff', 'able']
​

2.3 SentencePiece

SentencePiece是一种无需预先分词的分词算法,广泛应用于多语言模型如T5。它采用BPE或Unigram模型进行子词分解。

import sentencepiece as spm
spm.SentencePieceTrainer.train('--input=my_dataset.txt --model_prefix=m --vocab_size=8000')
sp = spm.SentencePieceProcessor()
sp.load('m.model')
tokens = sp.encode_as_pieces("unaffable")
print(tokens)
# 输出: ['▁un', 'aff', 'able']
​

3. 神经网络Tokenizer

3.1 神经网络分词(Neural Tokenizer)

神经网络分词器使用深度学习模型进行分词,能够捕捉更复杂的语言现象。这些模型通常通过端到端的训练过程,直接从数据中学习分词规则。

import tensorflow as tf
import tensorflow_text as tf_text

tokenizer = tf_text.BertTokenizer('vocab.txt', lower_case=True)
tokens = tokenizer.tokenize(["Hello, world! This is a test."])
print(tokens)
# 输出: <tf.RaggedTensor [[[7592, 1010, 2088, 999], [2023, 2003, 1037, 3231, 1012]]]>
​

Tokenizer算法分析说明表

算法类型 主要特点 优缺点 适用场景
空格分词 简单、快速 处理复杂文本效果差 简单文本处理
正则表达式分词 灵活、可定制 需要手工定义规则 特殊字符处理
词汇表分词(WordPiece) 数据驱动、处理未见词汇 构建词汇表需要大量数据 BERT模型等
Byte-Pair Encoding (BPE) 频率统计、子词分解 需要训练词汇表 GPT系列模型
SentencePiece 无需预先分词、多语言支持 训练过程复杂 多语言模型(如T5)
神经网络分词 深度学习、复杂语言现象处理 训练资源需求大 高级NLP任务

Tokenizer选择思维导图

Tokenizer算法
|
|-- 基于规则的Tokenizer
|   |-- 空格分词
|   |-- 正则表达式分词
|
|-- 基于统计的Tokenizer
|   |-- 词汇表分词(WordPiece)
|   |-- Byte-Pair Encoding (BPE)
|   |-- SentencePiece
|
|-- 神经网络Tokenizer
|   |-- 神经网络分词
​

结论

在大语言模型中,选择合适的tokenizer算法对模型性能和效果至关重要。空格分词和正则表达式分词适用于简单的预处理任务,而词汇表分词(如WordPiece)和BPE在处理复杂文本和未见词汇时表现更佳。SentencePiece和神经网络分词则在多语言和高级NLP任务中具有显著优势。

不同算法有各自的适用场景和优缺点,选择时应根据具体需求和数据特点进行综合考虑。通过本文的介绍,希望您能更好地理解和应用这些tokenizer算法,从而提升NLP任务的效果和效率。

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
3月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
168 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
7月前
|
自然语言处理 算法
ransformers从入门到精通:常用的subword tokenizer算法
- WordPiece、BPE/BBPE最小字词进行合并最终字词,BPE/BBPE直接采用词频判断合并规则而WordPiece采用最大似然的方式 - unigram采用从最大的字词集合里移除那些对语料库整体概率贡献最小的子词【6月更文挑战第7天】
156 3
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP 2023】基于大语言模型的复杂任务认知推理算法CogTree
近日,阿里云人工智能平台PAI与华东师范大学张伟教授团队合作在自然语言处理顶级会议EMNLP2023上发表了基于认知理论所衍生的CogTree认知树生成式语言模型。通过两个系统:直觉系统和反思系统来模仿人类产生认知的过程。直觉系统负责产生原始问题的多个分解假设,反思系统对直觉系统产生的假设进行验证,并选择更有可能的假设进行后续生成,直到达到最终结果。通过上述双系统的迭代式生成,可以提升大模型的解题准确度。
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24344 11
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
4天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
|
13天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
14天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
14天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。

热门文章

最新文章