BPE 是一种子词级别分词算法,常用于自然语言处理中(如机器翻译和语言模型)。它通过逐步合并高频符号对来构造子词词汇表,解决了传统分词方法面临的词汇稀疏性问题,同时提升了模型的泛化能力。
BPE 的核心思想
BPE 的目标是将词汇拆分为频率较高的子词单元,以减少词汇表大小,同时保留语义信息。它的基本过程如下:
1. 初始化:将单词拆分为最小的符号单元(通常是字符)。
2. 统计符号对频率:遍历词汇中的所有符号对,统计其出现频率。
3. 合并高频符号对:将频率最高的符号对合并为一个新符号。
4. 更新词汇:替换词汇中出现的高频符号对。
5. 重复迭代:直到达到预定的词汇表大小。
BPE 算法的详细步骤
假设有以下初始词汇:
wordlist = ["low", "lower", "newest", "widest"]
1. 初始化
将每个单词拆分为单个字符,并在末尾添加特殊符号(如 ␣,表示单词结束):
low -> l o w ␣
lower -> l o w e r ␣
newest -> n e w e s t ␣
widest -> w i d e s t ␣
2. 统计符号对频率
("l", "o") -> 2次
("o", "w") -> 2次
("w", "e") -> 2次
...
3. 合并高频符号对
找到频率最高的符号对(如 (“l”, “o”)),将其合并为新符号:
low -> lo w ␣
lower -> lo w e r ␣
4. 更新词汇
替换所有出现的 (“l”,