常见的分词方法分类如下:
类型 | 名称 | 说明 | 优缺点 |
---|---|---|---|
1️⃣ 基于空格/标点 | Word-level | 以空格或标点划分,如 "Hello, world!" → ["Hello", ",", "world", "!"] | ✅简单,❌无法处理新词,词表太大 |
2️⃣ 基于字符 | Character-level | 一个字符一个 token,如 "你好" → ["你", "好"] | ✅通用性好,❌序列太长 |
3️⃣ 子词级 | Subword-level (🔥主流) | 通过数据学习出词根、词缀、组合形式,如 "playing" → ["play", "ing"] | ✅处理 OOV、新词能力强,模型更稳定 |
4️⃣ 拼音/词干提取 | 特殊任务中使用 | 适合中文/特定语言,或搜索系统 | ✅提升特定语言效果 |
5️⃣ SentencePiece | 通用子词分词器(T5、XLNet) | 不依赖空格,用字符构建词表 | ✅适用于多语言、无空格语言(如中文) |
🔥 主流 NLP 模型用的分词方法
模型 | 分词方法 | 工具 |
---|---|---|
BERT | WordPiece | transformers 内置 |
GPT/GPT-2 | Byte-Pair Encoding (BPE) | tokenizers |
RoBERTa | BPE | tokenizers |
T5 | SentencePiece | sentencepiece |
通义 Qwen | BPE + 中文词粒度优化 | 阿里自研 tokenizer |
Baidu ERNIE | WordPiece + 中文增强 | 百度 PaddleNLP |
OpenAI GPT-4 | tiktoken | 支持 byte-level 分词 |
🧠 重点解释:三大子词分词方法(subword)
方法 | 原理 | 应用模型 |
---|---|---|
✅ WordPiece | 从大词拆小(优先匹配最长前缀) | BERT、ERNIE |
✅ BPE(Byte Pair Encoding) | 高频字符组合为子词 | GPT-2、RoBERTa、Qwen |
✅ SentencePiece | 无需空格,支持任意语言,直接从字符训练 | T5、ALBERT、XLNet |
🔍 示例:将 unhappiness
分词
-
WordPiece:
["un", "##happiness"]
-
BPE:
["un", "happi", "ness"]
-
SentencePiece:
["▁un", "happiness"]
🧪 中文分词特别注意:
中文没有空格,不像英文那样天然有“词界限”。
-
🔸 原始中文可以用
jieba
(规则+词典) -
🔸 大模型(如 BERT 中文版)用的是字符级 + WordPiece
-
🔸 最新模型(如通义、百川)会特别训练 tokenizer,更好处理“你是谁” vs “你是 谁”
📦 工具推荐(直接用):
工具库 | 特点 |
---|---|
🤗 transformers | 预训练模型自带 tokenizer |
tokenizers | 更底层,可自定义训练 tokenizer |
sentencepiece | 训练 T5 / BERT tokenizer |
jieba | 中文规则分词,适合快速试验 |
✨ 总结口诀:
英文分词有空格,中文分词靠模型;WordPiece 拆词根,BPE 合字符;SentencePiece 全自动,不挑语种最灵活。