放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

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

目录

版本2:Syntactically-United RNN

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

2017-07-08_15-24-34.png

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

句法分析的相关工作

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

效果

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

2017-07-08_15-41-58.png

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

直观效果

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

2017-07-08_15-45-33.png

其中主对角线的黄线来自单位矩阵初始化。

上图名词-连词短语中,语义主要来自前半部分。而所有格-名词短语中,语义主要来自后半部分。

还有很多类似的例子:

2017-07-08_15-48-03.png

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

2017-07-08_15-53-13.png

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

版本3:Matrix-vector RNNs

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

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

2017-07-08_16-15-01.png

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

2017-07-08_16-21-04.png

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

2017-07-08_16-24-05.png

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

效果

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

hankcs.com 2017-07-08 下午4.33.14.png

语义关系分类

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

2017-07-08_16-41-10.png

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

效果

2017-07-08_16-42-03.png

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

其他应用

这时候就下课了,后面还有一些MV-RNN的应用:

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

hankcs.com 2017-07-08 下午4.44.41.png

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

hankcs.com 2017-07-08 下午4.45.31.png

甚至用于粒子物理:

hankcs.com 2017-07-08 下午4.47.34.png

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » CS224n笔记14 Tree RNN与短语句法分析

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #2

    有一处错误,在结构预测那里,从第一层,词向量开始评分那里,我觉得本该是只有相邻的两个词向量进行评分,并不是所有的词向量对,句法分析中不存在跳过某个单词的关系,博主想当然了。

    guanchong6年前 (2018-02-03)回复
    • 你说的每错,manning 也说了是greed的搜索,如果不是用greed的话复杂度会是一个factorial n。

      kidder6年前 (2018-05-29)回复
  2. #1

    “利用单层的神经网络作为组合函数,向量内积作为打分函数,马上就可以得到一个最简单的RNN”。 请问score = transform(U)p 中的U是另一个需要训练的score向量吗?也是在所有词语对中相同的吗?谢谢!

    crownpku7年前 (2017-08-04)回复
    • $U$的确是所有词语share的权值向量,用于score,需要训练

      hankcs7年前 (2017-08-04)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》