Tokenizer训练方式和常见的分词模型

        在⾃然语⾔处理(NLP)领域,Tokenizer(分词器)是将原始⽂本转换为模型可处理的基本
单位(即词元或Token)的⼯具。Tokenizer的训练对于模型的性能和效率⾄关重要。

1、为什么需要Tokenizer

2、基本概念

3、传统的分词方式及其缺陷

(1)基于词的分词

        缺陷:将⽂本按空格或标点分割,但⽆法处理新词、拼写错误或形态变化,导致⼤量的未登录词 (OOV)

(2)基于字符的分词

        缺陷:将每个字符作为⼀个Token,词汇表小,但序列⻓度过长,模型难以捕获长距离依赖。

4、常见的分词方式

什么子词分词:⼦词分词在字符级和词级之间找到平衡,通过将词拆分为更小的子词单位,解决新词和低频词的问题。

        BPE合并频繁字节对,WordPiece基于概率合并

  • Dropout应用在注意力分数、FFN输出、嵌入层等位置。

  • 测试时需要关闭Dropout(使用eval模式),但需缩放权重(如乘以Dropout概率)或直接使用推理模式。

4.1 子词分词方法——Byte Pair Encoding(BPE)

        BPE最初⽤于数据压缩,其在NLP中的应⽤是:从字符开始,迭代地合并频率最高的相邻符号对,构建子词词汇表。

持续合并,构建更⼤的⼦词。

BPE的缺点:无法获取语义信息。

BPE的优点:简单高效、适用于多种语言、易于实现。

4.2 子词分词方法——WordPiece算法

        与BPE类似,但在合并时考虑了语⾔模型的概率。

步骤

Step1 初始化:同样将词分解为字符序列。

Step2 迭代合并:

计算得分:对每个可能的合并,计算语⾔模型概率的增益。
选择合并:选择使模型概率增益最⼤的符号对进⾏合并。
Step3 更新词汇表:将新的合并符号加⼊词汇表。
WordPiece优缺点:
优点:考虑了语⾔模型的概率,提⾼了分词的合理性
缺点:计算复杂度⾼,训练时间较长

4.3 Unigram语⾔模型

        基于Unigram(⼀元)语⾔模型,将分词视为对词汇表概率分布的估计。

训练步骤

5、实践中的考虑

1. 词汇表大小的选择:需要在模型性能和计算资源之间权衡。
2. 特殊符号处理:如数字、标点、表情符号,需要特殊处理。
3. 多语⾔⽀持:对于多语⾔模型,需要确保Tokenizer对不同语⾔的适⽤性。

6、BPE&BBPE这两种Tokenization方法

        BPE(Byte Pair Encoding)和 BBPE(Byte-Level BPE)是⾃然语⾔处理中的两种常⽤的子词分割算法。它们旨在解决词汇表规模和模型泛化能⼒之间的平衡问题,通过将单词分割为较⼩的⼦词单元来降低词汇表的⼤⼩,同时保持良好的语⾔表⽰能⼒。

6.1  BPE(Byte Pair Encoding)

        BPE是⼀种基于频率的贪⼼算法,最初⽤于数据压缩。它的核⼼思想是通过反复合并出现频率最⾼的字符对(或⼦词对),从⽽⽣成⼀组⼦词单元。BPE特别适合处理低频词汇的问题,因为它可以有效减少词汇表中的稀有词。

6.2 BBPE(Byte-Level BPE)

        BBPE是BPE的字节级扩展版本,主要应⽤于多语⾔模型(如GPT等)和处理Unicode字符的场景。与标准BPE不同,BBPE操作在字节层⾯,⽽不是字符层⾯,这允许它以更加通⽤的⽅式处理任意编码的⽂本(包括⾮拉丁字⺟)。

6.3 BPE和BBPE的应用

BPE在各种⾃然语⾔处理任务中都有⼴泛应用,如机器翻译(如Google的神经机器翻译系统)。
BBPE在多语⾔模型中使用频繁,特别是在跨语⾔预训练模型中(如GPT、BERT等)。

