🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹

Token 是自然语言处理(NLP)和计算机语言学中一个关键的概念,指的是文本中的一个最小单位或元素。它通常是一个词、子词、字符或符号。在处理自然语言时,模型会将输入的文本分解为一系列的 token,这些 token 是模型进行处理和分析的基础。

1. Token 在 NLP 中的定义

Token 在不同的上下文中可以表示不同的粒度,具体分法取决于模型和任务的需要:

  • 词级别的 Token:将文本中的每个单词作为一个 token。例如,“I love AI” 这句话可以被分为三个 token:[“I”, “love”, “AI”]。
  • 子词级别的 Token:在处理复杂词汇或罕见词汇时,模型可能会将一个词拆分为若干个子词。例如,句子中的 “playing” 可以被分为 [“play”, “ing”],其中 “ing” 表示后缀。这种方法通常用于处理词汇表外的词汇。
  • 字符级别的 Token:一些情况下,模型会将每个字符作为一个 token。例如,“hello” 可能被分为 [“h”, “e”, “l”, “l”, “o”]。
  • 标点符号和其他符号:标点符号(如逗号、句号)以及一些特殊符号(如 $、@)也会作为独立的 token 进行处理。

2. Tokenization(分词)

Tokenization 是将原始文本拆分为 token 的过程。它是 NLP 任务中的一个基本步骤,帮助将文本转化为模型能够理解的形式。不同的语言和模型会采用不同的分词方法,常见的分词技术包括:

  • 基于空格的分词:通过空格将句子中的单词分割开。例如 “I love AI” 可以被分成 [“I”, “love”, “AI”]。这是最简单的分词方式,但对于复杂语言(如汉语、日语)不适用。
  • 基于词典的分词:通过查阅词典或使用词表来识别文本中的单词。例如对于汉语短语 “我喜欢自然语言处理”,可以分成 [“我”, “喜欢”, “自然语言处理”]。
  • 子词分词(Subword Tokenization):像 BPE(Byte-Pair Encoding)或 WordPiece 是常用的子词分词算法,它们将罕见的词拆分为常见的子词或字符,以提高模型的泛化能力。例如,“playing” 可能被拆分为 “play” 和 “ing”。这种方法用于大型预训练模型(如 BERT 和 GPT)。

3. Token 在深度学习模型中的应用

现代 NLP 模型(如 BERT、GPT)无法直接处理文本,需要先将文本转化为 token 序列。这个过程通常包括两个步骤:

  1. Tokenization(分词):文本被分解为 token 序列。
  2. Token 映射到词汇表:每个 token 对应词汇表中的一个唯一 ID(整数)。模型通过这种整数序列来处理文本。

例如,句子 “I love AI” 可能被分为以下 token 序列:

[“I”, “love”, “AI”] -> [101, 5436, 2773] (每个 token 对应一个唯一的词汇表 ID)

然后,这个整数序列被输入到模型中进行进一步的计算。

4. Token 的作用

  • 模型输入:token 是模型处理的最小单位,模型需要通过 token 来理解文本。将原始文本拆分为 token 后,模型可以计算每个 token 之间的关系,进而理解句子的含义。
  • 文本生成:在生成任务中(如 GPT 模型生成文本),模型也是逐步预测下一个 token,直到生成完整的文本。例如,在对话模型中,模型会根据之前的 token 来预测下一步的回复。

5. 常见的 Token 化方法

5.1 BPE(Byte-Pair Encoding)

BPE 是一种常见的子词分词方法,特别适用于处理大量词汇表外的罕见词。它的原理是通过合并频率最高的字符对逐步构建子词表,从而生成常见的子词单位。这种方法能有效压缩词汇表规模,同时提升模型对未见过的单词的处理能力。

例如,“unhappiness” 可能被拆分为 [“un”, “happiness”],而 “happiness” 可以进一步被拆分为 [“happi”, “ness”]。

5.2 WordPiece

WordPiece 是 BERT 模型使用的分词方法,类似于 BPE,逐步将频率最高的子词或字符组合在一起,用于减少词汇表的大小并提高对稀有词的处理效果。它的目标是通过最大化词汇表的覆盖率,同时保持较小的词汇表规模。

5.3 SentencePiece

SentencePiece 是一种无需任何预处理的分词方法,它将整个句子视作一个字符序列,使用子词单元将字符进行分解。这种方法不依赖于空格,可以处理多种语言,尤其适用于一些没有空格作为词界限的语言,如日语和汉语。

6. Token 的相关挑战

  • 词汇表外问题(OOV):在传统的词级别分词方法中,模型词汇表中没有见过的词无法被处理,这被称为 Out-of-Vocabulary(OOV)问题。子词分词(如 BPE)通过将未知词拆解为更小的子词来缓解这个问题。
  • 语言的复杂性:不同语言的分词难度差异很大。例如,英语使用空格作为单词边界,分词相对简单;而汉语、日语等语言没有显式的空格分隔词,分词就变得更加复杂。

