以下是对大模型中常见分词器的对比介绍:
Byte-Pair Encoding(BPE)
- 原理:从字母开始,不断找词频最高、且连续的两个token合并,直到达到目标词数。
- 优点:无监督学习,不需要人工标注的分词数据;能根据语料库自适应,适用范围广;可以将未登录词分割成较小的子词,提高模型对未登录词的处理能力。
- 缺点:遇到未在词汇表中出现的单元,分割为子词可能会增加语义困惑;可能会导致某些词被过于粗糙地分割;分词效率较低,处理大规模文本数据需要大量计算资源和时间。
Byte - level BPE(BBPE)
- 原理:将BPE从字符级别扩展到字节级别,把每个字节视为一个“字符”,基础字符集大小固定为256,实现跨语言共享词表,缩减词表大小。
- 优点:可以跨语言共用词表,显著压缩词表的大小。
- 缺点:对于中文等语言,文本序列长度会显著增加,导致训练和推理时间变长。
WordPiece
- 原理:可视为BPE的变种,通过概率生成新的subword,每次从词表中选出两个子词合并成一个新子词,选择的是能最大化语言模型概率的相邻子词。
- 优点:具有语言无关性,能适应不同语种和领域;可根据词汇表需求动态控制词汇大小;能有效处理未登录词,提供更好的语义表示能力。
- 缺点:遇到未在词汇表中出现的单元,分割为子词可能会导致语义困惑;会导致词的不连续性,使模型需要更长上下文来理解词的语义;存在分割歧义问题。
Unigram
- 原理:先初始化一个大词表,通过语言模型评估逐步减少词表,直到达到目标词汇量。
- 优点:在处理一些具有复杂词法和句法结构的语言时,能够更好地保留词的完整性和语义信息。因为它是基于概率分布来选择子词,所以可以根据语言的统计规律,将常见的词作为一个整体保留在词表中,而不是像BPE和WordPiece那样可能会将其拆分成多个子词。
- 缺点:计算量较大,因为需要对大量的子词组合进行概率评估和计算。初始化大词表以及后续的词表缩减过程都需要较多的计算资源和时间,这可能会影响模型的训练和推理速度。
SentencePiece
- 原理:谷歌推出的子词开源工具包,把一个句子看作一个整体再拆成片段,将空格当作特殊字符处理,集成了BPE、Unigram算法,还支持字符和词级别的分词。
- 优点:具有语言无关性;能动态控制词汇大小,适应不同任务和数据规模;分词效果好,能精细地将单词划分为子词,提供更好的语义表示能力,显著降低未登录词问题。
- 缺点:处理大规模文本数据时可能耗时较长;会使模型大小增加,占用更多存储空间;分词结果可能不唯一。
注意:本文归作者所有,未经作者允许,不得转载