6.4 优缺点

7、主流大模型采用的分词方法为什么选择BBPE而不是BPE

        ⽬前,主流的⼤模型(如GPT系列、BERT、T5等)⼤多数采⽤的是BBPE(Byte-Level BPE)或类似的字节级tokenization⽅法。BBPE⼴泛应⽤的原因包括
        处理多语言文文本的能⼒ : ⼤模型通常需要处理⼤量不同语⾔的⽂本,⽽BBPE在字节级别操作,能够处理所有Unicode字符,特别是对于包含复杂字符集的语⾔(如中⽂、韩语、阿拉伯语)表现良好。
        统⼀的tokenization : BBPE⽅法不依赖于语⾔特定的字符结构,因此可以在不增加额外复杂性的情况下,统⼀应⽤于多语⾔任务,简化了预训练和下游任务中的tokenization流程。
        兼容表情符号和特殊字符 : 现代⼤语⾔模型需要处理⼤量互联⽹数据,这些数据中包含许多表情符号、特殊字符以及⾮标准符号,⽽BBPE可以更好地⽀持这类符号
为什么不选择BPE:
        多语⾔与统⼀性 : 随着模型规模的扩大,⽀持多种语⾔和字符集成为必然需求。BBPE通过在字节层⾯的操作,能够避免各语⾔tokenization不⼀致的问题。
        处理多种字符 : 由于BBPE可以处理所有Unicode字符,能够无缝处理非拉丁字符和特殊符号,具备更好的通⽤性。

8、总结

        BPE 和 BBPE 通过将词分割成⼦词的⽅式来平衡词汇表的⼤⼩与语⾔建模的泛化能⼒。BPE适合处理较为常规的语⾔任务,⽽BBPE适合多语⾔和字符集复杂的场景。
### 预训练模型训练模型利用大量无标注数据进行训练,学习通用语言特征,从而可在特定下游任务中进行微调使用。其形式通用、便于扩展,能采集足量数据,当预训练数据足够丰富时,大语言模型便能够学习到自然语言的生成规律与表达模式,通过对词元更精准的预测,模型就可以更好地理解文本、建模世界语义知识[^1]。 以BERT模型为例,其训练包括预训练微调两个阶段。预训练阶段,模型学习从给定上下文中预测给定单词的概率;微调阶段,模型根据给定的下游任务(如情感分析、文本分类等)进行优化[^2]。 使用预训练模型时,一般先进行预训练,然后根据具体任务进行微调。在实际应用中,可借助开源库来使用预训练模型,如DeepPavlov开源库提供了预训练向量的完整应用方案,通过词嵌入与句子表示两大核心场景,帮助掌握从模型选型、环境配置到性能调优的全流程最佳实践[^3]。 预训练模型的应用场景广泛,包括情感分析、文本分类、机器翻译等自然语言处理任务。 ### 分词分词器用于将文本分割成一个个词元(token)。例如BERT模型使用的WordPiece Tokenizer,还有SentencePiece ,它直接从原始文本训练,支持Unicode字符级处理,不依赖预处理分词[^2][^4]。 分词器的词表设计有一定考量,大小通常在30k - 100k之间,包含特殊token(如[CLS]、[SEP]、[MASK]等),同时有处理未知token的方式(如[UNK]或字节级回退)[^4]。 使用分词器时,将待处理的文本输入到分词器中,即可得到分割后的词元序列。在构建预训练模型时,分词器是重要的预处理步骤,为后续模型处理提供合适的输入。 分词器的应用场景主要是在自然语言处理的各个环节,如文本分类、信息检索等,为模型提供合适的输入格式。 ```python # 以下是使用transformers库中分词器的简单示例 from transformers import BertTokenizer # 加载预训练的BERT分词tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') # 待分词的文本 text = "Hello, how are you?" # 进行分词 tokens = tokenizer.tokenize(text) print(tokens) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值