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而非直接处理原始文本有几个关键原因:
- 计算效率:将文本转换为有限数量的token大大减少了模型需要处理的不同输入类型,使计算更高效。
- 语义捕捉:适当的tokenization可以捕捉语言中的语义单位,如词根、前缀、后缀等。
- 处理未知词:通过子词tokenization,模型可以处理训练中未见过的词汇。
- 统一表示:不同语言和符号系统可以统一表示为token序列。
- 向量化处理:token可以方便地转换为向量形式,便于神经网络处理。
2. 大语言模型如何处理Token
Tokenization的完整过程与原理
Tokenization是将原始文本转换为token序列的过程,包含以下步骤:
- 预处理:清理文本,处理特殊字符,规范化(如小写转换)
- 分词:根据特定算法将文本切分为token
- 数值映射:将每个token映射为唯一的整数ID
- 向量化:将ID转换为嵌入向量(embedding)
- 模型输入:将向量序列输入模型进行处理
示例:"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", ";", ...]