一句话定义
无分词器模型(tokenizer-free model)不依赖预先定好的"词表",直接从原始字节(byte)里学语言;Byte Latent Transformer(BLT)是其中最有代表性的方案,由 Meta 的研究者提出。
为什么会有这个东西
主流模型读文字之前,先要过一道分词器(tokenizer),按 BPE(Byte Pair Encoding)之类的规则把文本切成词元(token)。这套切法在训练之前就靠统计频率定死了,模型自己改不了。
麻烦在于这把刀对谁都不太公平:英文常见词压缩率高,一句话没几个 token;换成泰语、印地语,或者一段缩进很深的代码,同样的意思会被切成明显更多的 token,而且拼写错误、生僻字符常常被切得七零八落。
BLT 的思路是:别切了,直接吃字节。但一个汉字占 3 个字节,全部做注意力计算太吃力,于是它加了一层动态"打补丁"(patch)。
补丁怎么打
直觉来自阅读:看到熟词,眼睛一扫就过;碰到生僻地名或没见过的函数名,你会一个字母一个字母地抠。BLT 把这个直觉做成了算法——模型一边预测下一个字节,一边估算"这里有多难猜"(熵)。难猜的地方切细,一个 patch 只放少量字节;好猜的地方(大片空格、常见搭配)合并成长 patch。
结构上分三块:小的字节编码器把字节压成 patch 表示,中间的大 Transformer 只在 patch 层面做全局计算,最后用字节解码器还原成字节。序列长度被压回和传统分词模型差不多的量级,但切分边界是模型自己学出来的。
和相邻概念的区别
| BPE 分词 | 纯字节/字符模型 | BLT 这类动态 patch | |
|---|---|---|---|
| 切分单位 | 词表里的子词 | 固定字节或字符 | 模型自学的变长 patch |
| 需要词表 | 需要,且固定 | 不需要 | 不需要 |
| 序列长度 | 短 | 很长,算得慢 | 被 patch 压回正常量级 |
| 多语言与代码 | 不同语言长度差异大 | 一致但低效 | 相对一致 |
还要注意:无分词器 ≠ 无预处理。它省掉的是人为定义的词表,换来的是一套需要跟模型一起训练的切分策略。
这对你意味着什么
对从业者:少了一层与训练脱节的固定工序,不用再在词表大小和多语言覆盖之间反复取舍;处理代码、混合语言、带错别字的用户输入时,理论上更省预算也更稳。代价是训练和推理的工程复杂度上升。
对普通人:最直接的好处是"别的语言不再吃亏"。同样一段中文、日文或夹杂符号的内容,不会因为词表没照顾到就被切得格外碎。产品对错别字、乱码、emoji 的容忍度也会更好——以前一个错字母可能把整个词切乱,现在影响面小得多。
BLT 目前仍属研究路线,能否在超大规模上完全替代成熟的 BPE 流程,还要看后续公开结果,具体以官方论文和页面为准。
