跳到主要内容

1.4 词向量:让意思住进空间里

编号解决不了的问题​

上一节我们辛苦造好了词表,每块积木都有了编号:假设「猫」是 59 号,「狗」是 60 号,「显卡」是 61 号。

但编号只是身份证号。59 和 60 挨着,不代表「猫」和「狗」有半点关系——就像身份证号相邻的两个人未必是亲戚。可我们明明知道:猫和狗都会跑会叫、都怕鞭炮、都要吃饭。如果模型学到「猫会抓老鼠」,却完全无法把这条经验借给「狗」,那它每个词都得从零学起,再多数据也不够烧。

怎么让「意思相近」这件事变成模型能算的东西?

答案在 0.2 节埋好了:向量是空间中的一个点。那就——

一句话定义

词向量(Embedding)= 给每个 token 配一串数字(一个向量),让它成为空间中的一个点,并且让「意思相近的词,住得也近」。

这样一来,「相近」就从玄学变成了几何:量一下两点的距离就行。模型在「猫」身上学到的规律,会自动泛化到它的近邻「狗」身上——因为在模型眼里,它们的输入本来就长得像。

亲眼看看这个「词的居住地图」:

🎮 动手实验
词向量地图:意思相近的词,住得也近
每个词是空间中的一个点(这里是概念示意图:坐标为手工构造,真实词向量有几百上千维)。把鼠标放到任意词上看它的近邻;下拉框里还有更神奇的「词向量算术」。
🧮 词向量算术:
猫狗鸟鱼老虎苹果香蕉橘子葡萄西瓜高兴快乐悲伤愤怒害怕中国法国日本英国北京巴黎东京伦敦男人女人国王王后
动物水果情绪国家首都人物
💡 要点:模型并不「认识」汉字,它只看见向量。但只要「意思相近 → 向量相近」,模型对「猫」学到的规律就能自动迁移到「狗」上。更妙的是方向也有意义:国家→首都是同一个方向,所以「北京 − 中国 + 法国」会落在巴黎附近。这些向量不是人设计的,全是训练中自己「长」出来的。

推荐玩法:

  1. 把鼠标悬停在「猫」上——它的三个最近邻居是「狗」「鸟」「鱼」,动物们住成一个小区;水果、情绪也各有各的街区;
  2. 打开下拉框,选「国王 − 男人 + 女人 ≈ ?」,看两条箭头怎么把你带到「王后」家门口。

方向也有意义:词向量会做算术​

地图上还藏着更妙的结构。观察「国家」和「首都」两个街区:从「中国」走到「北京」的方向和距离,跟从「法国」走到「巴黎」的几乎一模一样——好像存在一支看不见的「首都箭头」。

于是可以做一道向量算术题:

北京⃗−中国⃗+法国⃗≈巴黎⃗\vec{\text{北京}} - \vec{\text{中国}} + \vec{\text{法国}} \approx \vec{\text{巴黎}}

翻译成人话:先提取「国家 → 首都」这支箭头(北京 − 中国),再把它安到「法国」头上,落点就在巴黎附近。实验里的另一个预设「国王 − 男人 + 女人 ≈ 王后」同理:提取的是「平民 → 王室」的箭头。距离编码了「像不像」,方向编码了「是什么关系」——意思真的被装进了几何里。

最不可思议的是最后这件事:这张地图没有人排版。没有工程师规定「猫住在(-6.5, 4.2)」;这些坐标本身就是模型的参数,训练开始时是纯随机数,全靠「预测下一个词」的训练一轮轮把它们推到了合理的位置——常一起出现、可以互相替换的词,被慢慢推到了一起。至于「推」具体怎么发生,正是第 2 章要讲的故事。

这张地图在哪里不准确?

① 图中坐标是手工构造的 2 维示意,为的是把「聚簇」和「平行箭头」两个现象画干净;真实词向量有几百上千维(2024-2026 年的主流大模型多在 1000~16000 维),人类画不出来,压到 2 维展示必然损失大量信息——真实空间里的近邻关系比图上复杂得多。② 图上一个词一个固定的点,这其实是 word2vec(2013)时代的设定;现代大模型里,词向量只是起点,进入模型后会随上下文不断调整——「苹果手机」和「吃苹果」里的「苹果」,在模型深处是两个不同的向量。这个「按上下文变形」的本事来自注意力机制,是第 3 章的主角。

小结​

本节要点
  • 编号是身份证号,不带意思;词向量把每个 token 变成空间中的点,「意思相近 → 住得近」,规律才能在相似词之间迁移。
  • 距离编码「像不像」,方向编码「是什么关系」——所以有「北京 − 中国 + 法国 ≈ 巴黎」这样的向量算术。
  • 词向量没人排版:训练开始是随机数,全靠训练一轮轮推到位。
  • 图示是 2 维示意;真实向量几百上千维,且在现代大模型里会随上下文动态变化。
📝 动手自测0/3
1. 为什么有了 token 编号,还需要词向量?
2. 「北京 − 中国 + 法国 ≈ 巴黎」这个现象说明词向量空间里?
3. 词向量的坐标是谁定的?

延伸阅读​