0%

token 简介


🧠 什么是 Token?

在自然语言处理中,Token 是文本的基本单位。它可以是一个字符、一个词、一个子词,甚至是一个标点符号。Token 的定义取决于所采用的标记化(tokenization)方法。


🔄 文本如何转换为数字?

在训练语言模型时,文本需要被转换为数字形式。这一过程通常包括以下步骤:

  1. 标记化(Tokenization):将文本分解为 tokens。
  2. 构建词汇表(Vocabulary):为每个 token 分配一个唯一的数字 ID。
  3. 数字化(Numericalization):将文本中的 tokens 替换为对应的数字 ID。

例如,句子 "hello world" 可能被标记化为 ["hello", "world"],然后根据词汇表转换为 [1, 2]


🔤 常见的标记化方法

1. Word-based Tokenization(基于词的标记化)

将文本按空格或标点符号分割成单词。这种方法简单直观,但存在以下问题:

  • 词汇表过大:需要为每个单词分配一个唯一的 ID,导致词汇表庞大。
  • 处理未登录词困难:对于训练数据中未出现的单词,模型难以处理。

示例

  • 输入文本:"I love NLP"
  • 标记化结果:["I", "love", "NLP"]
  • 数字化表示:[1, 2, 3]

2. Character-based Tokenization(基于字符的标记化)

将文本分解为单个字符。这种方法可以有效减少词汇表大小,但可能导致以下问题:

  • 信息丢失:字符级别的表示可能无法捕捉到词汇的完整语义。
  • 序列长度增加:同一文本的 token 数量增加,可能影响模型的处理效率。

示例

  • 输入文本:"I love NLP"
  • 标记化结果:["I", " ", "l", "o", "v", "e", " ", "N", "L", "P"]
  • 数字化表示:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

🔬 Subword-based Tokenization:BPE(字节对编码)

BPE 是一种子词级别的标记化方法,旨在平衡词汇表大小和语义表达能力。它通过迭代地合并最频繁的字符对来构建子词单元,并被广泛应用于 GPT、BERT 等大语言模型。BPE 的过程可以概括为以下五个阶段:

1. 初始化词汇表

  • 拆分字符:首先将语料库拆分为最小单位——单个字符。例如,对单词 lower 拆分得到 l o w e r</w>,并在每个词尾添加特殊结束符(如 </w>),以区分不同词。
  • 构建初始词表:记录所有出现过的字符,作为初始 token 集。

2. 统计相邻字符对频率

遍历所有词,统计每个相邻字符(或已合并的子词)对的出现次数。BPE 通过这一统计来识别语言中最常见的模式,以决定接下来要合并的符号对。

3. 合并最频繁的符号对

找到出现频率最高的字符对,并将它们在整个数据集中合并成新的子词。例如,如果 (w, e) 是最高频组合,则将其合并为 we;更新所有相关词,并把新子词加入词汇表。

4. 重复步骤直到达到词表大小

BPE 是一个迭代过程。每次合并后,统计新的相邻符号对并继续合并,直到词汇表达到预设大小或不再有需要合并的符号对。

5. 构建最终词汇表并应用到文本

最终词汇表既包含初始的字符,又包含所有合并得到的高频子词。新词可以通过这些子词组合表示,因此任何新词都能拆解为已知的子词序列。

示例:BPE 分词过程演示

以以下词汇集为例:huggingfacehuggingfacehughuggerlearninglearnerlearn。将每个词拆分为字符并加上结束符,然后执行频次统计和合并。以下是前几次合并:

  1. (h, u)hu
  2. (hu, g)hug
  3. (hug, g)hugg
  4. (i, n)in
  5. (in, g)ing
  6. (l, e)le
  7. (le, a)lea
  8. (lea, r)lear

执行 8 次合并后,词表扩大至 20 个 token,其中包括基本字符(h,u,g,i 等)和新合成的子词(hug,hugg,ing,lear 等)。词 huggingface 经过标记化后为 hugg ing f a c e </w>learning 则为 lear n ing </w>,其余词也可以用类似方式表示。

🧪 BPE 的优缺点

优点:

  • 处理未登录词:通过把词拆解为子词,BPE 可以用已有的子词组合来表示训练集中未出现的词汇。
  • 减少词汇表大小:相比基于词的标记化,BPE 可以显著缩小词表规模,使模型更高效。
  • 提升泛化能力:子词级表示允许模型学习更细粒度的语言结构,对不同领域、不同语言具有更好的泛化能力。

缺点:

  • 合并规则依赖语料:不同语料得到的合并规则差异较大,多语言场景下可能需要复杂的处理。
  • 语义完整性可能受损:如果合并过度,某些合成词的语义仍可能分割,需根据任务选择合适的词表大小。

📝 总结

标记化是自然语言处理的核心步骤,它将文本转换为模型可处理的数字形式。基于词和基于字符的标记化方法简单易理解,但分别存在词汇表过大和序列过长的问题。BPE 作为一种子词级标记化算法,以初始化字符集为基础,通过迭代合并高频符号对构建新的子词单元。这种方法兼顾了词表大小和语义表达能力,既能处理未登录词,也能保留足够的语义信息。因此,现代大语言模型通常采用 BPE 或其变种(如 WordPiece、SentencePiece)作为默认的标记化方案。