分词器是大模型处理文字的第一道工序:它先查一张固定的词表,把输入的句子切成一串 Token,再把每个 Token 换成一个编号,模型拿到这串编号后才开始计算。它只管“怎么切、编什么号”,不管切出来的片段是什么意思;语义是在后面的模型层里,由这些编号的组合与上下文算出来的。这也解释了为什么同一段话在不同模型里 Token 数不一样。
分词器按词表切分,而不是按词典分词
分词器的词表,是在模型训练前从大量语料里统计出来的。一种常见思路叫字节对编码:先从单个字符或字节起步,反复把语料里最常相邻出现的两个片段合并成一个新片段,直到词表达到预定大小。常一起出现的组合会合成一个 Token,罕见组合则保持拆散。词表一旦随模型定下来就固定了,遇到没见过的新词,分词器只能把它拆成词表里已有的片段来拼。
这样切出来的结果,和中文分词或英文按空格分词都不一样。英文里,常见单词可能正好是一个 Token,生僻词会被拆成几块;中文里,常用汉字通常各占一个 Token,生僻字和代码则常被拆得更碎。同一句话交给不同模型,切法和 Token 数都可能不同,因为每个模型的词表都是自己的。
切分结果只决定编号,不决定理解
分词器容易被误会成“理解文字的第一步”,其实它的切分是机械的:按词表和规则办事,不看这句话在讲什么。同一个片段出现在不同句子里,切法通常相同,意思上的差别要靠后面的模型根据上下文区分,切分粗细本身不决定理解好坏。
另一个常见误解,是把 Token 当成字或词。字是书写单位,词是语言单位,Token 只是模型的工程单位,三者经常对不上。Token 是什么意思讲过这个单位,分词器就是负责产出它的工具。切分也有边界:在拼写、算术、代码补全这类任务里,切分方式可能影响表现,换模型时值得留意。
什么时候需要留意分词器
日常聊天不用关心分词器,但在三种情形下它会直接影响结果。第一,按 Token 计费或计上下文占用时,字数相同的两段文字 Token 数可能差不少,要按对应模型的计数方式估算,不能只数字数。第二,粘贴长文档时,截断位置按 Token 算,会影响模型实际看到的内容。第三,对比不同模型时,Token 数不能跨模型直接比较,就像用不同尺子量同一段布。
记住一条分界:分词器负责把文字变成模型能算的编号序列,上下文窗口决定这串编号一次能装多长,向量嵌入再把编号转成可比较的语义坐标。三者混成一谈,就会把计数问题误判成理解问题。