你知道吗?丨AI补全百科之Token篇

Token:AI阅读的"基本单位"

你用ChatGPT聊天时,有没有注意到它有时候会"数错"字数?你说了一段100字的话,它却说你有150个Token。这是怎么回事?答案就在于AI处理文本的方式——它不按"字"来读,而是按Token来读。

什么是Token?

Token 是AI处理文本时的最小单位。你可以把它理解为AI"阅读"文本时的"基本积木块"——AI不会像人类一样逐字阅读,而是先把文本切分成一个个Token,然后再处理这些Token。

:brick: 生活比喻:乐高积木

想象你要用乐高积木搭一座城堡。你不会用一整块大积木直接变出城堡,而是用许多小块积木一步步拼出来。

Token就像这些乐高积木——一段话就是一座"城堡",AI需要把它拆成一个个Token(积木块),才能理解和处理。简单的话可能只需要几块积木,复杂的话就需要更多积木。

Token、字符和词有什么区别?

这是最容易混淆的地方。让我们用一个例子来说明:

“我喜欢吃苹果”

单位 切分方式 数量
字符 我/喜/欢/吃/苹/果 6个
我/喜欢/吃/苹果 4个
Token 我/喜欢/吃/苹果(可能2-5个Token) 取决于模型的分词器

关键点:Token不等于字,也不等于词。它是模型自己定义的一种切分方式。

中文和英文的Token差异

  • 中文:一个常见词通常对应 1-2个Token,一个生僻字可能占更多Token

  • 英文:一个常见词(如"apple")通常对应 1个Token,一个罕见词可能被拆成多个Token(如"unbelievable"可能被拆成"un"+“believ”+“able”)

:input_latin_letters: 生活比喻:不同语言的"积木大小"不同

就像中文的乐高积木和英文的乐高积木大小不一样——中文的积木通常比较大(一个Token能覆盖更多内容),英文的积木比较小(一个词可能要好几块积木才能拼出来)。

所以同样一段话,中文的Token数通常比英文少。

为什么用Token而不是直接用字或词?

你可能会问:为什么不直接按字或按词来处理?这是因为Token在效率和灵活性之间取得了最佳平衡:

如果按字符处理 :memo:

  • 优点:切分简单,不会出现"不认识的词"

  • 缺点:每个字符携带的信息太少,模型需要处理更多单位,效率低

如果按词处理 :open_book:

  • 优点:每个单位携带的信息多

  • 缺点:词汇量太大(尤其是中文),遇到新词就"不认识"了

按Token处理 :puzzle_piece:

  • 平衡:常见的词保持完整(效率高),罕见的词被拆成子词(灵活性强)

  • 这就是**子词分词(Subword Tokenization)**的智慧

:balance_scale: 生活比喻:货币的面额设计

想象一下,如果只有1分硬币(字符),买一杯10元的咖啡你要数1000个硬币,太麻烦。如果只有100元大钞(词),买一瓶2元的矿泉水又找不开。

Token就像合理的货币面额体系——有1元、5元、10元、50元、100元。常见交易用大面额(效率高),小额交易用小面额(灵活性强)。

Token和成本有什么关系?

如果你使用AI的API(比如OpenAI的API),费用是按Token计算的。这意味着:

  • 你发送给AI的文字,按输入Token计费

  • AI返回给你的文字,按输出Token计费

  • 输入和输出的价格通常不同(输出更贵)

:money_bag: 生活比喻:出租车计价

就像打车——你上车后的距离是"输入Token",下车后的距离是"输出Token",每一段路程都要计费。所以,精简你的提问,既能省钱,又能让AI更专注。

:straight_ruler: 比喻:不同大小的"收纳箱"

每个模型就像一个不同大小的收纳箱——有的只能装一个小书包(4K),有的能装一个大行李箱(128K),有的甚至能装一个小型仓库(1M)。你需要根据要处理的文本量,选择合适大小的"收纳箱"。

实用技巧:如何估算Token数?

虽然精确的Token数取决于具体的分词器,但这里有几个快速估算的方法:

方法1:粗略估算 :abacus:

  • 中文:字数 x 1.5 ≈ Token数

  • 英文:单词数 x 1.3 ≈ Token数

方法2:使用在线工具 :wrench:

  • OpenAI官方提供了Tokenizer工具,可以精确计算Token数

  • 各种第三方Token计数器也可以使用

方法3:在代码中计算 :laptop:


# 使用tiktoken库(OpenAI的官方分词库)

import tiktoken

enc = tiktoken.encoding_for_model("gpt-4")

tokens = enc.encode("你好,世界!")

print(len(tokens)) # 输出Token数量

:light_bulb: 小贴士:在写Prompt(提示词)时,精简表达不仅能节省Token费用,还能让AI更精准地理解你的需求。就像写邮件——简洁明了的邮件,对方更容易抓住重点。

:light_bulb: 一句话总结:Token是AI处理文本的"基本积木块",它不等于字也不等于词,而是在效率和灵活性之间取得平衡的智能切分方式——理解Token,是高效使用AI、控制成本的第一步。

1 个赞