BPE 全名是 Byte Pair Encoding,中文常譯作「位元對編碼」或「字節對編碼」。這是一種常見的子詞(subword)分詞技術,尤其常用於自然語言處理(NLP)和語音模型的「tokenization」步驟。
你上面的 [t1, t2, t3, ...] 就是經過 BPE 分詞後,原本一句話被切分成的一連串 token。
BPE 的核心思想
- 初始:把文本的每一個字元當作一個 token。
- 合併:反覆尋找最常出現的連續字元對(byte pair),然後把它們合併成一個新 token。
- 反覆執行:這個合併動作會重複很多次(通常設定一個字典大小),最後可以產生一份「子詞表」。
- 應用:分詞時,就用這個表來把輸入文字切成盡量長、但字典中有的 token。
BPE 直觀例子
假設你有句話:
banana nana bandana
- 初始:b a n a n a n a n a b a n d a n a
- 合併:「n a」常出現 → 合成「na」
b a na na b a n d a na
- 再合併:「ba」常出現 → 合成「ba」
ba na na ba n d a na
- 持續合併,直到達到設定的詞表大小。
為什麼語音模型或 LLM 要用 BPE?
- 兼顧詞與字元的好處:太細(如用字元)效率低,太粗(如直接用詞)容易遇到 OOV(未登錄詞)問題。BPE 能有效壓縮字表,又能處理新詞或罕見詞。
- 模型可控:你可以設定 token 數量,平衡模型效率和 coverage。
- 與語音/文字一樣適用:現代 TTS、ASR、LLM 都很愛用 BPE/Unigram/BERT WordPiece 這類方法。
相關延伸
- BPE 是一種無監督的分詞方法。
- BPE token 通常會看到一些像「##ing」這種 subword,或在英文裡斷詞很奇怪的符號。