100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 斯坦福CS224n NLP课程【十四】——树RNN递归和短语句法分析

斯坦福CS224n NLP课程【十四】——树RNN递归和短语句法分析

时间:2022-07-25 23:27:13

相关推荐

斯坦福CS224n NLP课程【十四】——树RNN递归和短语句法分析

语言光谱模型

对于语义相似性等这类目标来说,最好的方法还是词袋

最简陋最常用的是词袋模型,或“词向量袋模型”。最复杂的可能是短语结构树,额外再标注一些诸如指代、语义等标签。

这张图很形象,词袋中装不下所有单词,散落一地。虽然词袋模型很简陋,但它依然是一个很难击败的基线模型。它简单高效,通过一些聪明的技巧可以在一些任务中胜过深度神经网络。

语言的语义解释--并不只是词向量

词向量只是词语级别的向量,对于下列两句话,加粗部分其实意思是一致的:

就算一个人没见过snowboarder这个单词,他也能明白这与下面这个短语是同一个意思。人们可以用更大颗粒度的文本来表达自己的意思,而不仅仅是词袋中的某个单词。我们希望有这样的一个模型来做到这点、

语义合成性

这个问题触及的第一个层面就是语义的合成性,你可以组合小的单元来表示更复杂的语义。

这不仅关乎语言,还关乎人类的其他认知活动。对于图像而言,也有类似的组成性:

将小部件组成大模块并理解大模块的大体思想 Tree Recursive NN 是最好的模型 而Recursive 递归的概念是什么?

语言能力:

以前有种主流观点认为,人类生来就具备处理语言的大脑模块,使得人类区别于其他动物,成为万物灵长。但乔姆斯基最近的工作认为,人类大脑中没有这种结构,只是因为人类学会了递归而已。有了递归的思想,人类就能利用有限的器官处理无限长度的语言序列。

语言是递归的吗?

在认知科学上虽然有些争议,因为一般一个句子是有长度限制的,人们几乎从不说300个词以上的句子。但是递归是描述语言的最佳方式,比如[The man from [the company that you spoke with about [the project] yesterday]]这里面一个名词短语套一个名词短语,一级级下去。从实用的角度讲

1、通过递归地描述句子(句法树),可以有效地消歧:

2、便于指代相消等任务。

3、便于利用语法树结构(基于短语的机器翻译)

建立在词向量空间的模型

不论句子多复杂,我们总是希望能在同一个向量空间中表示词语和短语的语义。为什么一定要这么做?回想这节课开头snowboarder的例子就明白了,有时候一个单词与一个短语表达的是同一个意思。

如何将短语映射到词向量空间中

使用语义合成的原则在数学、语义学和语言哲学中,复合性原理是指,一个复杂表达式的意义是由其各组成部分的意义以及用以结合它们的规则来决定的。/dicts/en/Principle_of_compositionality.html

通过同时学习句法树和复合性向量表示,就可以得到短语的向量表示了。

短语结构分析

如果我们能用短语结构树表示一个句子:

将每个rule视作一个算子,即可得到每个短语乃至句子的向量表示:

Recursive vs recurrent NN

recurrent更像是受限的tree 结构

两者都是递归神经网络,只不过前者在空间上递归,后者在时间上递归。中文有时会把后者翻译为“循环神经网络”,但这明显混淆了等级,令人误解。它们各有各的优缺点,Recursive neural net需要分析器来得到句法树,而Recurrent neural net只能捕捉“前缀”“上文”无法捕捉更小的单位。但人们还是更倾向于用后者,LSTM之类。因为训练Recursive neural net之前,你需要句法树;句法树是一个离散的决策结果,无法连续地影响损失函数,也就无法简单地利用反向传播训练Recursive neural net。另外,复杂的结构也导致Recursive neural net不易在GPU上优化。

RNN与CNN之间的关系

RNN只会为满足语法的短语计算向量,而CNN为每个可能的短语计算向量。从语言学和认知科学的角度来讲,CNN并不合理。甚至recurrent neural network也比tree model和CNN更合理。

两者的关系可以这样想象,RNN将CNN捕捉的不是短语的部分删除了:

得到:这里的RNN指的是 递归Recursive

Recursive NN 用于结构化预测

同时得到结构树和向量表示的一种任务。输入两个候选子节点,输出两个结果1.两个子节点合并后的新节点语义表示向量,2.新节点成立的分数来判断该组合结构是否合理。

最简单的Recursive NN

利用单层的神经网络作为组合函数,向量内积作为打分函数,马上就可以得到一个最简单的RNN:

