• CS224n笔记14 Tree RNN与短语句法分析


      本文转自:http://www.hankcs.com/nlp/cs224n-tree-recursive-neural-networks-and-constituency-parsing.html

      介绍了著名的复合性原理,由此启发得到树形RNN,用于表示短语和句子级别的语义。从朴素树形RNN到SU-RNN和MV-RNN,讨论了进化历史和各自优缺点,演示了效果和在图像等领域的拓展应用。

    语言模型光谱 

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

    hankcs.com 2017-07-04 下午5.33.11.png

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

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

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

    hankcs.com 2017-07-04 下午5.42.28.png

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

    语义合成性

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

    hankcs.com 2017-07-04 下午5.50.37.png

    这不仅关乎语言,还关乎人类的其他认知活动。

    对于图像而言,也有类似的组成性:

    hankcs.com 2017-07-04 下午5.52.36.png

    语言能力

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

    hankcs.com 2017-07-06 下午2.52.01.png

    语言是递归的吗

    在认知科学上虽然有些争议,因为一般一个句子是有长度限制的,人们几乎从不说300个词以上的句子。但是递归是描述语言的最佳方式,比如

    [The man from [the company that you spoke with about [the project] yesterday]]

    这里面一个名词短语套一个名词短语,一级级下去。从实用的角度讲

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

    hankcs.com 2017-07-06 下午3.12.41.png

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

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

    在词向量空间模型上表示语义

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

    2017-07-06_15-38-53.png

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

    根据著名的复合性原理——

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

    ——https://dict.eudic.net/dicts/en/Principle_of_compositionality.html

    2017-07-06_15-51-14.png

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

    短语结构分析:目的

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

    2017-07-06_15-56-23.png

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

    hankcs.com 2017-07-06 下午3.57.38.png

    Recursive vs. recurrent neural networks

    hankcs.com 2017-07-06 下午4.01.20.png

    两者都是递归神经网络,只不过前者在空间上递归,后者在时间上递归。中文有时会把后者翻译为“循环神经网络”,但这明显混淆了等级,令人误解。

    它们各有各的优缺点,Recursive neural net需要分析器来得到句法树,而Recurrent neural net只能捕捉“前缀”“上文”无法捕捉更小的单位。

    但人们还是更倾向于用后者,LSTM之类。因为训练Recursive neural net之前,你需要句法树;句法树是一个离散的决策结果,无法连续地影响损失函数,也就无法简单地利用反向传播训练Recursive neural net。另外,复杂的结构也导致Recursive neural net不易在GPU上优化。

    从RNNs到CNNs

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

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

    2017-07-06_16-36-07.png

    得到:

    2017-07-06_16-37-10.png

    Recursive Neural Networks用于结构化预测

    同时得到结构树和向量表示的一种任务。

    输入两个候选子节点,输出两个子节点合并后的新节点语义表示,以及新节点成立的分值。

    2017-07-06_16-57-11.png

    最简单的Recursive Neural Network

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

    2017-07-06_17-04-22.png

    用RNN分析句子

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

    hankcs.com 2017-07-06 下午5.19.26.png

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

    hankcs.com 2017-07-06 下午5.20.06.png

    重复这一过程

    hankcs.com 2017-07-06 下午5.20.34.png

    直到得到根节点:

    hankcs.com 2017-07-06 下午5.20.58.png

    结构上的反向传播

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

    hankcs.com 2017-07-07 下午5.06.43.png

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

    hankcs.com 2017-07-07 下午5.19.53.png

    简单RNN的缺点

    hankcs.com 2017-07-08 上午9.38.58.png

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

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

    Life is short, but I have a cat.
  • 相关阅读:
    kubernetes案例 tomcat+mysql
    elasticsearch+logstash+kibana部署
    elasticsearch集群部署以及head插件安装
    Rhel7.4系统部署cobbler
    部署Hadoop2.0高性能集群
    使用haproxy实现负载均衡集群
    nginx实现动静分离的负载均衡集群
    heartrbeat实现web服务器高可用
    keepalived+lvs
    LVS集群之IP TUN模式以及网站压力测试
  • 原文地址:https://www.cnblogs.com/koocn/p/7701724.html
Copyright © 2020-2023  润新知