7. Token 在模型推理中的表现

在模型推理或生成文本时,token 是逐步生成的。例如,GPT 模型在文本生成时,它会基于前面的 token 预测下一个 token,直到满足生成条件为止。每次生成一个新的 token,模型会重新评估整个上下文,输出最可能的下一个 token。

8、ChatGPT的token

ChatGPT 等大规模语言模型中,token 是指模型在处理输入文本时,将文本拆解成的最小单位。具体来说,ChatGPT 及类似的 Transformer 模型(如 GPT 系列)将输入的文本转换成 token 序列,然后根据这些 token 进行计算和生成。

这些 token 可以是单词、子词,甚至字符。GPT 模型采用的分词方法通常是基于子词的分词算法,比如 Byte-Pair Encoding (BPE)WordPiece,以确保模型能够处理各种不同长度和复杂度的词汇。

在 ChatGPT 中,token 具有以下特性

  1. 词汇拆分:

    • 一个完整的单词可能被拆分成多个 token。例如:
      • 单词 “artificial” 可能被拆分为 [“arti”, “ficial”]。
      • 句子 “I love artificial intelligence” 可能被拆分为 [“I”, " love", " arti", “ficial”, " intelligence"]。
    • 对于常见词,模型可能使用单个 token;而对于不常见或较长的词,它会将其拆分为多个子词。
  2. Token 的长度:

    • 通常,一个 token 大约是 4 4 4个字符,但具体情况会因语言、文本内容和分词方式而异。
    • 对于英语等使用空格分隔单词的语言,token 和词的数量大致相当。但在中文、日文等不使用空格分词的语言中,一个字符可能就是一个 token。
  3. Token 的作用:

    • 输入限制:ChatGPT 模型对输入和输出的 token 数有一个限制。以 GPT-4 为例,典型的上下文窗口大小(即它能处理的最大 token 数)通常在 8 , 000 8,000 8,000个 token 或 32 , 000 32,000 32,000个 token 左右,具体取决于模型的版本。超过这个限制的 token 会被截断。
    • 消耗计算资源:每个 token 都会占用一定的计算资源,模型处理的 token 越多,所需的计算量和内存消耗就越大。因此在实际应用中,token 的数量会影响响应时间和计算成本。
  4. Token 在推理和生成中的作用:

    • 在生成文本时,ChatGPT 是逐步处理和生成 token 的。模型根据已经生成的 token 和输入的上下文,预测下一个最有可能的 token,直到生成完成。例如,在用户输入一段文本后,模型会通过一系列 token 生成对应的回复。
    • 生成过程是按 token-by-token 的方式进行,而不是一次性输出完整的句子或段落。

举个例子

如果输入的文本是 “ChatGPT is a powerful AI model for natural language processing.”,模型可能会将其分解成以下 token:

  • “Chat”
  • “GPT”
  • " is"
  • " a"
  • " powerful"
  • " AI"
  • " model"
  • " for"
  • " natural"
  • " language"
  • " processing"
  • “.”

在生成阶段,模型根据已经生成的 token 预测下一个 token。例如,当生成 “ChatGPT is a” 之后,模型可能会预测出 " powerful" 作为下一个 token。

Token 的计数规则

在 ChatGPT 中,token 的计数包含:

  • 输入的 token:这是用户输入的文本中所有 token 的数量。
  • 输出的 token:这是模型生成的回复中的 token 数量。

一个对话的总 token 数是 输入 token + 输出 token,并且这个总数不能超过模型的最大上下文长度。例如,如果 GPT-4 的上下文窗口是 8 , 000 8,000 8,000个 token,而用户输入了 4 , 000 4,000 4,000个 token,则模型最多能生成 4 , 000 4,000 4,000个 token 的回复,超过的部分将无法处理。

Token 与费用

在使用 OpenAI 的 API 时,API 的费用是按处理的 token 数量收费的。这包括:

  • 用户的输入 token 数。
  • 模型生成的输出 token 数。

例如,如果某次对话使用了 500 500 500个输入 token 和 1 , 000 1,000 1,000个输出 token,则总共使用了 1 , 500 1,500 1,500个 token。

9. 总结

Token 是自然语言处理中的基础单位,表示文本的最小构成单元。通过 Tokenization,原始文本被拆分成 token 序列,供机器学习模型进行处理。Token 的形式可以是词、子词或字符,而具体的分词方法则视任务需要和语言特性而定。

Logo

在这里,我们一起交流AI,学习AI,用AI改变世界。如有AI产品需求,可访问讯飞开放平台,www.xfyun.cn。

更多推荐