根据前面的n-gram的介绍,大家都发现光靠统计次数是走不通的,我们需要一个能够脑补,举一反三的方法,而不是死板的查表机器。
神经网络是--“懂得举一反三的聪明人"
神经网络引入了一个划时代的的概念:词向量,它把每一个词变成了一组数字(一个高维空间的坐标)。
神经网络是从统计到语义的理解的飞跃。
比如下面这个例子
N-gram 眼里: “国王”和“女王”是两个完全不同的词,就像“国王”和“桌子”一样,毫无关系。因为字不一样。
神经网络 眼里: 它把每个词变成了一组数字(一个在高维空间里的坐标)。
它发现“国王”的坐标和“女王”的坐标靠得很近(都是统治者、人物、有头衔)。
而“国王”和“桌子”的坐标离得很远。
更神奇的是,它还能学到关系:从“国王”到“男人”的向量,几乎等于从“女王”到“女人”的向量。这就是语义关系的数学表达。
它是如何“举一反三”的?(一个更恰当的例子)
让我们来看一个关于“交通与旅行”的场景:
训练数据里有:
-
-
- “我坐 飞机去北京出差。”
- “他坐 高铁去上海旅游。”
-
考题是:
“一位商人搭乘 轮船前往____。”
N-gram 的反应:
“完蛋,我见过‘坐飞机’、‘坐高铁’,但没见过‘搭乘轮船’这个组合。我更没学过‘前往’后面应该跟哪个城市。这道题我不会,概率为0。”
(它被全新的词语组合卡住了,暴露了数据稀疏和短视的致命伤。)
神经网络的思考过程:
- 理解动词: 它发现“坐”和“搭乘”意思非常接近(都是乘坐交通工具),它们的向量距离很近。
- 理解工具: 它发现“飞机”、“高铁”和“轮船”都属于“长途交通工具”这个类别,它们的向量也聚在一起。
- 理解目的地: 它知道“北京”和“上海”都是中国的特大城市,是常见的商业或旅游目的地。
举一反三: 它推理出:“既然‘坐飞机’可以去‘北京’,那么结构相似、意思相近的‘搭乘轮船’,自然也可以去一个和‘上海’类似的大城市。所以空格里填一个地名,比如‘广州’、‘天津’或‘青岛’,都是非常合理。
总结
- N-gram 时代: 计算机像个只会查表的图书管理员。如果表格里没有这一行,它就回答不了。它的知识是“死”的。
- 神经网络时代: 计算机开始像个有逻辑的学生。即使这道题没做过,它能根据以前学过的知识(词义的相似性和关系),推导出答案。它的知识是“活”的。
这就是从“统计”到“语义理解”的伟大飞跃。神经网络不再仅仅记住“什么词和什么词经常一起出现”,而是真正理解了“这个词是什么意思,它和那个词有什么关系”。