AI里天天说的词元(Token)到底是什么?怎么读?一次讲清楚

最近在研究AI大模型,到处都看到"Token"这个词,什么"消耗了多少Token"、“上下文Token限制"之类的。查了一下中文叫"词元”?

几个问题想请教:

  1. 词元到底是什么?是一个字算一个词元吗?
  2. Token怎么读?还是有标准读法?
  3. 为什么不直接叫"字数"而要搞个词元的概念?

小白求科普,越通俗越好。

做NLP的来回答一下。

词元(Token)是大模型处理文本的最小单位,但它不等于一个字或一个词。模型在处理文本之前,会先用一个叫"分词器(Tokenizer)"的工具把文字切成一段段的词元。

举几个例子你就懂了:

  • 英文:“Hello world” → [“Hello”, " world"] = 2个词元
  • 中文:“你好世界” → [“你”, “好”, “世”, “界”] = 4个词元(中文基本1字约1-2个词元)
  • 代码:print("hello") → [“print”, “(”, “hello”, “)”] = 4个词元

所以同样的意思,中文消耗的词元通常是英文的2-3倍,这就是为什么用中文调API比英文贵。

读音的话,英文原音是Token,中文直接叫"词元"就行。2024年国家标准已经把Token的中文术语定为"词元"了。

1 个赞

简单理解:词元就是AI的"计费单位",跟手机流量的MB差不多

我之前也搞不懂,后来发现一个好办法——OpenAI有个在线的Tokenizer工具,你把一段话贴进去,它会用不同颜色标出每个词元的边界。一试就明白了。中文确实亏,"我今天很开心"这6个字被切成了8个词元,英文"I am happy today"才4个词元

补充一些深层逻辑,帮你从根本上理解词元。

为什么不直接用"字数"?

因为大模型不是按字处理文本的。它的"大脑"——也就是神经网络——需要把文字转成数字才能计算。词元就是这个转换过程的中间产物。

具体流程是这样的:

  1. 你输入一段话:“今天天气不错”
  2. 分词器把它切成词元:[“今天”, “天气”, “不错”](这是理想情况,实际可能切得更碎)
  3. 每个词元对应一个数字ID,比如 [3847, 5621, 2103]
  4. 这些数字进入神经网络进行计算
  5. 模型输出新的数字ID,再转回词元,最后拼成回答

不同模型的词元不一样

GPT-4、Claude、通义千问用的分词器都不同,所以同一句话在不同模型里被切成的词元数也不同。比如"人工智能"在GPT-4里可能是2个词元,在某些国产模型里可能是1个词元(因为国产模型的分词器对中文做了优化)。

为什么词元数量很重要?

两个原因:

  1. 收费:API按输入+输出的词元总数收费。比如Claude Sonnet是每百万输入词元3美元
  2. 上下文限制:每个模型有上下文窗口限制,比如128K词元。超过了模型就"记不住"前面的内容

所以你会看到大家讨论"这个模型支持200K词元上下文"、“这次对话消耗了5000词元”,说的都是这个概念。

最后关于叫法——在正式技术文档里建议用"词元",口语里说Token也行。就像CPU大家都叫CPU不叫"中央处理器"一样。

1 个赞

作为一个非技术的产品经理,我用最土的方式理解词元:就把它想成"AI读了几口饭"。每口饭就是一个词元。中文字笔画多,AI嚼起来费劲,一个字可能要嚼一两口。英文字母简单,几个字母一口就吞了。所以中文费词元(费钱),英文省词元(省钱)。

1 个赞

秒懂了!原来词元不等于字数,而且中文比英文贵是因为分词的问题。那请问一下,有没有什么办法减少词元消耗?比如说话简洁点有用吗?

回答楼主的追问,减少词元消耗确实有一些技巧:

  1. 精简提示词:把"请你帮我详细地分析一下以下内容"改成"分析以下内容",少几个字就少几个词元
  2. 英文提示词:如果你英文还行,用英文写System Prompt比中文省一半词元
  3. 控制输出长度:在提示词里加"简洁回答"或设置max_tokens参数
  4. 清理上下文:长对话定期总结历史,不要把所有聊天记录都带着

不过说实话,现在词元价格越来越便宜了,Deepseek百万词元才1块钱,没必要太抠门。

终于有人讲清楚了,之前一直迷糊