专栏首页算法码上来论文赏析[NAACL19]无监督循环神经网络文法 (URNNG)

论文赏析[NAACL19]无监督循环神经网络文法 (URNNG)

原文链接:

https://godweiyang.com/2019/04/20/NAACL19-URNNG/godweiyang.com

论文地址:

Unsupervised Recurrent Neural Network Grammarsarxiv.org

代码地址:

harvardnlp/urnnggithub.com

介绍

这篇是新鲜出炉的NAACL19的关于无监督循环神经网络文法(URNNG)的论文,在语言模型和无监督成分句法分析上都取得了非常不错的结果,主要采用了变分推理和RNNG。本文公式量较大,因此我也推了好久,算法也挺多的,首先上一张我推导的公式笔记:

我这篇博客就不按照论文的顺序来讲了,就按照我上面这张笔记讲一讲我的理解吧,很多细节可能会忽略,请参见原文吧。

首先对于无监督成分句法分析,常规做法就是学习一个生成模型

,就比如RNNG就是一个生成模型,但是缺少句法树

的监督信号怎么办呢?现在给你的输入只有句子

,那么只能用语言模型

来做监督了。习惯上我们喜欢取对数,也就是:

这里就存在几个问题,比如

的状态空间太大了,不可能穷举所有的,所以接下来按步骤讲解如何求解。

URNNG模型

先上一张模型图,让大家对整体模型有个大概的认知:

左边是一个推理网络(Inference Network),用来根据输入

推理出隐变量也就是句法树

的概率分布

。右边是一个生成模型(Generative Model),用来计算从推理网络中采样出来的句法树

的联合概率

,最后根据上面语言模型算出句子的概率,最大化这个概率即可。

接下来分别讲解这两个部分和具体的优化方法。

Inference Network

首先将词向量

和位置向量

拼接,作为推理网络LSTM的输入:

然后算出span

的得分,计算方式和以往一样,用BiLSTM前后向输出做差,然后通过一个前馈神经网络得到分数:

接下来就需要计算句法树的概率分布了,这里不直接计算句法树

,而是计算它的邻接矩阵

的概率分布,这个邻接矩阵意思就是如果span

存在,那么

,否则的话

。然后就可以用CRF计算出邻接矩阵

对应的概率:

其中

是配分函数,也就是用来将概率归约到0到1之间的:

注意这里的

并不是所有的01矩阵集合,而是必须满足能产生合法句法树的矩阵,而这情况也很多,不能穷举求解,在这里采用经典的inside算法来求解这个配分函数:

不过我觉得这里是错的!就是这里的两处

应该改成

。不过具体代码实现的时候并没有这么做,初始值一样都是

,但是递推的时候采用了如下式子:

其实就是用

来取代

了,化简后就是代码实现这个式子,应该是为了防止数值溢出。

然后就是采样了,推理网络目的就是计算出句法树的概率分布,然后根据这个分布采样出若干个句法树,那么现在给定一棵句法树可以根据上面的算法计算出它的概率了,那怎么采样呢?其实还是可以通过刚刚计算得出的

数组来采样,采样算法如下:

其实就是自顶向下的根据概率分布来采样每个span的split,用一个队列来保存所有还没有采样出split的span,然后把所有采样出的span在邻接矩阵中的对应值标为1。

最后推理网络采样出了若干个句法树

,然后根据CRF计算出每个句法树的概率

,后面的事情就交给生成网络了。

Generative Model

上面的推理网络采样出了若干个句法树

,生成网络的目的就是计算它的联合概率

。这个其实不难,在之前的RNNG论文笔记中,我已经大致讲过了,可以去复习一下:

Recurrent Neural Network Grammarsgodweiyang.com

这里稍稍做了一些改进。

首先需要定义一个栈用来存放转移的历史状态,这里定义栈里放的元素为二元组

,一个是stack-LSTM编码的输出,一个是子树的结构表示。首先需要预测下一步的action是什么,所以取出栈顶的元素

,预测action的时候只要用到隐含层输出:

然后根据这个概率预测action是SHIFT还是REDUCE,下面分两种情况讨论。

如果是SHIFT,那么因为是生成模型,所以需要预测下一个移进的单词是什么:

然后将单词

的词向量输入到stack-LSTM中得到下一个时刻的隐含层输出:

最后将

推进栈里。

如果是REDUCE,那么首先需要取出栈顶的两个元素

,然后用TreeLSTM计算出两个子结点合并后的子树的表示:

接着还是计算stack-LSTM下一个时刻的隐含层输出:

最后将

推进栈里。

为了防止数值溢出,常规上我们计算联合概率的对数:

从这个式子可以看出,联合概率定义为所有给定某段单词和action预测下一个单词和给定某段单词和action预测下一个action的概率之积。

如果是监督任务比如RNNG,那么只需要最大化这个联合概率就足够了,但是现在要做无监督,没有

,注意别搞混了,推理网络采样出的

可不能用来监督哦,因为那本来就不是正确的,所以接下来要采用语言模型来作为最终的目标函数。

