分詞器 是什麼?
Tokenizer:分詞器 的完整解釋
將文本分割成詞元(tokens)的工具,詞元可以是詞、子詞或字符,是 NLP 模型的輸入預處理步驟。
分詞器(Tokenizer)是整個 NLP 流水線的第一道關卡,看似簡陋卻至關重要。許多 NLP 初學者容易低估分詞的影響,實際上分詞質量直接決定了模型能否正確理解文本。
分詞的目標與挑戰
分詞的目標是將文本(無界線的字符序列)轉換為有意義的「詞元」序列,供後續模型處理。看似簡單的「以空格和標點分割」在許多語言中失效:
英文中的挑戰
- 複合詞:"don't" 是一個詞還是 "do" + "n't"?
- 縮寫:"Dr." 末尾是句點還是詞的一部分?
- 專有名詞:"New York" 是兩個詞還是一個地名?
中文挑戰更大
- 句子無空格分界:"我喜歡吃蘋果"無法用空格分割。
- 歧義性:"銀行的行長"中"行"可分為"銀行"的一部分,或"行長"的一部分。
- 詞序與語境相關。
分詞方法的演進
第一代:基於規則與詞典
詞典匹配(Dictionary-based Tokenization)
維護一份詞典,掃描文本尋找詞典中的詞。若找到,提取為一個詞元;否則逐字符處理。優點是準確度高(針對已知詞),缺點是無法處理新詞、詞典維護成本高。
最大匹配法(Maximum Matching)
貪心地在當前位置選擇最長的詞典詞。例如在「銀行的行長」中:
- 正向最大匹配:尋找以"銀"開頭的最長詞→ "銀行"(2字),輸出"銀行";然後"的",最長匹配是"的";然後"行長"→ "行長"。結果:"銀行|的|行長"。
- 逆向最大匹配:從右往左。
雖然簡單,最大匹配在中文中經驗準確度達 95% 左右,至今仍在生產系統使用。
第二代:基於統計機器學習
隱馬爾可夫模型(HMM)分詞
將分詞視為標序列標注問題:給定字符序列,預測每個字的標籤(B-開始、M-中部、E-結尾、S-獨立字)。用 HMM 學習字標籤的轉移機率和發射機率。優點是能應對詞典外詞彙(OOV),缺點是特徵表達能力有限。
條件隨機場(CRF)分詞
CRF 相比 HMM 能融合任意形式的特徵(字本身、詞性、上下文、詞頻),性能更好。2000 年代,CRF 成為中文分詞的標準方法,準確度達 97%。
第三代:神經網路與子詞分詞
深度學習時代,兩個重要變化:
1. 神經網路序列標注(BiLSTM-CRF 分詞)
用 BiLSTM 替代 HMM/CRF 的特徵部分,自動學習字級別的非線性特徵。性能略優於 CRF,但不是量級級的改進,因為分詞本身是相對簡單的任務。
2. 子詞分詞(Subword Tokenization)
神經機器翻譯興起後,研究者發現詞級詞表非常大(50k–100k 詞),且無法處理新詞。突破性的想法是:不用完整的詞作為詞元,而是用「子詞單元」(子詞)。例如,"unhappily" 可分為 ["un", "happy", "ly"] 或 ["u", "n", "hap", "py", "ly"] 等。
BPE(Byte Pair Encoding)
Sennrich 等提出的 BPE 是最流行的子詞分詞方法:
- 從所有字符開始(如 "a", "b", ..., "z")。
- 統計相鄰字符對的共現頻率。
- 合併最頻繁的字符對,形成新的子詞單元。
- 重複,直到達到詞表大小目標(如 32k)。
例如,若 "ab" 最頻繁,合併成新單元 "ab";再統計,若 "ab c" 最頻繁,合併為 "abc",依此類推。
BPE 的優勢:
- 無法處理 OOV 詞:"unhappy" 即使不在詞表也能分解為子詞。
- 詞表大小可控(通常 32k–50k)。
- 對形態豐富的語言(芬蘭語、德語)特別有效。
WordPiece
Google 提出,類似 BPE 但使用頻率與互信息(Mutual Information)結合的準則選擇合併候選。BERT 採用 WordPiece。
SentencePiece
Google 的另一個方法,直接從原始文本(包括空格和標點)學習子詞詞表,支持多語言且不依賴預先分詞。
分詞對下游任務的影響
實驗表明,分詞質量顯著影響模型性能:
精細分詞(詞級或更小粒度)
優點:語義清晰,特別是對重要詞彙。 缺點:詞表大,OOV 率高;罕見詞的向量表示可能不穩定。 適用:任務對詞義明確性要求高(如實體識別、槽位填充)。
粗糙分詞(字級或子詞)
優點:詞表小、OOV 率低、模型參數少。 缺點:失去詞的語義邊界,增加模型的學習負擔。 適用:計算資源受限、低資源語言、多語言模型。
實務經驗
- 對於英文,BPE/WordPiece(子詞)已成為標準,詞表 32k–50k。
- 對於中文,詞級分詞(中文分詞器)性能通常更好,因為中文 OOV 罕見(詞義組合性強)。
- BERT、GPT 等大型模型都內置了分詞器(WordPiece / BPE),與模型權重聯合訓練,應直接使用而非自定義。
- 自定義分詞器時,需考慮目標任務的語言特徵與詞表大小的平衡。
分詞的邊界案例
多語言文本
混合語言的文本(如「我喜歡 Apple products")需要支持多語言的分詞器。通用分詞器(如 SentencePiece)能處理,但性能可能低於單語言優化的分詞器。
非標準文本
社群媒體文本、聊天記錄、代碼混用(Code-switching)等對傳統分詞器挑戰大。需要領域特異分詞器或後處理規則。
分詞與模型聯合優化
現代趨勢是分詞與下游模型聯合優化:
- 某些系統不固定分詞結果,而是讓模型學習多個可能的分詞,邊際化分詞歧義。
- 或在訓練時添加分詞噪音,提升模型對分詞誤差的魯棒性。
這反映了一個現實:完美的分詞不存在,不同任務需要不同的粒度。