在进行 AI 大模型应用开发时,很多人接触到的第一个相对陌生的概念,就是 token。但是 token 又是绕不开的名词,token 是大模型输入和输出的计量单位,更重要的,token 也是使用大模型时的计费单位

token 是大模型对文本进行编码的一种方式。计算机理解的不是文本,而是数值。不管是文本,还是图像和视频,在计算机内部的编码方式都是数值。更具体的来说,是数值的数组,也就是向量。

以文本来说,token 是文本分割的最小单位。不同模型有各自的切分方法。一个 token 可以是一个单词、一个词组、一个标点符号、一个字符。

下面通过几个具体的例子来演示一下,以通义千问和 OpenAI 的 GPT-4o 为例。

首先是简单的句子:This is an apple. 两个模型都把这句话切分成 5 个 token,4 个英文单词和句号,每个都是一个 token。相同单词所对应的  token,内部的 ID 可能不一样。token 的 id 就是 token 的数值表示。

b42ecc2813673dbf6f466b02c38e66ea.png

42f4e67a8d87887469d0c05a2d8194f6.png

下面是一段更长的文本,是林肯著名的葛底斯堡演讲。通义千问切分成 313 个 token,GPT-4o 切分成 314 个 token。这里比较特别的是,对第一个单词 Fourscore(八十年) 的处理。这一个单词被切分成了3个token,依次是 F,ours 和 core,两个模型都是一样的处理方式。

1e03329d8674ea7f588b2f445c008f72.png

1e3708ddc9bd3de42dc8919c6cfcd33f.png

最后看一下中文的处理。用的例子是西游记开头的诗,通义千问切分成 56 个 token,GPT-4o 切分成 71 个 token。从 token 数量可以看出,同样的 token 数量限制,通义千问可以编码更多的中文字符

77fa65e456240074f915d6ba9867eea6.png

ff4774c8bab6ce723487680441910e0c.png

在实际的大模型应用开发中,具体接触到 token 的机会并不多。一个具体的场景是对文本进行切分。这也是检索增强生成应用中的重要一环。对一段文本进行切分时,可以按 token 来进行切分,这样更符合大模型的使用方式。Spring AI 内置提供了 TokenTextSplitter,按照 token 来切分文本。TokenTextSplitter 对文本进行编码时,使用的是 jtokkit 库,编码方式与 OpenAI 的模型兼容。

4b51f00259439a3aa2f1c422a47eea9b.png

很多模型服务都提供了 token 化的 API,可以调用 API 来获取 token 化的结果。比如,通义千问就有相关的 API,调用时不收取费用。

6daf527e8248667902a8874e3226050d.png

Logo

一站式 AI 云服务平台

更多推荐