大模型的 token 究竟是什么?如何通俗易懂地解释?

大模型的 token 究竟是什么?如何通俗易懂地解释?

笙囧同学,沉迷金融和写故事搞外快,不务正业的深度学习程序猿一枚

说实话,煮啵第一次看到 token 这个词,还以为是令牌,哈哈哈哈。

以为就是那种游乐场的代币,投进去才能玩的那种。

后来发现不是,但也没人好好解释过,就这么模模糊糊地用着。

直到有一次煮啵跑实验,API 报错了——

“exceeded maximum token limit”

超过最大 token 限制。

煮啵才有点好奇,想认真去搞清楚这个东西到底是什么。

今天说给读者姥爷们听听。


煮啵先来让大家自己去做一个实验

你在脑子里默念一下这句话:

“今天天气不错。”

你是一个字一个字地读的,还是一个词一个词地读的?

大多数人,是”今天 / 天气 / 不错”这样,按词组来读的,不会”今 / 天 / 天 / 气 / 不 / 错”一个字一个字地读。

大模型处理文字,也是类似的方式——

不是一个字母一个字母地看,而是先把文字切成一小块一小块的,然后处理这些小块。

这些小块,就是 token。


但 token 不完全等于词

这是大多数人第一次接触 token 很容易会误解的地方。

煮啵当时也以为,一个词就是一个 token。

但实际上,没这么整齐哈哈哈。

这里煮啵举个栗子——

“cat”,一个 token。

“cats”,可能是”cat”加”s”,两个 token。

“tokenization”,大概率是”token”加”ization”,两个 token。

那,为什么要这么切?

因为模型切 token 的逻辑,不是按照词典来的。

它的逻辑是——

把最常见的字母组合,打包成一个 token。

“ing”在英文里出现频率极高,打包成一个 token。

“tion”也是,”pre”也是,”un”也是。

越常见的组合,越容易被打包成一整块。

越生僻的词,越容易被切得很碎,碎到一个字母一个字母的程度。


中文怎么算

中文相对简单一点,大多数情况下,一个汉字就是一个 token。

“煮啵今天在实验室等模型收敛”

大概就是十几个 token,基本上一字一个。

但高频词组有时候会被打包——

“所以”、”因为”、”的话”这类,在某些模型里可能算一个 token。


那么,有的读者姥爷可能就想问了,那为什么不直接用字母,非要搞 token 这一层呢?

煮啵当时也想过这个问题。

直接用字母处理不行吗,非要搞这个 token?

后来啊,才知道,有两个原因——

第一个,序列太长了。

“I love machine learning”,按字母算,是 24 个字符。

按 token 算,大概 4 到 5 个。

模型能处理的长度是有上限的,同样的上限,用 token 能装进去更多内容。

第二个,字母太碎,没有意义。

“l”、”o”、”v”、”e”这四个字母单独看,模型学不到什么东西。

“love”作为一整块,才有意义可以学习。

Token 是一个折中——

比字母大,有语义。

比词灵活,能处理各种没见过的新词。


那 Token 限制是什么意思

读者姥爷们现在应该能理解这个了。

“这个模型支持 128k token 的上下文”——

意思是你跟模型的对话,加在一起,最多 128000 个 token。

超过了,模型就开始忘前面说过的事,就像一个人短期记忆装满了,自动把最早的内容挤掉。

128k token 大概有多少字?

中文大概十几万个汉字,差不多一本长篇小说的量。


按 Token 计费是怎么回事

众所周不知,调大模型的 API,是按 token 收钱的。

你发给模型多少 token,模型回复了多少 token,分开计费。

煮啵有一次写了个很长的 Prompt,让模型反复输出很长的内容,跑了一晚上实验。

第二天导师看账单,沉默了大概五秒钟。

然后叫煮啵过去。

呜呜呜,咳咳(此处省略 500 字)

那次之后,煮啵写 Prompt 开始非常注意长度。


最后煮啵来想到一个比喻

如果还是觉得有点抽象——

你可以把 token 理解成乐高积木。

语言是用积木拼出来的东西。

模型处理语言,不是看你拼好的成品,而是把它拆回一块一块的积木,然后处理这些积木。

积木的大小不是固定的——

常见的组合,积木块大。

生僻的组合,积木块小,甚至拆到一块砖头一块砖头的粒度。

你说一句话,模型把它拆成积木,处理,然后一块一块地把回答拼出来,再还原成你能看懂的文字。

整个过程,积木就是 token。


好啦好啦,就这些。

总结一下

Token 不是词,是碎片。

碎片大小取决于这个组合有多常见。

模型处理文字、收费、限制上下文,全都以 token 为单位。

煮啵当初要是有人这么说一遍,能少困惑好久。

另外回复一下评论区的常见问题

1. 大模型上下文 = 一次推理里输入 + 输出总共能塞的 token 数,不是聊天窗口历史上限,后者是产品层封装的。

2. 输入、输出都算 token,通常输入便宜、输出贵,prompt 越长费用越高。

​3,模型“思考过程”的文字也算输出 token,一样计费、一样占上下文。

4,Token 上下文长度 = AI 当前能“看见”的总文本长度,也就是模型一次能处理、能看到的文本上限。

≠ 记忆

≠ 理解能力

≠ 学习能力

很多读者姥爷们的误区:

以为上下文长 = 记忆力好

​以为 AI 会“记住”很久以前的对话

真实机制:

AI 没有传统意义上的记忆

​它每一次回答,都只依赖当前输入给它的那一串 token

超出上下文长度的内容,对它就是不存在

另外,中文没有天生优越性,反而在 token 效率上天然吃亏,但在语义密度上有优势。

简单说就是:

英文 1 token ≈ 可能 4 字符,中文大多 1 token = 1 字

→ 同样字数,中文更费 token。

​但中文信息密度更高,同样意思用字更少。

​模型内部只看向量与注意力,不区分语言优劣。

咳咳,合理,全体起立,下课家人们!