1. 从字符到向量:大模型如何"理解"一个词
当你向ChatGPT输入"深度学习很有趣"时,模型看到的并不是汉字或英文单词,而是一连串经过复杂变换的数字。这个转化过程就像把人类语言翻译成机器能理解的数学语言,需要经历三个关键步骤:分词(Tokenization)、词嵌入(Embedding)和位置编码(Positional Encoding)。每个步骤都解决了语言处理中的特定难题。
我曾在一个NLP项目中亲自实现过这个流程,最深的体会是:这些看似简单的数学操作背后,都是前人为了解决特定问题而精心设计的方案。比如BPE算法解决了罕见词处理问题,RoPE编码则完美适配了注意力机制的需求。
1.1 为什么需要这三步转换?
原始文本对神经网络来说就像天书——字符本身没有数学含义,词序关系无法直接表达。通过这三步转换,我们实现了:
- 词汇标准化:将任意语言(中/英/代码等)统一映射到有限词表
- 语义向量化:把离散的符号转化为连续的向量空间
- 位置感知:在无序的注意力机制中注入顺序信息
现代大模型如GPT-4的词向量维度高达12288,这意味着每个词都被映射到一个万维空间中的点,其坐标蕴含了丰富的语义和语法信息。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 第一步:分词(Tokenization)
2.1 字符级分词的缺陷
最朴素的想法是按字符处理:
python复制"猫" → ['猫']
"cat" → ['c', 'a', 't']
但这种方法会导致:
- 英文单词被拆解失去语义('unhappy'被拆为'un'+'happy')
- 中文虽然单字成词,但无法处理新词("大语言模型"应整体识别)
2.2 BPE算法:平衡词表大小与语义保留
Byte Pair Encoding (BPE) 通过统计学习找到最佳分词方案。其核心是:
- 初始将每个字符视为token
- 统计相邻token共现频率
- 合并最高频的token对
- 重复直到达到目标词表大小
python复制# 训练过程示例
原始词频: {'l o w':5, 'l o w e r':2, 'n e w e s t':6}
第一轮合并'e'+'s'→'es'(共现6次)
第二轮合并'es'+'t'→'est'(共现6次)
最终词表包含'est'这个子词
实际应用时:
python复制"unbelievable" → ["un", "believ", "able"] # 共享'un'前缀的语义
"深度学习" → ["深", "度", "学习"] # 中文常用拆分方式
我在处理专业文献时发现,BPE对科技术语的分词效果直接影响模型表现。例如"transformer"可能被拆为["trans", "form", "er"],这就要求模型后续能重组这些部件的语义。
2.3 主流模型的词表差异
| 模型
