“猫在卧室里走”和“狗在房间里跑”,你一读就知道这两句话说的差不多:一只动物在屋里走动。
假如有一个语言模型,训练用的文字里有“猫在卧室里走”,却从来没有“狗在房间里跑”。碰到后一句,它能接上吗?要接上,它得先知道“猫”和“狗”这两个词像。可它只读过文字,从没见过一只真的猫或狗。
词向量:用一串数表示一个词
汉堡是吃的,北京是城市,八竿子打不着。可我们用一个真实的 AI 模型给 137 个词各算了一串数,再一对一对地比,跟汉堡最像的词,偏偏是北京。那苹果呢,它更像香蕉,还是更像手机?AI 从没吃过汉堡,也没去过北京,它凭什么判断两个词像不像?
第 21 期 · 2026-11-07 · 2026-11-08 修订
“猫在卧室里走”和“狗在房间里跑”,你一读就知道这两句话说的差不多:一只动物在屋里走动。
假如有一个语言模型,训练用的文字里有“猫在卧室里走”,却从来没有“狗在房间里跑”。碰到后一句,它能接上吗?要接上,它得先知道“猫”和“狗”这两个词像。可它只读过文字,从没见过一只真的猫或狗。
这一篇接着前面几篇往下讲。前面讲过的知识,分成两组:
人工智能是怎么来的
语言模型怎样接话
前面几篇:《电脑赢了世界冠军,为什么还认不出一只猫?》《下棋能写成规则,说话也能吗?》《翻书接词的小游戏,离聊天 AI 有多远?》《聊天 AI 文字接龙的下一个字,靠抓阄吗?》。
统计语言模型的做法是数次数:把大量文字从头数到尾,记下每个词后面跟过什么,跟得多的,概率就大。
它有个老毛病:没见过的句子,最简单的数法会数出 0,接不下去。人们想过补救的办法,比如句子太长查不到,就退回去只看最后一两个词,可这样补得很粗。人每天说的话里,很多句子从来没有人原样写过,这个毛病躲不开。
2003 年,加拿大蒙特利尔大学的约书亚·本吉奥和几位研究者在论文里正面说出了这个难题:模型训练好以后,拿来测试它的新句子,多半和训练时见过的每一句都不一样。论文里用英文举了一个例子,意思正是开头那两句:见过“猫在卧室里走”,应该能帮模型把“狗在房间里跑”也算得差不多可能,因为“猫”和“狗”、“卧室”和“房间”、“走”和“跑”,用法都很像。
问题于是变成:只读文字,怎么知道两个词用法像?
1957 年,英国语言学家弗斯说过一句后来常被引用的话:要认识一个词,看它和谁做伴。两个词常和同样的词一起出现,用法就像。
我们自己编 10 句话,照这个办法数一数:
挑出“喂、睡觉、跑、叫、开、加油”6 个词,数“猫”“狗”“汽车”各和它们一起出现了几次,每个词就得到一行 6 个数:
“猫”和“狗”这两行几乎一样,只差一个“叫”;“汽车”只在“跑”这一格,和它们一起不是 0。照这个办法,光从句子里数,不用告诉电脑猫和狗都是动物,也能看出这两个词用法像。
用一串数表示一个词,这串数叫这个词的词向量。上面每一行数,就是一个最简单的词向量,它的每一格都对应一个看得懂的词。
两串数像不像,可以算出一个数,越接近 1 越像。数学上有个现成的算法,叫余弦相似度。按它算,猫和狗是 0.87,猫和汽车是 0.33。
它的算法要用到中学数学,结果却能看出个大概:两串数一起不是 0 的格子越多,各自单独有的格子越少,就越接近 1。猫和狗有 3 格一起是 1,狗多了一格“叫”,所以是 0.87,不是 1;猫和汽车只有 1 格一起是 1。
本吉奥的神经网络语言模型没有去数这样一张表。神经网络是一种计算方法,它里面有很多可以调的数,拿大量例子反复练习,每次练完都把这些数调一点,让下一次算得更准。
本吉奥给每个词一串数,论文里是 30、60 或 100 个,一开始是随便定的。模型拿一个词的这串数,去算后面接什么的概率。它拿大量句子练习猜下一个词,猜完对照原文,把相关的数调一点。
拿前面的 10 句话想一想:“猫”后面要接“在沙发上睡觉”,“狗”后面也要接。要让两边都猜对,“猫”和“狗”的两串数就得起差不多的作用,于是常被往同一个方向调。练得多了,和同样的词做伴的两个词,数多半会越来越像。
数像了,算出来的概率也就像。模型见过“猫在卧室里走”,碰到“狗在房间里跑”,每个词都有一个数很像的词在前面那句里,这句话就能算出不小的概率,不会只得到 0。
和手数的表不一样,这样调出来的每一个数,都不对应哪个看得懂的词。
今天有一类模型,叫文本向量模型,专门把文字变成一串数,常用在搜索里:把意思相近的文字找出来。它算数的办法和本吉奥的模型不一样,我们只用它看看真实的词向量长什么样,用法像的词是不是真的数也像。
我们用的是阿里云的文本向量模型 text-embedding-v4,它给每个词算 1024 个数。这是“猫”的词向量:
前面带“-”的数比 0 还小,叫负数。和本吉奥的模型一样,这些数单看看不出意思,要拿去比。把论文例子里的三对词都算一遍余弦相似度,每对旁边再放一对不像的做对照:
| 论文里的一对 | 相似度 | 对照 | 相似度 |
|---|---|---|---|
| 猫和狗 | 0.69 | 猫和汽车 | 0.46 |
| 卧室和房间 | 0.78 | 卧室和老虎 | 0.28 |
| 走和跑 | 0.62 | 走和苹果 | 0.40 |
每一组里,论文说用法像的那一对,都更接近 1。在这个模型里,不怎么相干的两个词也常有 0.4 左右,所以要和对照比,不看单个数。
和一个词最像的几个词,叫它的近邻。在我们算过的 137 个词里,“苹果”的近邻是这样的:
离“苹果”最近的是手机(0.67)、电脑(0.65)、平板(0.58);香蕉只有 0.43,西瓜 0.46。
用“看它和谁做伴”来想:“新买的____屏幕很亮”“____发布会”,空里填“苹果”通,填“手机”“电脑”也通。说苹果的很多句子,和说手机、电脑的句子长得像,它们就和同样的词做伴。这多半就是苹果挨着手机的原因。所以近邻是用法像的词,不一定长得像,也不一定是同一类东西。
“汉堡”也一样:它最像的词是北京(0.70),比面包(0.49)还像。德国有座城市叫汉堡,“去____旅游”“____是一座大城市”,空里填汉堡、填北京都通。
也有说不清的:“苹果”的第 4 个近邻是“马”(0.55)。为什么这样,我们也不知道。
每个词 1024 个数,没法直接画出来。有一种办法能把每个词压成平面上的一个点,让原来像的词尽量挨在一起。压的时候难免走样,平面上挨着,不一定真的最像。我们拿 33 个词试了一下:
动物大致一团,交通工具一团,卧室、厨房、房间一团,电脑和手机一团。“苹果”在电脑和手机旁边。也有走样的地方:“米饭”跑到了“跳”“跑”这些动作词旁边。
再拿一句可能没见过的话试试:“袋鼠吃草”。如果训练的文字里从来没有这一句,最简单的数法又会数出 0。看看“袋鼠”的近邻:
考拉吃桉树叶,斑马和河马吃草,大象吃草和树叶,只有企鹅吃鱼和磷虾。只要训练的文字里有“斑马吃草”“河马吃草”这样的句子,神经网络语言模型就算没见过“袋鼠吃草”,也能算出不小的概率。
借来的不一定对。企鹅也在近邻里,如果只借企鹅的,就会接出“袋鼠吃鱼”。近邻和句子越多,借来的越靠得住。
今天的聊天 AI 背后是大语言模型,它是规模很大的神经网络语言模型。它接话的第一步,也是把每个字或词变成一串数,再带着前面一整段话,算下一个字的概率。它用的数有几千个,大的上万个,也是训练时一点点调出来的。
它里面的那一串数,和我们用的 text-embedding-v4 不是同一套,两者不能互相代替。用法像的词数也像,这一点通常都成立。
汉堡和北京,AI 为什么觉得它们最像?**因为这两个词的用法像。**汉堡也是德国一座城市的名字,常和北京这样的城市名出现在差不多的句子里。AI 给每个词算一串数,叫词向量,看的就是这个词平时和谁做伴;用法像,两串数就像。苹果也一样:说苹果的很多句子和说手机的句子长得像,所以它更像手机。同样的办法,让 AI 知道“狗”和“猫”、“房间”和“卧室”、“跑”和“走”用法像,没见过“狗在房间里跑”也能接上。
| 统计语言模型 | 神经网络语言模型 | |
|---|---|---|
| 一个词在模型里是什么 | 一个名字,只能数它出现几次 | 一串训练时调出来的数,叫词向量 |
| 怎么知道两个词像 | 不知道 | 比两串数 |
| 碰到没见过的句子 | 最简单的数法得 0,补救也很粗 | 向用法像的词借,算出概率 |
词向量里的“像”,是用法像:“苹果”挨着手机,“汉堡”挨着北京。借来的经验也可能借错,袋鼠的近邻里就有吃鱼的企鹅。
我们算过的 137 个词,放在官网的《词的近邻》这一页里,你可以自己查。
如果你打的词没算过,页面会说“这个词还没算过”,下面列着能点的词,点一个就行。猜错的时候,想一想:说这个词的句子,换成哪个词也说得通?
| 时间 | 2026 年 11 月 7 日,星期六,晚上 8 点,线上;录像约 34 分钟,开场和科技新闻没录上 |
| 参加 | 王叔叔,王笑鱼、禾蛱、孔蓝蜥、王笑蚺、杰米、毕糯蚺、王笑啄、谢啄麟、王笑猿、陈咿蚺(10 人) |
| 主题 | 汉堡和北京,AI 为什么觉得它们最像? |
大致过程
课上的好问题
这节课的数
| 本节(第 21 期) | 上节(第 20 期) | |
|---|---|---|
| 到课 | 10 人 | 10 人 |
| 开过口 | 9 人 | 9 人 |
| 提问后 5 秒内有人接话 | 约九成 | 约八成 |
| 孩子说话占录像时间 | 约一成半 | 不到一成 |
数字是用录音自动估算的,这节课的录像不全,只看大概。
下次要改:今天讲得太理论了,“数怎么调像”那段我自己都快讲糊涂了,下周再讲一遍。收尾不问“讲了什么”,换成大家都能接的小题目。