BPE(Byte Pair Encoding)示例
假设我们有一个简单的文本语料库:
low
lower
newest
widest
BPE处理步骤:
初始化:
- 将每个单词分解为字符序列:l o w, l o w e r, n e w e s t, w i d e s t
统计频率:
- 计算所有相邻字符对的频率:
- l o: 2
- o w: 2
- w e: 2
- e s: 2
- s t: 2
- 其他字符对频率为1
合并频率最高的字节对:
- 合并l o为lo,更新序列:
lo w, lo w e r, n e w e s t, w i d e s t
重复合并:
- 继续合并频率最高的字节对,直到达到预定的词汇表大小。例如,下一步可能合并w e为we,结果为:
- lo w, lo we r, n e we s t, w i d e s t
生成词汇表:
- 词汇表可能包括:l, o, w, e, r, n, s, t, lo, we
BBPE(Byte-Level Byte Pair Encoding)示例
假设我们有一个包含特殊字符的文本:
café
naïve
BBPE处理步骤:
字节级处理:
- 将每个单词转换为字节序列(假设使用UTF-8编码):
- café -> [99, 97, 102, 195, 169]
- naïve -> [110, 97, 195, 175, 118, 101]
统计频率:
- 计算所有相邻字节对的频率:
[99, 97]: 1
[97, 102]: 1
[102, 195]: 1
[195, 169]: 1
[110, 97]: 1
[97, 195]: 1
[195, 175]: 1
[175, 118]: 1
[118, 101]: 1
合并频率最高的字节对:
- 由于所有字节对频率相同,可以选择任意一个进行合并。例如,合并[97, 102]为[97, 102](af),更新序列:
- c af é, na ï ve
重复合并:
- 继续合并其他频率最高的字节对,直到达到预定的词汇表大小。
生成词汇表:
- 词汇表可能包括:c, af, é, na, ï, ve
区别总结
BPE:在字符级别操作,适合处理标准字符集的文本。
BBPE:在字节级别操作,能够处理多语言文本和特殊字符,适合需要处理多种编码的场景。
通过这些例子,可以看到BPE和BBPE在处理文本时的不同之处,以及它们各自的适用场景。