首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从 2019 年到如今,是时候深度重审 Tokenization 了

“9.9和9.11到底哪个大”这一问题曾难倒众多大模型。

研究人员对模型答错的原因进行了多方面猜测,其中包括预训练数据的构成以及模型架构本身。

在一篇新博客中,Hugging Face的研究者探讨了造成这一问题的关键因素之一——tokenization(标记化),并深入分析了它对模型数学能力尤其是算术能力的影响。

Tokenization回顾

早在2019年,GPT - 2论文就详细介绍了将BPE(字节对编码)用于语言模型的tokenization方法。该方法将频繁出现的子词合并为单个单元,直至词汇量达到目标大小。

然而,这种做法生成的词汇表很大程度上依赖于输入到tokenizer中的训练数据,这导致了数字编码方式的不一致性。例如,在训练数据中常见的数字(如1 - 100、1943年等)很可能被表示为单个token,而较少见的数字则被拆分成多个token。

Llama系列使用SentencePiece(一种用于基于文本生成的无监督文本tokenizer)的BPE实现,并对数字进行了显著调整:将所有数字拆分为单个数字,即只有10个唯一token(0 - 9)来表示任何数字,这简化了LLM的数字表示。Deepseek后来发布了一个模型(DeepSeek - V2),也采用了类似的单位数tokenizer。

Llama 3则采用了不同的方法来处理数字,将它们tokenize为三位数。因此,从1到999的数字每个数都有唯一的token,而从1000开始的数字由这些token组成。

新范式:从右到左的Tokenization

此前tokenization方法都是从左到右处理文本。例如,三位数字的分词法遇到序列12345,会从开头扫描,将其分解为123和45这样的片段。 而从右到左(R2L)的分词方法以三个字符为一组,从文本末尾开始向开头处理。使用R2L分词,序列12345将通过从右侧扫描进行分词,首先分割出345,然后再处理12。这种方法已被证明对某些算术运算有益,因为它可以防止操作数的错位。有传言称Claude使用了这种R2L分词方法。

为了更好地理解错位现象,以3789 + 8791为例:

在三位数从左到右(L2R)的例子中,9 + 1应该映射到数字0,但实际上却与8组合在一起形成了80,这是因为前面的三个token(125)已经被分在一起了。

tokenization边界的偏移在学习过程中引入了额外的复杂性,对准确性产生了不利影响。 而在从右到左(R2L)的例子中,数字580和对应的子操作数789和791很好地对齐了。

Tokenization方法的比较

研究旨在比较多个tokenizer及其处理数字的不同方式,尽量减少模型架构、训练配置和预训练数据等外部因素对评估结果的影响。

为此,实验选择了3种tokenizer:GPT - 2的BPE tokenizer、Llama 3的三位数tokenizer和Deepseek的单位数tokenizer。

训练模型采用原始的 Llama架构,并调整了隐藏层数量,确保每个模型的参数数量大致相同(约14.5亿)。

为保持恒定的计算预算,减少了具有更大词汇表模型中的隐藏层数量。

结果

算术问题

单位数tokenization在算术问题上表现优于其他tokenizer方法。

随着问题复杂性增加,单位数tokenizer与其他tokenizer之间的差距逐渐增大。这表明单位数tokenizer对输入数据长度变化更具鲁棒性,能够更好地捕捉复杂模式。

在所有tokenizer中,浮点数和整数之间的性能差距相似。这意味着在选择tokenizer时,不存在固有权衡,即对于整数最优的tokenizer对于浮点数也是最优的。

三位数R2L tokenization比标准三位数L2R tokenization具有更好的性能。

使用R2L token数据进行训练的模型在算术运算(除乘法外)上取得了显著改进。

纯基于BPE的tokenizer在数字被从右向左每3位一组进行分块时表现出不一致性。

没有额外数字预处理的纯BPE tokenizer不会从R2L token化中受益,原因可能是其数字分组方式缺乏结构。

在基于单词的问题上

虽然在基于单词的问题上,不同tokenizer之间的性能差距不太明显,但本文观察到单位数tokenizer和三位数tokenizer通常优于基于BPE的tokenizer。这表明,无论是单词问题还是数字问题,这种趋势都一致。

Llama 3 R2L推理

本文开展了一项测试,针对现有预训练/指令模型在接受与最初训练方案不同的token化方案时的表现进行研究。具体而言,基于Llama3 8B Instruct模型,通过上述相同代码修改其tokenizer,实现在推理期间执行R2L tokenization,且无需重新训练新模型。

在三位数tokenization方案下进行两个数相加时,发现结果有时会产生比输入数字更多的token。例如,999和111相加,它们单独只需要一个token,而相加后产生1110,需要两个token(1和110)。基于此观察,本文探索了在使用L2R和R2L tokenization对不同token长度执行加法时,产生的差异。

将导致额外token的加法称为进位(carry)加法,而把没有进位的加法称为无进位(without carry)加法。

本文用Llama3 8B Instruct执行了不同数字长度和进位设置的算术任务。结果显示,减法、乘法或除法没有显著性能差异,因此仅展示了加法结果。

对于非进位加法,当数字个数为3的倍数时会产生完全相同的结果,因为像528、491这样的数字无论token化方向如何都具有相同token。

Tokenization方法适合数学

尽管BPE仍是一种流行的tokenization方法,但如果必须使用具有最多3位数的tokenizer,那么要确保数据token方向为R2L。

若已有一个训练好且数据token方式为L2R的模型,那么可以通过使用R2L来提升数学性能。

最重要的是,对于算术运算,单位数tokenization的性能明显优于其他方法。

总结而言,tokenization对语言模型的算术性能有显著影响。通过仔细选择tokenization策略,能够根据问题类型优化模型,进而提高LLM在数学任务上的表现。

END

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OF4_DIMRjgeP70YijnZi4ucg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券