文末有一些目前 Tokenizer 的意见,感兴趣的可以谈论。
也可以换着办法问,比如 一段一万字的 prompt,输入到最大长度为 8192 的模型,是否能精确的输出?
但是每个模型的 Tokenization 都是在自己的语料上演习出来的,怎么知道详细某一个 Tokenizer 每个 token 均匀代表几个汉字呢?
有的模型的技能报告会在 Tokenization 那一章供应一个“压缩率” 的指标,比如 qwen 和 baichuan 的,但是有些技能报告并不会提。
虽然说不同的 tokenizer 在不同的演习语料上演习的不一样,但是大家采取的方法实在无非就那么几种,感兴趣的可以看:小米口试官:“Tokenization 是什么”。封面看着眼熟
实在只要演习语料里紧张的措辞一样,在大量数据的堆积下,终极的的结果差异并不大。下面会给出以 英文为主的模型和中英文为主的模型的一些结果比拟。
为了测试,我选择了两本小说,《孔乙己》 和 《哈利波特》第一章,分别测试不同 tokenizer 对这两篇小说的中文版和英文版的效果。
结果如下图所示:
虽然这只能算是个抽样,但是也能看出一些问题。
每个模型在英文上的效果基本差不太多。一个 token 大概占 0.75~0.8 个单词。这与 OpenAI 官网上写的差不多:“A helpful rule of thumb is that one token generally corresponds to ~4 characters of text for common English text. This translates to roughly ¾ of a word (so 100 tokens ~= 75 words).”
海内的模型在中文语料上特训之后,中文编码的效率显著高于英文的 ChatGPT 和 Llama。一个 token 大概占1.5 个汉字。
目前的 Tokenizer 的编码效率够么?周一曾经写了逐一篇交叉熵的文章:华为口试官:“交叉熵 (cross entropy) ,KL 散度的值,到底有什么含义?”, 里面有提到通信的问题。
如何把语料用最少的 bit 位传输给模型,实在也是个通信的问题。只不过现在模型参数的通信远高于数据的通信,以是数据 与 GPU 的通信目前还不须要优化。
如果哪一天模型须要大量的输入的时候,tokenizer 的编码效率可能还会被研究。
当前的 tokenization 是否是最优编码?目前只能说有最优编码的影子,但是还不完备是。
比如 BPE 的算法实在便是在构建 Huffman 树,但是构建了之后仍旧采取了相同比特位数来编码。这么做的好处省去理解码的过程,直接查表就获取到了 Embedding,但是实在引入解码这点打算量也算不了啥。坏处便是通信上实在还有优化的空间。
还有一点便是中文的编码效率实在理论上还可以更高,由于目前所有的处理流程都是按照英文的流程来的。
比如 subword,对中文就完备没生效啊。之前也举过一个例子,oarfish 我虽然不知道是啥,但是预测是条鱼。对付中文来说,“鲥”这个字我可能也不认识,但是我也预测这是条鱼,但是这个字在中文肯定被表示成 bytes 了,就没啥意义了。
以是中文如何高效的编码,也该当是一个研究课题,我乃至觉得中文这种二维的笔墨,该当和图像的 tokenizer 有某种联系,比如在演习的时候,除了 id embedding,还有这个字对应的图片信息的 embedding。
我也不知道这个想法之前有没有人提过,假如没有的话,后续有人研究 id embedding + token image embedding 的话,可以引用一下这篇:)或者有大手子带我混论文。
欢迎点赞关注我,获取更多关于 AI 的前沿资讯。别忘了将本日的内容分享给你的朋友们,让我们一起见证 AI 技能的飞跃!