1. 大语言模型分词器核心原理剖析
大语言模型(LLM)的分词器(Tokenizer)是连接自然语言与机器理解的桥梁。不同于传统NLP的分词方式,现代LLM分词器采用子词(Subword)切分策略,核心目标是将任意文本转化为模型可处理的数字序列。以"unhappiness"为例,理想分词结果可能是["un", "happiness"]或["un", "happy", "ness"],这种处理方式能有效平衡词汇表大小与OOV(未登录词)问题。
1.1 字节对编码(BPE)算法精要
BPE算法通过迭代合并高频字节对构建词汇表,其数学本质是寻找最优化分词方案。具体流程如下:
- 初始化词汇表为所有基础字符
- 统计所有相邻符号对的共现频率
- 合并频率最高的符号对作为新词条
- 重复步骤2-3直到达到预设词汇表大小
Python实现的关键数据结构:
python复制from collections import defaultdict
def get_stats(vocab):
pairs = defaultdict(int)
for word, freq in vocab.items():
symbols = word.split()
for i in range(len(symbols)-1):
pairs[symbols[i], symbols[i+1]] += freq
return pairs
1.2 正则表达式的预处理魔法
在BPE处理前,需要用正则表达式对原始文本进行标准化处理。典型预处理模式包括:
python复制import re
PATTERN = r"""'(?i:[sdmt]|ll|ve|re)|[^\r\n\p{L}\p{N}]?+\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]++[\r\n]*|\s*[\r\n]|\s+(?!\S)|\s+"""
regex = re.compile(PATTERN)
这个复杂正则表达式实现了:
- 英文缩写的保留(如I'll → I 'll)
- 数字的单独切分
- 标点符号的隔离处理
- 空白字符的规范化
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
