2026-3-8 BPE训练和编码
1 BPE Tokenizer的训练
整个流程是这样的,以TinyStories数据集为例,这个数据集里面有一个特殊字符<|endoftext|>,用来表示一个文档的结束。首先读取这个数据集,按照<|endoftext|>把原始的数据集拆成多个文档,这样的目的是可以采用多核的并行处理。随后将每个文档送入并行处理的程序,对每个文档,按照GPT-2的预分词Pre-Tokenize方法,先将文本拆分成粗粒度的token。随后在全部语料上执行BPE算法,由于前面进行了预分词,所以对于相同的粗粒度token,统计了一次就可以知道当前pair一共出现了多少次,然后得到出现次数最多的pair,将他们合并Merge,进入下一轮,直到词汇表满足预定的大小,或者达到Merge次数。最后在训练过程返回的就是一个词汇表TOkenizer Vocabulary和一个Merge序列。
2 BPE Tokenizer的编码和解码
编码Encode和解码Decode的过程其实和训练过程类似。
- 编码Encode
首先,需要把输入的语料进行预分词,得到粗粒度的token,在每个分词出的token上面执行BPE分词,也就是把每个字符变成字节,然后按照训练过程得到的Merge表,按顺序看看这个token也没有可以合并的,将其合并,对于一个token,逐轮合并直到没有字符可以Merge为止,之后按照训练过程得到的词汇表,给字符附上相应的Token ID,这就是以后会输入给大模型训练的Token ID了。当然了,也要注意输入的特殊字符,一般特殊字符在训练Tokenizer的时候就会给出了。
- 解码Decode
解码就非常简单了,目的是把输入的Token ID变成原始的字符串,实际上只需要根据ID去词汇表里面找对应的字符,然后拼接解码成原始字符串即可。需要注意的是用户输入的字符串可能是非法的Token ID,因此对于Decode要求有容错机制,就是对于非法的字符统一输出一个字符表示。
浙公网安备 33010602011771号