BPE 是什麼?

BPE 全名是 Byte Pair Encoding,中文常譯作「位元對編碼」或「字節對編碼」。這是一種常見的子詞(subword)分詞技術,尤其常用於自然語言處理(NLP)和語音模型的「tokenization」步驟。
你上面的 [t1, t2, t3, ...] 就是經過 BPE 分詞後,原本一句話被切分成的一連串 token。

BPE 的核心思想

  • 初始:把文本的每一個字元當作一個 token。
  • 合併:反覆尋找最常出現的連續字元對(byte pair),然後把它們合併成一個新 token。
  • 反覆執行:這個合併動作會重複很多次(通常設定一個字典大小),最後可以產生一份「子詞表」。
  • 應用:分詞時,就用這個表來把輸入文字切成盡量長、但字典中有的 token。

BPE 直觀例子

假設你有句話:
banana nana bandana
  1. 初始:b a n a n a n a n a b a n d a n a
  1. 合併:「n a」常出現 → 合成「na」
    1. b a na na  b a n d a na
  1. 再合併:「ba」常出現 → 合成「ba」
    1. ba na na  ba n d a na
  1. 持續合併,直到達到設定的詞表大小。

為什麼語音模型或 LLM 要用 BPE?

  • 兼顧詞與字元的好處:太細(如用字元)效率低,太粗(如直接用詞)容易遇到 OOV(未登錄詞)問題。BPE 能有效壓縮字表,又能處理新詞或罕見詞。
  • 模型可控:你可以設定 token 數量,平衡模型效率和 coverage。
  • 與語音/文字一樣適用:現代 TTS、ASR、LLM 都很愛用 BPE/Unigram/BERT WordPiece 這類方法。

相關延伸

  • BPE 是一種無監督的分詞方法。
  • BPE token 通常會看到一些像「##ing」這種 subword,或在英文裡斷詞很奇怪的符號。