1. 从离散符号到连续空间:词元ID的向量化之旅
当我们在自然语言处理领域工作时,最基础也最关键的挑战之一就是如何让计算机理解人类语言。与人类不同,计算机只能处理数字,因此我们需要一种方法将文字转换为数值表示。这个过程的第一步就是将原始文本转换为词元ID。
1.1 文本到词元ID的转换过程
以句子"I love AI"为例,这个转换过程实际上经历了几个关键步骤:
-
分词处理:现代大模型通常使用BPE(Byte Pair Encoding)等子词分词算法,将句子分解为有意义的词元(token)。在我们的例子中,这个相对简单的英语句子被分解为三个词元:["I", "love", "AI"]。
-
词汇表映射:每个词元会被映射到一个唯一的整数ID。假设我们的词汇表是这样的:
- "I" → 12
- "love" → 532
- "AI" → 981
那么原始句子就转换为了数字序列[12, 532, 981]。
注意:词汇表的大小(vocabulary size)是一个关键超参数。太小的词汇表会导致很多词被归为未知词(UNK),而太大的词汇表会增加模型的计算负担。常见的大模型词汇表通常在3万到10万之间。
1.2 词嵌入矩阵:从离散到连续的桥梁
单纯的整数ID对神经网络来说几乎没有意义,因为:
- 数字本身不包含语义信息
- 数字之间的数学关系(如12和532的差值)与词语之间的语义关系无关
为了解决这个问题,我们引入了词嵌入矩阵。这是一个可学习的参数矩阵,其维度为[词汇表大小, 嵌入维度]。例如,对于一个词汇表大小为10,000,嵌入维度为768的模型,这个矩阵的形状就是[10000, 768]。
这个矩阵的每一行对应一个词元ID的向量表示。在模型训练过程中,这个矩阵会不断更新,使得语义相似的词在向量空间中距离更近。
1.3 查表操作的实际实现
在实际的深度学习框架中,这个查表操作通常通过一个专门的嵌入层(Embedding Layer)实现。在PyTorch中,这可以简单地表示为:
python复制import torch
import torch.nn as nn
# 假设词汇表大小为10000,嵌入维度为768
embedding_la