使用Recursive NN分析句子

计算任意两个单词合并的得分(虽然下图是相邻两个,但我觉得那只是绘图方便;就算是我第一次写的玩具级别的依存句法分析器,也是任意两个单词之间计算):

然后贪心地选择得分最大的一对合并:

重复这一过程

直到得到根节点:

最大间隔

使用贪心算法,每次都选择总分得分最高的tree

不再仅仅根据整个句子的总分挑选,而是要求每个预测分值离错误类别要尽量远。

然后也不要贪心搜索,而是柱搜索。

两两组合词语进行贪心搜索,获取最优的解法。导致时间复杂度变得更大,工作量变大不是我们想要的。所以我们可以使用反向传播算法对参数进行更新。

由于前向传播时每个节点的信号来自所有子节点,所以梯度也来自所有子节点。并且前向传播时父节点的信号是利用子节点信号的拼接计算的,所以梯度需要针对子节点的信号计算:

这个问题其实在TensorFlow那一课已经讲过了,图计算:前向传播信号流入某节点,反向传播误差就得从某节点分流到所有源节点。树只是图的一个特例:

讨论 简单的Recursive NN的缺点

单层神经网络接受两个单词词向量的拼接,乘上权值矩阵W,非线性激活。矩阵运算中W可视作两个矩阵的拼接,c_1和c_2其实没有发生互动。

另外,模型中只有一个合成函数,使用同一个权值矩阵WW处理NP、VP、PP……这明显是不合理的。

版本2:Syntactically-UnitedRecursiveNN

利用子节点的句法分类(词性NN、VV、PP)不同而使用不同的权值矩阵进行合成。

然后句子的结构也是通过PCFG中的CKY算法动态规划地得到。这样速度很快,不需要遍历每两个节点的组合,进行矩阵和向量的乘积计算。这种“文法”被称为Compostional Vector Grammars。

句法分析的相关工作

CVG的产生离不开PCFG的拓展,当时人们提出Lexicalized PCFG,即用短语的head表示短语本身。但这是个离散的表示,丢失了其他词语的语义,CVG自然而然地想到了用连续的向量表示来代替它。

效果:裸的CKY-PCFG可以拿到72%的F1,但裸的RNN已经可以拿到85%的F1了,在加上Syntactically-United,立马超越所有人工特征工程。

句法分析并不是最终目的,最终目的是通过句法分析得到的句法树合成句子的意思的表示。

直观效果:将每种短语的合成函数的权值矩阵可视化,会发现模型成功地捕捉到究竟哪个子节点语义信息更丰富。

其中主对角线的黄线来自单位矩阵初始化。上图名词-连词短语中,语义主要来自前半部分。而所有格-名词短语中,语义主要来自后半部分。

还有很多类似的例子:

而得到的句子表示也的确把相似的句子放到了邻近的向量空间中:

版本2依然没有解决两个子节点的混合问题,它们依然乘上的是矩阵的不同部分,互不相干。

版本3 Compositionality Through Recursive Matrix-Vector Spaces

有理论认为语言是由两种不同的符号组成,一种符号就是普通的符号,另一种符号类似操作符,可以改变普通符号的意思。比如very good和not good中,good是普通符号,被前面的操作符修改了意思。

版本3形式化了这种思想,将操作符抽象为矩阵,将符号抽象为向量。我们不知道哪些词语是操作符,哪些是符号,所以为每个节点同时赋予向量和矩阵,在合成运算的时候混合两者的矩阵和向量,期待模型自己去区分并混合语义:

这样得到的短语p依然是一个向量,但是已经充分混合两个子节点的语义表示。

而对两个子节点的矩阵表示,也拼接起来乘上另一个矩阵得到一个新的矩阵,作为短语的操作符的矩阵表示:

事实上,矩阵是个庞大的参数集合,这是该模型的短板。

效果

虽然朴素RNN可以捕捉大多数短语语义,但它容易被最后一个单词影响。而MV-RNN的确做得更好。下图是两种模型预测的短语情感(越大越正面)及其概率分布:

语义关系分类

可以将MV-RNN用于学习较大的语义上下文所描述的语义关系,比如总体-局部、消息-主题之类:

只需得到包含两个目标单词的最小短语表示进行分类即可。

效果:

朴素RNN依然挺好,加上MV和一点点额外语言学特征就超越了使用大量特征工程的SVM。

其他应用:

解析图像各部分的语义成分(类似句法分析):

图像分割与多分类(类似中文分词与词性标注):

甚至用于粒子物理:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。