WhiteDLG's Blog

Embedding

2026-02-02 NLP / LLM

为了直观地理解,以一个简化的大模型为例,追踪输入句子 "AI write code" 的 Embedding 过程。

假设设定:
  • 词表大小 ($|V|$):10,000
  • 向量维度 ($d$):4 (为了方便展示,实际中通常是 4096+)
  • 位置编码:简单的加法绝对位置编码

步骤 1:Tokenization (数字化)

原始输入:"AI write code"

分词器将其切分为 Token,并查找对应的 ID(假设):

  • "AI" $\rightarrow$ ID: 256
  • "write" $\rightarrow$ ID: 4092
  • "code" $\rightarrow$ ID: 1055

输出序列[256, 4092, 1055]

步骤 2:Embedding Lookup (查表)

模型有一个巨大的 "账本"(Embedding Matrix),有 10,000 行,每行存着 4 个数字。我们根据 ID 取出对应的行:

  • ID 256 ("AI") 对应向量 $\mathbf{v}_1$: [0.1, 0.8, -0.2, 0.5] (假设值,代表AI的概念)
  • ID 4092 ("write") 对应向量 $\mathbf{v}_2$: [-0.5, 0.1, 0.9, 0.1] (假设值,代表动作)
  • ID 1055 ("code") 对应向量 $\mathbf{v}_3$: [0.2, 0.7, -0.1, 0.9] (假设值,代表编程)

此时,计算机理解了这三个词分别是什么,但还不知道谁先谁后。

步骤 3:注入位置信息 (Positional Encoding)

为了告诉模型 "AI" 是第一个词,"code" 是第三个词,我们需要加上位置向量 $\mathbf{P}$:

  • 位置 0 (对应 "AI") 的向量 $\mathbf{p}_0$: [0.0, 0.1, 0.0, 0.1]
  • 位置 1 (对应 "write") 的向量 $\mathbf{p}_1$: [0.0, 0.2, 0.0, 0.2]
  • 位置 2 (对应 "code") 的向量 $\mathbf{p}_2$: [0.0, 0.3, 0.0, 0.3]

最终计算(向量相加):

  1. "AI" (Token + Pos):
    [0.1, 0.8, -0.2, 0.5] + [0.0, 0.1, 0.0, 0.1] = [0.1, 0.9, -0.2, 0.6]
  2. "write" (Token + Pos):
    [-0.5, 0.1, 0.9, 0.1] + [0.0, 0.2, 0.0, 0.2] = [-0.5, 0.3, 0.9, 0.3]
  3. "code" (Token + Pos):
    [0.2, 0.7, -0.1, 0.9] + [0.0, 0.3, 0.0, 0.3] = [0.2, 1.0, -0.1, 1.2]

结论

最终送入大模型第一层神经网络的,就是这三个融合了语义(是什么词)和**语序**(在什么位置)的 4 维向量。