把下面这个问题放到 Deepseek 里问:

1
成语“肆无忌惮”里有没有“无”字?

结果会让人咋舌,甚至对于 R1 来讲 thinking 过程还有点搞笑:

这其实是大约半月前我在和 AI 聊没营养话题时偶然发现的。和当年的 strawberry 如出一辙。目前来看这是 DS 一家单独的问题,其他 LLM(国内外七八个模型)都没有这样的现象。

根据 deepseek-tokenizer 对成语的分词结果看,有很多反常的事情,甚至让人难以想象这玩意怎么能训练好:

qwen 也这样做了一部分中文分词,但至少肆无忌惮不是:

印象中 LLaMa 也是类似的做法。但是归根结底,tokenizer 这样让一个成语部分成词部分成字是没有保留语义信息的,也丢失了分词本身的功能性意义。

笔者有一个粗浅的判断,tokenizer 在后 NLP 时代会逐渐消亡,回归到字符级的一一映射上,因为它的弊端太明显了,而它的优势 (词内完整性) 可以被数据容量和更好的训练技巧抵消 (尤其是对于自回归的直接优化目标来讲)。毕竟 unicode 总共也不超过数十万字符,现在 token 空间都已经上十万了。


编辑 1:

非常感谢大家的深入讨论。其实这个结论的出发点是在中文分词上。中文语素的最小单位 (除了连绵词 / 音译) 基本都是单字。惯用的多字合成词一般也由单字语义拼接而成。单字语义信息的保留效果应该是明显的。又因为中文词语最多 3~4 字,甚至大多是 2 字,再考虑一些本身就无法连续的单字,汉字 token 和词表 token 的总体效率差异可能没有想象中的大。

对于英文,效率问题确实是严峻的,而且其语义单元因为表音的本质以及屈折特性很难直接拆分到字母级别。继续使用单词划分也是有益的,因此很难在这里讨论清楚。

对于训练问题,举个简单的例子,不难发现现在的 LLM 已经可以产生 AB 结构拼接 token 形成的偏正、动宾或并列短语。如:

1
2
3
(机器)(智能) - 偏正
(左,膀)(右,臂) - (偏正)并列(偏正)
(保持)(警惕) - 动宾

这些词最终可能是未来的 “二阶词表” 中的新 token。从构词法上来讲,现有的大多为双字的词语 token 也可以拆解为这样的结构,且训练数据相对更多,因此不见得会有训练上的困难。总而言之,这大体上是一个粒度的问题,高粒度更简单直接表达语义效率更高,但难以处理文字级的低粒度问题。结合二者也是很有意思的方向。