一、Tokenizer的核心算法与计算细节
Tokenizer的核心在于将文本转化为模型可处理的离散符号序列,其计算方式主要依赖于分词算法。以下是主流算法的技术细节:
1. Byte-Pair Encoding (BPE)
计算步骤:
初始化词表:从字符级开始(如英文的26个字母、标点符号)。
统计词频:对训练语料中的单词进行频率统计。
迭代合并:每次合并出现频率最高的相邻字符对,生成新子词并加入词表。
终止条件:达到预设词表大小(如50,000)或合并次数。
def train_bpe(corpus, num_merges):
vocab = set(char for word in corpus for char in word)
word_counts = Counter(corpus)
splits = {word: list(word) for word in word_counts}
for _ in range(num_merges):
pairs = Counter()
for word, freq in word_counts.items():
chars = splits[word]
for i in range(len(chars)-1):
pairs[(chars[i], chars[i+1])] += freq
best_pair = max(pairs, key=pairs.get)
new_token = ''.join(best_pair)
vocab.add(n