大家都知道大模型是有个tokenizer的,记录着大模型使用的分词表,也是大模型理解语义和进行计算的最小单位。但不知道大家有没有过这样的脑洞?为啥要分词?按照UTF-8编码直接塞进去不是更好吗?
来看今天这个新模型,Bolmo-8B,他们就是直接抛弃了传统的方式,而是使用UTF-8 字节作为基本单位,把每个字符都看成字节序列来处理
这么做最大的好处是——"strawberry有几个r?"这样的问题就能轻松回答了!因为每个字母都是单独的utf8编码。
但是带来的问题也是实打实的,有的时候一个词可以很复杂,单有的时候一个词很简单,传统tokenizer能不同程度的平衡这个问题,但是轮到用utf8,每个词都要消耗单词长度的token,计算资源分配很不灵活。
而 Bolmo 这个模型取了个巧,他不是从0训练的,而是把现有的模型"字节化", 它内置了个Local Encoder/Decoder, 将字节序列压缩成"潜在 token",再送入传统 Transformer 处理。这样只需要少量的成本就能进行转换了。
目前大家最大的争议还是,看不到太大的受益,以及,更长的序列意味着更多的 KV Cache,显存压力更大。以及,只有在字符理解这个单一任务上大幅领先,其它任务没太大亮点。
总之可以持续关注下。技术爆发时期的螺旋探索总是很有意思的,比如我就比较喜欢水银整流器(最后一张图),但是现在都被IGBT取代了。
#ai生活指南##ai创造营#
发布于 日本
