一、 词元 ID 是如何转为嵌入向量的?
比如"I love AI",在经过 BPE 等分词算法,先分词成 ["I", "love", "AI"],,再变成一串数字(Token IDs)变成了 [12, 532, 981]。这是一个查词汇表的过程,这张词汇表定义了如何将每个唯一的单词和特殊字符映射到一个唯一的整数。但这只是离散的数字,神经网络无法直接处理它们,也无法理解 12 和 532 之间的语义关系。
将它们转化为嵌入向量(Embedding Vectors),实际上是一个查字典(Lookup Table) 的过程:
- 词嵌入矩阵(Embedding Matrix) :
模型在内部维护着一个巨大的表格(矩阵)。这个表格的行数 等于词表的大小(Vocabulary Size,比如 10,000),列数等于嵌入向量的维度(Embedding Dimension,比如4维, 实际是 768 / 4096 等)。
假设词嵌入矩阵为:
token_id embedding vector
0 [0.2, 0.1, 0.9, 0.3]
1 [0.8, 0.5, 0.1, 0.4]
2 [0.3, 0.7, 0.6, 0.2]
...
12 [0.9, 0.1, 0.3, 0.8]
...
532 [0.4, 0.2, 0.7, 0.1]
...
981 [0.6, 0.3, 0.5, 0.9]
- 索引查找(Index Lookup) :
当模型接收到一个 Token ID(例如12)时,它会直接去这个矩阵中提取第 12 行 的那一整排数据。- 输入:
12(整数) - 输出:
[0.9, 0.1, 0.3, 0.8]
- 输入:
通过token iDs为 [12, 532, 981] 直接查表,得到下面嵌入向量:
[0.9, 0.1, 0.3, 0.8] ← I
[0.4, 0.2, 0.7, 0.1] ← love
[0.6, 0.3, 0.5, 0.9] ← AI
- 数学本质 :
在底层数学运算中,这等价于将一个 One-hot 向量(只有一个位置是 1,其余全为 0,长度为 10000 的向量)
这个过程的意义:
这些浮点数向量并不是随机的。在模型预训练的过程中,这个矩阵会被不断更新。最终,语义相近的词汇(如"猫"和"狗"),它们对应的向量在多维空间中的距离会非常接近。这样,离散的数字就变成了蕴含丰富语义的连续数学表达。
二、 位置嵌入(Positional Embedding)的作用是什么?
如果你了解过传统的循环神经网络(RNN/LSTM),它们是按照顺序一个词一个词读取的,所以天生就知道词的先后顺序。
但是,现代大模型基于 Transformer 架构 ,它的核心"自注意力机制(Self-Attention)"是并行处理所有词元的。也就是说,它是一次性把一句话里的所有词一起吞进去计算的。
这就带来了一个致命问题: 对于原始的 Transformer 来说,如果没有位置信息,"I love AI" 和 "AI love I" 对它来说是完全一模一样的输入!因为词元集合相同,它失去了对语序的感知能力。
位置嵌入(Positional Embedding)的作用就是为了解决这个问题:它告诉模型每个词在句子中的确切位置。
具体是如何运作的?
- 生成位置向量:模型会为句子中的每一个位置(第 1 个词、第 2 个词、第 3 个词......)生成一个特定规则的"位置向量"。这个向量的维度和之前的词嵌入向量维度一模一样(比如都是 4096 维)。
- 两者相加 :将前面查字典得到的词嵌入向量 与对应的位置嵌入向量 进行元素级别的相加(Add) 。
最终向量= 词义信息(Token Embedding) + 位置信息(Positional Embedding)
比如:
词嵌入向量:
I [0.9, 0.1, 0.3, 0.8]
love [0.4, 0.2, 0.7, 0.1]
AI [0.6, 0.3, 0.5, 0.9]
位置嵌入向量:
pos0 [0.1, 0.0, 0.2, 0.0]
pos1 [0.0, 0.3, 0.1, 0.2]
pos2 [0.2, 0.1, 0.0, 0.1]
两者相加:
I [1.0, 0.1, 0.5, 0.8]
love [0.4, 0.5, 0.8, 0.3]
AI [0.8, 0.4, 0.5, 1.0]
- 传递给模型:相加后的新向量不仅包含了"这个词是什么意思",还包含了"这个词在句子中的哪个位置",然后才送入后续的网络层进行处理。
常见的位置编码方式:
- 绝对位置编码(Absolute PE):早期 Transformer 使用正弦和余弦函数(Sinusoidal)的数学公式硬编码生成,或者像词嵌入一样让模型自己学习每个位置的向量(GPT-2/3 的做法)。
- 相对位置编码(Relative PE) :现在最流行的大模型(如 LLaMA、Qwen 等)更倾向于使用 RoPE(旋转位置编码,Rotary Position Embedding) 或 ALiBi。这类方法不关注词的"绝对位置是第几个",而是关注两个词之间的"相对距离有多远",这大大增强了模型处理长文本和泛化的能力。