跳转到内容

02 Embedding:把 Token 放进向量空间

  • 理解 token id 为什么要变成向量。
  • 会计算余弦相似度。
  • 知道 embedding 是训练出来的查表参数。

Token id 本身只是编号,137 不比 42 更“高级”。Embedding 把编号映射成一串浮点数,让模型能在向量空间里表达“相近”“相反”“相关”等关系。

Embedding 层可以理解为一个表:

token id -> embedding matrix 中的一行 -> 向量

训练时,模型会不断调整这张表。最后,相似上下文中出现的 token 往往会得到相近的向量。

minGPTnanoGPT 中都有 token embedding 和 position embedding。前者告诉模型“是什么 token”,后者告诉模型“在第几个位置”。

源码:labs/02-embedding/index.mjs

这个实验手写几个 token 的向量,并用余弦相似度观察“向量方向接近”的含义。

运行:

Terminal window
npm run lab:02

预期你会看到每个候选 token 与 attention 的相似度,以及最接近的 token。

  • Embedding 不是人工写死的词典解释,而是训练出来的参数。
  • 向量维度越大不一定越好,维度会影响容量、成本和训练难度。
  • 余弦相似度只能说明方向接近,不等于“语义一定正确”。