前言
cs224n 第十四讲,这篇博客记录了这节课最重要的一部分内容,也就是结合句法树和词向量生成句子表示的方法。
语言模型光谱
我们常用的语言模型是词袋模型,这种模型有其一定的缺陷。如图所示,词袋模型不能包含所有的单词,总会有一些词在词袋之外。另外,也尝试使用更复杂的结构,比如短语结构树,这种结构能够提取大量的细节信息。
语言的语义解释–并不只是词向量
这里讲的就是人类对语言的理解,或者说对语言的语义解释不是词向量能够完全表达出来的。比如下面两个句子中加粗的部分,人类在读句子过程中对“snowboarder”和“person on a snowboard”理解是一致的。这是因为人类及时从没见过“snowboarder”这个词,也会明白该单词代表的含义。所以,这种能力词向量无法表达出来,那么该怎么去“获取”这种能力呢?相信了解nlp领域知识的也能够想到,这里所说的这种能力也就是如何生成能够表达句子含义的句向量,并不只是词向量。
递归思想
在介绍句向量之前,先说一下递归思想。其实就是将“小部件”合成“大部件”,并且“大部件”会有其意义的能力。比如在图像中就可以用下图形象表示。
这种思想也就是递归的思想,那么语言的递归性是什么样的呢?
语言的递归性
[The man from [the company that you spoke with about [the project] yesterday]]
比如上面这个句子,可以看出来这里面一个名词短语套着一个名词短语,所以语言也是有其递归性的,利用句法树可以表示这种句子。
递归的优点
1.消除歧义,这个在以前的课上也讲过。
2.便于指代相消等任务
3.便于利用语法树结构(基于短语的机器翻译)
句子向量表示
为什么需要句子向量呢?前面说过,就是词向量无法完全满足我们的需要了,比如说前面提到的snowboarder的例子。那么如何将短语或者句子映射到向量空间呢?这里就会用到词向量和刚才谈到的句法树。如下图所示,我们的目的就是结合词向量和句法树来生成句子向量。这也是这节课最重要的一个内容,下面用一个例子讲解。
实例介绍
我们的目标是得到类似于下图所示的词向量和句法树综合利用的句子向量表示,那么最终得到的句子向量[5,4]是如何计算得到的呢?
首先,对于两个单元,合并之后会产生两个结果,分值和新的向量,具体计算方法如下图所示
然后,计算任意两个单词合并的得分(下图是计算的相邻单词),贪心的选择得分最大的一对进行合并,这里也就是首先选择了第一对。
然后,不断的重复这一过程
最后,直到只剩下根节点,达到我们的目的。
进一步改进
1.合并时不再根据总分挑选,而是要求每个预测分值离错误类别尽量远
J
=
∑
i
s
(
x
i
,
y
i
)
−
m
a
x
y
∈
A
(
x
i
)
(
s
(
x
i
,
y
)
+
Δ
(
y
,
y
i
)
)
J=\sum_is(x_i,y_i)-max_{y\in{A(x_i)}}(s(x_i,y)+\Delta(y,y_i))
J=i∑s(xi,yi)−maxy∈A(xi)(s(xi,y)+Δ(y,yi))
2.将贪心搜索策略替换为柱搜索
3.对于句法结构中的NP、VP、PP不同的关系,应该使用不同的权重矩阵
W
N
P
W^{NP}
WNP、
W
V
P
W^{VP}
WVP、
W
P
P
W^{PP}
WPP
3.对W矩阵的处理,因为在公式中,
W
[
c
1
,
c
2
]
W[c_1,c_2]
W[c1,c2],这里的W只是相当于拼接而成的,
c
1
和
c
2
c_1和c_2
c1和c2之间并没有产生交互,课程中讲到的方法是对每个单词节点同时赋予向量和矩阵,在合成运算过程中混合两者的矩阵和向量。如下图所示,这样得到的短语P就充分混合了两个单词。