Token智库

探索大语言模型中Token的奥秘与应用

1. Token的基本概念与定义

什么是Token及其在NLP中的意义

Token是自然语言处理(NLP)中的基本处理单位,可以理解为文本被切分后的最小单元。在大语言模型(LLM)中,所有输入和输出的文本都需要先转换为Token序列才能被模型处理。

Token是连接人类语言与机器语言的桥梁。人类使用的自然语言(如汉字、英文单词)需要转换为机器可以理解的数字形式,这个转换过程就是tokenization(分词)。每个token会被映射为一个唯一的数字ID,这些ID构成了模型的词表(vocabulary)。

Token与单词、字符的区别

Token与传统语言学中的概念有明显区别:

  • 与字符的比较:字符是最基本的书写符号(如字母、数字、标点),而token通常由多个字符组成。例如,英文单词"hello"可能是一个token,包含5个字符。
  • 与单词的比较:单词是有完整语义的语言单位,而token可能是单词的一部分、一个完整单词,或者多个单词的组合。例如,"playing"可能被分为"play"和"ing"两个token;而常用短语"by the way"可能作为一个单独的token。

示例:

  • 英文单词"unprecedented"→ 可能被分为"un"、"precedent"、"ed"三个token
  • 中文"人工智能"→ 可能被分为"人工"、"智能"两个token,或四个单独的字符token
  • 表情符号"😊"→ 可能是一个独立token,或被编码为多个token

为什么大语言模型需要使用Token而非直接处理文本

大语言模型使用token而非直接处理原始文本有几个关键原因:

  1. 计算效率:将文本转换为有限数量的token大大减少了模型需要处理的不同输入类型,使计算更高效。
  2. 语义捕捉:适当的tokenization可以捕捉语言中的语义单位,如词根、前缀、后缀等。
  3. 处理未知词:通过子词tokenization,模型可以处理训练中未见过的词汇。
  4. 统一表示:不同语言和符号系统可以统一表示为token序列。
  5. 向量化处理:token可以方便地转换为向量形式,便于神经网络处理。

2. 大语言模型如何处理Token

Tokenization的完整过程与原理

Tokenization是将原始文本转换为token序列的过程,包含以下步骤:

  1. 预处理:清理文本,处理特殊字符,规范化(如小写转换)
  2. 分词:根据特定算法将文本切分为token
  3. 数值映射:将每个token映射为唯一的整数ID
  4. 向量化:将ID转换为嵌入向量(embedding)
  5. 模型输入:将向量序列输入模型进行处理

示例:"I love AI!"的处理过程

原始文本: "I love AI!"
分词结果: ["I", "love", "AI", "!"]
数值映射: [23, 765, 380, 4]
向量化: [[0.1, 0.2, ...], [0.3, 0.5, ...], ...]

常见的分词算法及其优缺点比较

1. BPE (Byte-Pair Encoding)

原理:从字符级别开始,逐步合并最常见的相邻字符对,形成新token。

优点:
  • 能有效处理未登录词(OOV问题)
  • 平衡词汇量和序列长度
  • 适用于多语言场景
缺点:
  • 可能产生语义上不直观的切分
  • 对罕见词的处理不够理想

应用:GPT系列模型、RoBERTa等

2. WordPiece

原理:类似BPE,但使用概率而非频率来决定合并,优先合并能提高训练数据似然概率的字符对。

优点:
  • 更注重语言学上的合理性
  • 对常见词保持完整性好
缺点:
  • 计算成本较高
  • 对非英语语言支持相对较弱

应用:BERT、DistilBERT等

3. SentencePiece

原理:将文本视为Unicode字符序列,无需预分词,直接应用BPE或Unigram算法。

优点:
  • 语言无关,特别适合亚洲语言
  • 处理空格作为普通字符,更适合多语言
  • 支持直接从原始文本训练
缺点:
  • 可能导致跨词边界的不自然切分

应用:XLNet、T5、多语言模型

4. Unigram Language Model

原理:基于概率模型,从大词表开始,逐步删除不太可能的token。

优点:
  • 提供多种可能的分词方案
  • 理论基础更扎实
缺点:
  • 训练复杂度较高

应用:部分SentencePiece实现

不同语言的Token处理差异

英语等拼音文字

  • 自然的词边界(空格分隔)
  • 常基于词和子词单位
  • 例:"tokenization"["token", "ization"]

中文

  • 无明显词边界
  • 通常以字为基本单位
  • 常用词组可能作为单一token
  • 例:"人工智能"["人工", "智能"]["人", "工", "智", "能"]

日语

  • 混合使用多种文字系统(汉字、平假名、片假名)
  • 无空格分隔
  • 需要特殊处理不同文字系统的混合
  • 例:"私はAIが好きです"["私", "は", "AI", "が", "好き", "です"]

阿拉伯语等

  • 复杂的形态变化
  • 阅读方向不同(从右到左)
  • 连字现象
  • 需要特殊的预处理步骤

特殊符号、表情符号等非标准文本的处理方式

表情符号

可能被编码为特殊token或多个token

例:"😊" 可能被编码为一个特殊token或UTF-8字节序列

HTML/XML标记

可能保留为特殊token或在预处理中移除

例:"<p>Hello</p>"["<p>", "Hello", "</p>"] 或仅 ["Hello"]

URL和电子邮件

可能被切分为多个token

例:"https://example.com"["https", "://", "example", ".", "com"]

数学符号和公式

通常按字符级别处理

例:"E=mc²"["E", "=", "mc", "²"]

代码和程序语言

需要保留特殊语法结构

例:"for(i=0;i<10;i++)"["for", "(", "i", "=", "0", ";", ...]