bpe分詞算法的原理

概述:

bpe(byte pair encoding),是一種根據字節對進行編碼的算法。主要目的是爲了數據壓縮,算法描述爲字符串裏頻率最常見的一對字符被一個沒有在這個字符中出現的字符代替的層層迭代過程。該算法在論文:https://arxiv.org/abs/1508.07909 Neural Machine Translation of Rare Words with Subword Units詳細介紹

訓練過程:

對於使用子詞作爲基本單位進行訓練的神經機器翻譯模型,訓練的第一步就是根據語料生成bpe的code資源,以英文爲例,該資源會將訓練語料以字符爲單位進行拆分,按照字符對進行組合,並對所有組合的結果根據出現的頻率進行排序,出現頻次越高的排名越靠前,排在第一位的是出現頻率最高的子詞。如圖所示:e </w>爲出現頻率最高的子詞,其中</w>表示這個e是作爲單詞結尾的字符。訓練過程結束,會生成codec文件。如下圖所示: 

                                                           

解碼過程:

以單詞「where」爲例,首先按照字符拆分開,然後查找codec文件,逐對合並,優先合併頻率靠前的字符對。85 319 9 15 表示在該字符對在codec文件中的評率排名。

最終where</w>可以在codec文件中被找到,因此where的bpe分詞結果爲where</w>,對於其他並不能像where一樣能在codec文件中找到整個詞的詞來說,bpe分詞結果以最終查詢結束時的分詞結果爲準。