AI技术-分词器

📅 发布时间:2026/7/30 12:44:57
AI技术-分词器
什么是分词器就是如何将一句话分解成不同的有意义的单词这是AI大模型的第一道门槛主要是负责将文本转换为独立的词也称为Token ID。 现阶段主流的分词算法需要平衡单词表的大小和语义颗粒度的关系主要解决OOV问题。 主要有以下几种算法1BPE自底向上的贪心合并算法。其原理是从字符或者字节开始然后统计相邻符号对的出现频率接着将最高频的合并为新的符号一遍一遍迭代到目标的单词表。一般GPT和LLama采用这种方式。2WordPiece合并的方式不是采用频率而是采用语言模型的似然增益更偏向于合并信息量较大的符号对。3Unigram正好于BPE相反它采用的是自顶向下的概率模型。一开始就有很大的单词表开始不断剔除掉使得训练集似然度下降最少的符号即踢掉效果不好的符号那留下来的就是效果相对好的。4SentencePiece直接在UTF-8编码格式的字节流上采用BPE或者Unigram算法这样的好处就是可以很大程度上支持中文。BPE和WordPiece在合并策略上有什么本质区别BPE是基于统计频率WordPiece是基于语言模型的似然增益。 BPE在训练的时候会优先找出单词库中出现次数最高的相邻字符对来进行合并目标是可以让数据的压缩率越高越好。WordPiece会考虑到合并符号带来的信息量的增益更喜欢合并有明确意义的组合能够降低混淆的组合符号。为什么流行的大模型都普遍采用基于字节的BPE而不是基于字符的BPE为了统一多语言处理传统的字符BPE需要维护一个包含所有的语言字符的基础词表其数量十分庞大遇到不在基础词表内的还会产生OOV问题。基于字节的BPE直接讲文本用UTF-8编码其基础词表只有256个但可以用来表示任何的字符从源头上杜绝了OOV问题。Unigram分词算法与BPE的构建过程有何不同BPE是从低到顶Unigram是从顶到底正好相反。 BPE先初始化一个最小的字符集开始然后不断的合并高频的符号对来扩充词表直至满足预定目标。Unigram算法先初始化一个所有可能符号对的大词表然后不断利用减法减去那边损失最小的符号对通过迭代减法直至达到预定目标。BPE的核心是寻找最高频相邻对ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef get_stats(vocab):pairs {}for word, freq in vocab.items():symbols word.split()for i in range(len(symbols)-1):pairs[(symbols[i], symbols[i1])] pairs.get((symbols[i], symbols[i1]), 0) freqreturn pairsWordPiece 合并评分公式Score(u, v) freq(u, v) / (freq(u) * freq(v))选择使 Score 最大的 (u, v) 进行合并。