---
# System prepended metadata

title: Byte Pair Encoding（BPE）
tags: [NLP]

---

## 介紹 Byte Pair Encoding (BPE)
在自然語言處理（Natural Language Processing, NLP）中，詞彙分割（tokenization）是將文本轉換為模型能理解的基本步驟，傳統上，許多系統將單詞當作最小單位，但這會導致詞彙表過大，並對未見詞（Out-of-Vocabulary, OOV）無法處理，為了解決這些問題，Byte Pair Encoding（BPE） 被引入成為一種高效的子詞分詞方法。

Byte Pair Encoding（BPE）是一種常見且高效的子詞單位分詞方法，它兼顧了詞彙表的大小控制與未知詞處理的彈性，在多數現代大型語言模型（如GPT、BERT、RoBERTa）中皆被廣泛採用。

## BPE 算法流程
BPE的核心思想是透過迭代地合併文本中最常見的相鄰字元或子詞對，逐步形成新的子詞單位，最終建立一個包含這些子詞的詞彙表，這種方法能夠有效地處理複合詞和未知詞，並在一定程度上減少詞彙表的大小。

Step1. 初始化語料庫：將所有單字拆分成最基本的單位。
Step2. 計算頻率：統計所有字元對（bigram）的出現頻率。
Step3. 合併最頻繁的字元對：找出頻率最高的字元對，並將該對合併為新符號。
Step4. 更新語料與詞彙表：用合併後的單位更新語料，並將新單位加入詞彙表。
Step5. 重複步驟 2~4，直到達到指定合併次數或詞彙表大小。

![image](https://hackmd.io/_uploads/BybfGQ0aJx.png)

## BPE 的優缺點
優點
1. 解決 OOV 問題：即使新單詞沒看過，也能拆分成已知子詞（subwords）處理。
2. 可壓縮詞彙表大小：例如 GPT-2 的詞彙表約 50,257 個 token，BPE 能控制在合理範圍。
3. 語言無關性強：BPE 可以處理多語種語料，只要有足夠的統計資料即可。

缺點
1. 忽略語義結構：合併規則只基於字元頻率，未考慮上下文或語義。
2. 初始設定需調整：詞彙表大小和合併次數的設定會影響分詞品質。
3. 拆分不直觀：有時子詞單位可能與語法無關，影響可讀性。