AI 中 Token 的定义及详解

AI 中的 token 是怎么定义

在 AI 领域,尤其是在自然语言处理(NLP)和大型语言模型(LLM)中,“token” 指的是文本数据被分割成的最小有意义单元

你可以把它想象成文本的积木块。AI 模型在处理文本之前,会先用一个分词器 (Tokenizer) 把原始文本转换成一个 token 序列。然后,模型会处理这些 token 来理解、生成或翻译文本。

Token 可以是:

  1. 单词 (Words): 这是最直观的理解。例如,句子 “I love AI.” 可能会被分割成 ["I", "love", "AI", "."]
  2. 子词 (Subwords): 对于复杂的词汇、罕见词或为了控制词汇表大小,一个单词可能会被拆分成更小的有意义部分。例如,“tokenization” 可能会被拆分成 ["token", "ization"]["tok", "en", "ization"](具体取决于分词算法)。这种方式的好处是:
    • 减少词汇表大小: 不需要为每个词的变体(如 “run”, “running”, “ran”)都创建一个独立的 token。
    • 处理未知词 (Out-of-Vocabulary, OOV): 即使模型没见过某个完整的词,它也可能通过已知的子词来理解其含义。
  3. 字符 (Characters): 在某些情况下(例如处理某些特定语言或特定任务),token 可以是单个字符。例如,中文在某些分词策略下,每个汉字可以被视为一个 token,如 “我爱人工智能” → ["我", "爱", "人", "工", "智", "能"]。当然,中文也可以按词分,如 ["我", "爱", "人工智能"]
  4. 标点符号 (Punctuation): 像逗号、句号、问号等通常也会被视为独立的 token。
  5. 特殊符号 (Special Tokens): 模型还会使用一些特殊的 token 来表示特定的信息,例如:
    • [CLS] (Classification): 句子分类任务中,常放在句子开头,其对应的输出向量可用于分类。
    • [SEP] (Separator): 用于分隔两个句子或文本段。
    • [PAD] (Padding): 当输入序列长度不一时,用于将较短的序列填充到统一长度。
    • [UNK] (Unknown): 代表词汇表中没有的未知词(如果分词器不使用子词策略或子词也无法覆盖)。
    • [MASK] (Masked): 在掩码语言模型(如 BERT)中用于遮挡某些词,让模型预测。

为什么需要 Token?

  • 数值化表示: AI 模型(尤其是神经网络)不能直接处理原始文本。Tokenization 是将文本转换为模型可以理解的数值形式(通常是 token ID,然后通过词嵌入层转换为向量)的第一步。
  • 结构化输入: 将连续的文本流分割成离散的单元,便于模型进行分析和学习。
  • 管理词汇量: 通过子词等策略,可以在有限的词汇表内表示广泛的语言现象。

Token 的重要性:

  • 模型输入长度限制: 很多模型(如 BERT、GPT 系列)都有最大 token 输入长度的限制(例如 512, 2048, 4096, 8192, 32k, 128k tokens)。超过这个长度的文本需要被截断或特殊处理。
  • API 计费: 许多 AI 服务的 API(如 OpenAI 的 GPT API)是按照处理的 token 数量来计费的。
  • 模型性能: 分词策略的好坏会直接影响模型的性能。

简单来说,token 就是 AI 模型“阅读”和“理解”文本的基本单位。