论文地址:
Unsupervised Recurrent Neural Network Grammars
代码地址:
harvardnlp/urnng
介绍
这篇是新鲜出炉的NAACL19的关于无监督循环神经网络文法(URNNG)的论文,在语言模型和无监督成分句法分析上都取得了非常不错的结果,主要采用了变分推理和RNNG。本文公式量较大,因此我也推了好久,算法也挺多的,首先上一张我推导的公式笔记:
我这篇博客就不按照论文的顺序来讲了,就按照我上面这张笔记讲一讲我的理解吧,很多细节可能会忽略
URNNG模型
先上一张模型图,让大家对整体模型有个大概的认知:
其实就是自顶向下的根据概率分布来采样每个span的split,用一个队列来保存所有还没有采样出split的span,然后把所有采样出的span在邻接矩阵中的对应值标为1。
Recurrent Neural Network Grammars
这里稍稍做了一些改进。
数组算出来,算法如下:
然后偏导可以交给深度学习库的自动微分,就不用你自己求啦。
至于第一项的偏导可以用类似于策略梯度的方法解决:
实验
实验结果这里就不多说了,细节具体看论文吧,就贴两个结果,一个是语言模型:
可以看出在标准的PTB数据集上,URNNG效果只比监督学习的RNNG和用URNNG损失函数微调后的RNNG效果略差一点,但是在大数据集上,URNNG的优势就体现出来了。
另一个是无监督成分句法分析,这里是用的全部长度的测试集:
这个任务上URNNG效果是最好的。
结论
和之前两篇语言模型做无监督成分句法分析类似,这篇论文用推理网络学习句法树的概率分布并采样句法树,再用生成网络计算这些句法树和句子的联合概率,最后用变分推理最大化句子的概率,也就是学习出一个好的语言模型。
这篇论文的工作还是挺令人惊叹的,融合了inside算法、RNNG、变分推理等等知识。本来我变分推理听老师讲了好几次了都云里雾里的,看了这篇论文后总算弄懂了一点了,不过所了解的还是很少,EM算法、VAE之类的高级境界根本不会。。。