1.4 词向量:让意思住进空间里
编号解决不了的问题
上一节我们辛苦造好了词表,每块积木都有了编号:假设「猫」是 59 号,「狗」是 60 号,「显卡」是 61 号。
但编号只是身份证号。59 和 60 挨着,不代表「猫」和「狗」有半点关系——就像身份证号相邻的两个人未必是亲戚。可我们明明知道:猫和狗都会跑会叫、都怕鞭炮、都要吃饭。如果模型学到「猫会抓老鼠」,却完全无法把这条经验借给「狗」 ,那它每个词都得从零学起,再多数据也不够烧。
怎么让「意思相近」这件事变成模型能算的东西?
答案在 0.2 节埋好了:向量是空间中的一个点。那就——
词向量(Embedding)= 给每个 token 配一串数字(一个向量),让它成为空间中的一个点,并且让「意思相近的词,住得也近」。
这样一来,「相近」就从玄学变成了几何:量一下两点的距离就行。模型在「猫」身上学到的规律,会自动泛化到它的近邻「狗」身上——因为在模型眼里,它们的输入本来就长得像。
亲眼看看这个「词的居住地图」:
推荐玩法:
- 把鼠标悬停在「猫」上——它的三个最近邻居是「狗」「鸟」「鱼」,动物们住成一个小区;水果、情绪也各有各的街区;
- 打开下拉框,选「国王 − 男人 + 女人 ≈ ?」,看两条箭头怎么把你带到「王后」家门口。
方向也有意义:词向量会做算术
地图上还藏着更妙的结构。观察「国家」和「首都」两个街区:从「中国」走到「北京」的方向和距离,跟从「法国」走到「巴黎」的几乎一模一 样——好像存在一支看不见的「首都箭头」。
于是可以做一道向量算术题:
翻译成人话:先提取「国家 → 首都」这支箭头(北京 − 中国),再把它安到「法国」头上,落点就在巴黎附近。实验里的另一个预设「国王 − 男人 + 女人 ≈ 王后」同理:提取的是「平民 → 王室」的箭头。距离编码了「像不像」,方向编码了「是什么关系」——意思真的被装进了几何里。
最不可思议的是最后这件事:这张地图没有人排版。没有工程师规定「猫住在(-6.5, 4.2)」;这些坐标本身就是模型的参数,训练开始时是纯随机数,全靠「预测下一个词」的训练一轮轮把它们推到了合理的位置——常一起出现、可以互相替换的词,被慢慢推到了一起。至于「推」具体怎么发生,正是第 2 章要讲的故事。
① 图中坐标是手工构造的 2 维示意,为的是把「聚簇」和「平行箭头」两个现象画干净;真实词向量有几百上千维(2024-2026 年的主流大模型多在 1000~16000 维),人类画不出来,压到 2 维展示必然损失大量信息——真实空间里的近邻关系比图上复杂得多。② 图上一个词一个固定的点,这其实是 word2vec(2013)时代的设定;现代大模型里,词向量只是起点,进 入模型后会随上下文不断调整——「苹果手机」和「吃苹果」里的「苹果」,在模型深处是两个不同的向量。这个「按上下文变形」的本事来自注意力机制,是第 3 章的主角。
小结
- 编号是身份证号,不带意思;词向量把每个 token 变成空间中的点,「意思相近 → 住得近」,规律才能在相似词之间迁移。
- 距离编码「像不像」,方向编码「是什么关系」——所以有「北京 − 中国 + 法国 ≈ 巴黎」这样的向量算术。
- 词向量没人排版:训练开始是随机数,全靠训练一轮轮推到位。
- 图示是 2 维示意;真实向量几百上千维,且在现代大模型里会随上下文动态变化。
延伸阅读
- TensorFlow Embedding Projector——加载真实的 word2vec 词向量,亲手旋转、搜索近邻,看看真实版「词的居住地图」。
- Jay Alammar: The Illustrated Word2vec——图解词向量的经典入门文。
- 下一站 第 1 章 · 小结与自测:把分词、词向量、下一词预测串成一条完整流水线。