02 Embedding:把 Token 放进向量空间
- 理解 token id 为什么要变成向量。
- 会计算余弦相似度。
- 知道 embedding 是训练出来的查表参数。
Token id 本身只是编号,137 不比 42 更“高级”。Embedding 把编号映射成一串浮点数,让模型能在向量空间里表达“相近”“相反”“相关”等关系。
Embedding 层可以理解为一个表:
token id -> embedding matrix 中的一行 -> 向量训练时,模型会不断调整这张表。最后,相似上下文中出现的 token 往往会得到相近的向量。
参考项目里的对应实现思路
Section titled “参考项目里的对应实现思路”minGPT 和 nanoGPT 中都有 token embedding 和 position embedding。前者告诉模型“是什么 token”,后者告诉模型“在第几个位置”。
最小代码实验
Section titled “最小代码实验”源码:labs/02-embedding/index.mjs
这个实验手写几个 token 的向量,并用余弦相似度观察“向量方向接近”的含义。
运行命令与预期输出
Section titled “运行命令与预期输出”运行:
npm run lab:02预期你会看到每个候选 token 与 attention 的相似度,以及最接近的 token。
- Embedding 不是人工写死的词典解释,而是训练出来的参数。
- 向量维度越大不一定越好,维度会影响容量、成本和训练难度。
- 余弦相似度只能说明方向接近,不等于“语义一定正确”。