如题。no vocab ,足够精确地预估一个 tokenizer 从来都不需要搞一个大词表。
因为最近在搞自己的 harness orchestration 的时候受不了 char / 4 的巨大偏移,然后 char / 3.5 也罢,CJK 拿出来单独数也罢,依然和真的 tokenizer 差很多,并且它根本不是文本越大越准,本来就不是一个像样的估算。
那它差多少?大概能差 30% - 50%,单独数 CJK 的话距离真正的预估也差接近 40%。
但是频繁去调那个 Tokenizer API 也烦人,每次都真拖一个 Tokenizer 出来测一遍更像是在白烧 CPU ,所以就搓了这个小东西出来。
没什么花活,就是先按 unicode 分桶,配一个非常简单的计数器去按词长一类的小特征去进一步分桶,然后暴力跑语料跑到每个桶的系数收敛。O(n) 时间,O(1) 空间,纯粹的系数拟合。
跑完之后,这个暴力小玩具惊人地准,达到了 5% 的平均偏移,而且文本越大,估算越准,200 字符的时候偏移 5% 左右,4000 的时候收敛到 3%,64K 收敛到 1%,1M 的时候 0.5%,一套算法通杀三家。
上图:


(如果嫌语料小的话,看 README 原文,里面测过 GB 级语料,依然是收敛的)
开源出来给大家用在自己的 harness 里当预估器用,刚好合适,测试语料里包含大量的代码和文章,完全贴合日常使用,而且是真正的多语言,不敢认 SOTA 但目前只有 Ground Truth 能比它好了。目前支持 OpenAI 、Anthropic 和 Gemini ,如果要迁移到别的模型的话找个语料用同样的方法跑就行,算法完全公开。
https://github.com/wdhwg001/novocab 刚开源,如果好用的话求个 Star ,谢谢支持。