AI破壁仁er
26-05-25 12:06 微博认证:AI博主

一个小科普:LLM上下文窗口的容量,如256K、1M,是以Tokens衡量的,而非字节(Bytes),也不是我们日常使用Word时见到的“字数”或“词汇数”。

虽然大家每天都在使用AI,也有不少朋友知道“上下文窗口”这个概念,但这可能是许多人的知识盲区,或者只是“知其然”而“不知其所以然”。

要把这件事说透,我们得先理解大模型是怎么“看”世界的。如果你直接扔给模型一段中文或英文,它是看不懂的。因为神经网络本质上是一堆错综复杂的数学公式,它们只能处理数字。

因此,我们需要一个翻译官,也就是“分词器(Tokenizer)”。它的工作是把人类的自然语言,切分成一小块一小块的文本碎片,并给每个碎片贴上一个唯一的数字标签。这些切分出来的碎片,就是我们所说的Token。

那为什么不干脆按计算机底层的“字节”或者人类习惯的“汉字/单词”来切分呢?这里面其实蕴含着一个非常巧妙的工程权衡。如果按字节切分,信息的粒度就太细了。

一个汉字通常占好几个字节,这意味着模型看一句话,需要处理一长串缺乏直接语义的数字。这会让输入序列变得极长,极大地拖慢模型的计算速度。要知道,模型核心的注意力机制,其计算开销是随着输入长度呈平方级急剧增加的。

反过来,如果按完整的单词来切分,粒度又太粗了。人类语言的词汇量是无穷无尽的,每天还在诞生各种网络新词。如果为每一个词都分配一个独立的标签,模型的词表会膨胀到无法在内存中高效运行。

所以,AI研究员们找到了一个绝佳的平衡点——子词切分技术。对于英文来说,常见的单词往往本身就是一个完整的Token。如果是比较生僻的长词,就会被智能地拆分成几个常见的词根或字母组合。

对于中文而言,情况会随着各家模型词表的不同而有所差异。在早期的模型中,一个汉字可能在底层会被拆成好几个Token。但在今天,大多数先进的大模型都大幅优化了中文词表。

现在,一个常见的中文词语往往能被完美压缩成一个或两个 Token。平均下来你可以粗略地认为,1个Token 大约等于0.75个英文单词。如果换算成中文,1个Token大概对应半个到一个完整的汉字。

例如谷歌的Agent Studio 里有一个“提示输入词元化器”,你可以看到每个文本对应的Token ID是什么,像汉字“你”的Token ID 就是“237408”。

#AI创造营##how i ai#

发布于 北京