常見的分詞方法分類如下:
類型 | 名稱 | 說明 | 優缺點 |
---|---|---|---|
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 全自動,不挑語種最靈活。