分词是AI的底层玄学:BPE、WordPiece和SentencePiece实战拆解

分词是AI的底层玄学:BPE、WordPiece和SentencePiece实战拆解

先扔个冷知识:GPT-4处理英文时平均每个token是4字节,但中文可能得10字节。这种差异直接决定了模型内存占用——这就是Tokenization在后台干的最重要的事。

BPE(Byte Pair Encoding)就像乐高工厂。想象你有一堆基础积木块(初始字符),然后不断合并出现频率最高的相邻组合(比如把"un"和"im"拼成"uni")。Google在2013年提出这个方案时有个致命伤:低频词会像乐高碎成渣一样被暴力拆解。Wikipedia里有个例子,"unhappiness"可能被拆成"un", "happi", "ness"——这会导致语义信息丢失。

WordPiece是Google 2016年针对BPE改进的版本,核心改动在于合并概率阈值。它不再单纯看频次,而是计算P(w_i|w_{i-1})的条件概率。这意味着"apple"比"apples"更可能被合并——因为前者作为独立词出现的概率更高。实际效果是,在WMT数据集上,WordPiece的OOV(未登录词)识别率比纯BPE高1.8%。不过这也带来新问题:训练时的贪婪合并策略可能导致长词被过度切分,比如"university"可能被拆成"un", "versity",而实际应该保留完整语义单元。

SentencePiece是Facebook 2018年的神操作——它直接跳过了传统词汇表的限制,把整个句子当作一个符号流来处理。最骚的是,它同时支持字符级和子词级模式。实测对比显示,在中文分词任务中,SentencePiece的困惑度比WordPiece低3.7个点,因为它的合并规则完全基于统计,不受词典边界限制。但代价是训练复杂度飙升,需要至少5GB的语料才能收敛到稳定状态。个人吐槽:这玩意儿简直是反人类设计,调试参数比调BERT还要难。

关键取舍建议

  • 英文小语种?用WordPiece够用了,它的平衡性最好

  • 多语言混合场景?SentencePiece是唯一选择,尤其是处理中日韩这种黏着语系

  • 内存敏感型项目?BPE还是王道,虽然准确率低但省资源

最近在帮一家医疗NER公司选型,他们发现用SentencePiece处理医学术语时,"心肌梗塞"永远不会被错误切分成"心+肌梗塞"——这比所有其他算法都靠谱。但如果你只是做普通聊天机器人,WordPiece反而更简单有效。记住:没有银弹,只有合适的选择。

← 上一篇 大模型按Token收费:这钱到底花在哪儿? 下一篇 → Token长度限制的秘密:为什么GPT-4只有8K上下文?
← 返回 Token与分词