Abstract
这篇文章是2013年的老文了,发表在ACL上,和现在大部分NLP深度学习文章不同,文章是关于语义解析领域,和目前NLP with DL的领域不一样,主要关注的是对文法语义的解析。类似英文的语法分析,parser对句子做出结构拆分,区分出动词名词等等。
标准的一些句法描述是使用一些粗糙的类别(名词短语NP,形容词短语PP)来标注短语,但是这些划分是远远不够的,粗糙的划分可能会导致句法的混淆,所以可以对类别进行细化
有可以区分出动词名词等等。而一些容易混淆的句子,则可以用向量来表示,上图中每一个节点由一个三元组构成,词,词性,向量表示。standard probabilistic context free grammars(PVFG)可以做句子结构分析和词性分析,而RNN则用于向量表示的学习。所以这篇文章提出的模型CVG是结合了PCFG和RNN的优点,但是在这两基础上做了改进,可以预测句子的结构和其向量表示。上图就是CVG的分析实例。
Model
CVG
本节介绍这个能够预测句法结构和组合语义信息(vector representation)的模型。许多句子的结构的有一定规律的,我们可以通过设计一些固定的模式对这些句子进行规则划分,所以CVG的顶层是PCFG。CVG会结合句法和语义的信息然后计算出向量的表达。
Word Vector Representation
词向量的生成方法有两种,一种是基于词出现的频率和上下文信息得出的词向量,另一种是基于神经网络,通过神经网络的学习得到词向量,也就是embedding。CVG模型主要使用的是另一种基于嵌入矩阵的方法。首先要准备一个语料库,然后构建一个神经网络,通过反向传播训练嵌入矩阵。假设我们有一个句子,句子有m个单词,根据每一个单词在矩阵中的索引,我们取出列向量作为词向量即可。这样句子就会变成一个元组, x = ( ( w 1 , a w 1 ) , . . . ( w m , a w m ) ) x = {((w_1,a_{w_1}),...(w_m, a_{w_m}))} x=((w1,aw1),...(wm,awm))。这样就得到了词向量。
Max-Margin Training Objective for CVGs
训练CVG则是需要目标函数的。function g:
X
−
>
Y
X ->Y
X−>Y,X是句子集合,Y则是所有可能的树结构,
Y
(
x
i
)
=
y
i
Y(x_i) = y_i
Y(xi)=yi是正确的结构。给定了正确的树,那么loss则是
Δ
(
y
i
,
y
^
)
\Delta (y_i, \hat y)
Δ(yi,y^)。而树之间的差别是不正确标签的数量
N
(
y
)
N(y)
N(y)来衡量。
s是评分函数,现在我们要找到评分最高的树
当训练完成后,正确的结构会比其他可能的结构分数都要高。
y
i
y_i
yi的分数会上升,
y
^
\hat y
y^的分数会下降。
Score function
s是刚刚提到的评价函数。
上图是标准的RNN的结构,每一个单词都会对应于一个元组,元组由单词和向量组成,自底向上,vector组合后再乘一个nx2n的矩阵。注意这里的矩阵是相同的。由于这里的中间的节点很多都是组合而成,而单个矩阵没办法捕捉到信息。所以作者提出用不同的矩阵捕获组合信息。
后面两段就是如何训练了。但主要的差别还是在于权重和损失函数的变化。
Experiment
Conclusion
相对于PCFG,改进主要在于结合了RNN和PCFG,并在标准的RNN上做了相应的扩充。结合RNN的动机在于vector representation能够捕获细粒度的句法和语法信息,便于区分一些容易混淆的句子。而对RNN的扩充的动机则是single weight不能很好的捕获组合信息。
CS224n的课程上有提到相应的内容。