# BPE

#### Byte Pair Encoding (BPE)

**论文**：[Neural Machine Translation of Rare Words with Subword Units](https://arxiv.org/pdf/1508.07909)

*   **核心思想**：**从一个基础小词表开始**，**通过不断合并最高频的连续 token 对来产生新的 token**。
    
*   **具体做法**：
    
    *   输入**训练语料**和**期望词表大小 V**。
        
    *   **准备基础词表**：比如英文中 26 个字母加上各种符号，并初始化 ID。
        
    *   基于基础词表将准备的语料拆分为最小单元。
        
    *   在语料上**统计单词内相邻单元对的频率**，选择**频率最高的单元对**进行合并。
        
    *   重复第 3 步直到达到预先设定的 subword 词表大小或下一个最高频率为 1。
        
*   **优点**：可以**有效地平衡词汇表大小和编码步数**（编码句子所需的 token 数量，与词表大小和粒度有关）。
    
*   **缺点**：
    
    *   基于贪婪和确定的符号替换，**不能提供带概率的多个分词结果**（相对于 ULM 而言的）；
        
    *   **解码的时候面临歧义问题**（如：对于同一个句子 `"Hello World"`，分词结果可能不同 `"Hell/o/world"` 或 `"He/llo/world"`）。
