什麼是 位元組對編碼(Byte Pair Encoding)?

位元組對編碼(BPE)是一種資料壓縮技術,也常用於自然語言處理中,作為一種詞彙標記化方法,將單詞分解成更小的子詞單元。

核心概念

位元組對編碼(Byte Pair Encoding, BPE)的核心概念是基於資料壓縮的原理,通過迭代地合併文本中最頻繁出現的字節對(或字符對)來構建一個詞彙表。這個過程從一個基本的字符集開始,然後逐步將這些字符組合成更大的單元,直到達到預定的詞彙表大小。

  • 字節對(Byte Pair): 指的是文本中連續出現的兩個字節或字符。例如,在字符串 "hello world" 中,"he"、"el"、"ll" 等都是字節對。
  • 合併(Merge): 指的是將文本中最頻繁出現的字節對替換為一個新的符號。例如,如果 "he" 在文本中出現的次數最多,那麼就可以將所有的 "he" 替換為一個新的符號,例如 "Z"。
  • 詞彙表(Vocabulary): 指的是 BPE 算法最終生成的符號集合,包括原始的字符集和所有合併過程中產生的新符號。這個詞彙表將用於將文本分解成更小的單元,以便於機器學習模型的處理。

運作原理

BPE 的運作原理可以概括為以下幾個步驟:

  1. 初始化詞彙表: 首先,將文本中所有出現的字符都加入到詞彙表中。例如,如果文本中只出現了 "hello world" 這幾個字符,那麼初始的詞彙表就是 { "h", "e", "l", "o", " ", "w", "r", "d" }。
  2. 計算字節對頻率: 統計文本中所有字節對的出現頻率。例如,在 "hello world" 中,"he" 出現 1 次,"el" 出現 1 次,"ll" 出現 1 次,以此類推。
  3. 合併最頻繁字節對: 找到出現頻率最高的字節對,將其合併為一個新的符號,並將這個新符號加入到詞彙表中。例如,如果 "ll" 出現的次數最多,那麼就將 "ll" 合併為一個新的符號,例如 "Z",並將 "Z" 加入到詞彙表中。此時,詞彙表變為 { "h", "e", "l", "o", " ", "w", "r", "d", "Z" }。
  4. 更新文本: 將文本中所有的 "ll" 替換為 "Z"。例如,"hello world" 就變成了 "heZo world"。
  5. 重複步驟 2-4: 重複步驟 2-4,直到詞彙表的大小達到預定的閾值,或者沒有可以合併的字節對為止。

範例:

假設我們有以下文本:

low low low lower newer newer newer wider wider

  1. 初始化詞彙表: { "l", "o", "w", "e", "r", "n", "i", "d" }
  2. 計算字節對頻率:
    • "lo": 3
    • "ow": 3
    • "we": 2
    • "er": 2
    • "ne": 3
    • "ew": 3
    • "wi": 2
    • "id": 2
  3. 合併最頻繁字節對: 假設 "lo" 是最頻繁的字節對,將其合併為 "X"。詞彙表變為 { "l", "o", "w", "e", "r", "n", "i", "d", "X" }。
  4. 更新文本:

Xw Xw Xw Xwer newer newer newer wider wider

  1. 重複步驟 2-4: 繼續迭代,直到達到預定的詞彙表大小。

實際應用

BPE 在自然語言處理領域有著廣泛的應用,主要包括以下幾個方面:

  • 詞彙標記化: BPE 可以將文本分解成更小的子詞單元,從而有效地處理未登錄詞(OOV)問題。這對於處理包含大量罕見詞彙的文本非常有用。
  • 機器翻譯: 在機器翻譯中,BPE 可以幫助模型更好地處理不同語言之間的詞彙差異。通過將單詞分解成更小的單元,模型可以更容易地學習到不同語言之間的對應關係。
  • 文本生成: 在文本生成中,BPE 可以生成更加多樣化的文本。通過使用子詞單元,模型可以生成一些在訓練數據中沒有出現過的單詞或短語。
  • 預訓練語言模型: 許多預訓練語言模型,例如 GPT 和 BERT,都使用了 BPE 作為詞彙標記化方法。BPE 可以幫助這些模型更好地處理各種不同的文本數據。

常見誤區

  • BPE 是一種詞幹提取算法: BPE 並不是一種詞幹提取算法。詞幹提取算法的目的是將單詞還原到其詞幹形式,而 BPE 的目的是將單詞分解成更小的子詞單元。雖然 BPE 有時可以產生類似於詞幹提取的效果,但其本質是不同的。
  • BPE 總是能產生最好的詞彙表: BPE 並不能保證總是能產生最好的詞彙表。BPE 的性能取決於訓練數據的質量和數量,以及預定的詞彙表大小。在某些情況下,其他的詞彙標記化方法可能比 BPE 更有效。
  • BPE 是一種無損壓縮算法: 雖然 BPE 最初是一種資料壓縮算法,但在自然語言處理中的應用通常是有損的。因為 BPE 會將一些單詞分解成更小的單元,從而丟失一些語義信息。

相關術語

常見問題

← 回到 位元組對編碼 快查頁

延伸學習

想看 位元組對編碼 的完整影片教學?前往 美第奇 AI 學院