Variational Inference

句子

的对数概率定义为:

其中

是所有合法句法树的集合,但是这里不可能穷举所有的句法树,所以就要用到变分推理,具体的理论知识不仔细介绍了,可以去查阅变分推理相关知识,下面直接推导。

其中最后一行叫做先验

的证据下界(ELBO),要想最大化先验,可以最大化这个ELBO,如果我们对这个ELBO变化一下形式可以得到:

所以这个ELBO和先验就相差了一个KL散度,最大化ELBO的话等价于最小化KL散度,也就是使推理网络产生句法树的概率分布和生成模型尽量接近。

但是这个ELBO还是不好算,尽管它把

移到了求和符号也就是期望里面,所以转换一下形式:

因为模型一共有两组参数,一个是推理网络的参数

,一个是生成网络的参数

,所以下面分别对两个参数求导。

首先对

求偏导,因为只有第一项有这个参数,所以偏导为:

这个偏导可以按照概率

采样得到:

然后对

求偏导,因为有两项含有这个参数,分别求偏导。第二项是熵,它的值其实可以用之前的

数组算出来,算法如下:

然后偏导可以交给深度学习库的自动微分,就不用你自己求啦。

至于第一项的偏导可以用类似于策略梯度的方法解决:

这里最后也是转化为了采样,和策略梯度做法类似,这里加入baseline来提升性能:

其中

定义为所有其他的对数联合概率的均值:

至此所有偏导都已求出来了,两个通过采样得到,一个通过inside算法结果自动微分得到,所以去掉导数符号并相加就得到了最终的损失函数:

一定要注意,这里的

在代码实现的时候不能传入梯度,不然的话对

的偏导就会多出这一项的偏导了!

实验

实验结果这里就不多说了,细节具体看论文吧,就贴两个结果,一个是语言模型:

可以看出在标准的PTB数据集上,URNNG效果只比监督学习的RNNG和用URNNG损失函数微调后的RNNG效果略差一点,但是在大数据集上,URNNG的优势就体现出来了。

另一个是无监督成分句法分析,这里是用的全部长度的测试集:

这个任务上URNNG效果是最好的。

结论

和之前两篇语言模型做无监督成分句法分析类似,这篇论文用推理网络学习句法树的概率分布并采样句法树,再用生成网络计算这些句法树和句子的联合概率,最后用变分推理最大化句子的概率,也就是学习出一个好的语言模型。

这篇论文的工作还是挺令人惊叹的,融合了inside算法、RNNG、变分推理等等知识。本来我变分推理听老师讲了好几次了都云里雾里的,看了这篇论文后总算弄懂了一点了,不过所了解的还是很少,EM算法、VAE之类的高级境界根本不会。。。

本文分享自微信公众号 - 算法码上来(GodNLP),作者:godweiyang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 论文赏析[EACL17]K-best Iterative Viterbi Parsing(K-best迭代维特比句法分析)

    K-best Iterative Viterbi Parsinggodweiyang.com

    godweiyang
  • 论文赏析[TACL18]隐式句法树模型真的能学到句子中有意义的结构吗?

    https://aclweb.org/anthology/papers/Q/Q18/Q18-1019/

    godweiyang
  • 【ACL2020】一种新颖的成分句法树序列化方法

    「论文地址:」A Span-based Linearization for Constituent Trees[1] 「代码地址:」https://github...

    godweiyang
  • 【优化】记一次通过工具减少 Git 冲突

    当我们的项目越来越大的时候,Git 冲突是团队协作中令人非常苦恼的事情,不仅仅浪费了我们时间,而且很容易解决冲突的时候出现问题。

    GopalFeng
  • 笔记:CentOS Linux release 7.6.1810安装 CUDA Toolkit

    打开以下网页:https://developer.nvidia.com/cuda-toolkit

    耕耘实录
  • 微信小程序一行文字水平居中

    特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~

    lollipop72
  • 网络直播管理办法解读:不可忽略的十五大原则

     杨  乐  腾讯研究院副秘书长        刘笑岑  腾讯研究院高级研究员         邱少林  腾讯公司高级法律顾问   2016年1...

    腾讯研究院
  • CIFAR10数据集实战-数据读取部分(上)

    登录http://www.cs.toronto.edu/~kriz/cifar.html网站,可以自行下载数据集。

    用户6719124
  • RTSP摄像头实现H265 H264 Web端无插件直播流媒体服务EasyNVR在集成iframe无法自动播放问题解决方法

    由于互联网的飞速发展,传统安防摄像头的视频监控直播与互联网直播相结合是大势所趋。传统安防的直播大多在一个局域网内,在播放的客户端上也是有所限制,一般都需要OCX...

    EasyNVR
  • 如何正确地做误差分析,NLP研究人员们需要学习一下

    尝试分析机器学习模型在什么时候、以什么方式、由于什么原因失效,我们把这称为「误差分析(error analysis)」。对科研人员来说,他们需要通过误差分析选择...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券