模型
这里我不按照论文上的顺序讲,论文是倒序,变量定义都得看完整篇论文才出来,实在是看的太杂乱了。。。
Parsing Network
第1步: 首先第一步要预测出相邻两个单词的句法距离,用宽度为 的卷积核来对单词进行卷积。例如要预测 和 的句法距离,那么就对 进行卷积(其实就是两层前馈神经网络),得到如下输出(注意原文中这一段里的词向量 e 应该都是 x ,并且这里原文中定义为 h 是和后面符号冲突的,有误):
当然了,第二行也可以看做是窗口大小为1的卷积核,第一个单词之前要补上 个0。
最后得到的句法距离反映出了相邻两个词之间的语义相关程度,如果距离比较大,说明两个词可能位于两个不同的短语中,否则就位于同一个短语。一个形象化的句法距离就是相邻两个单词的最近公共祖先的高度。
下面这个图就是一个例子,卷积核窗口宽度为2:
第2步: 然后就可以根据句法距离,求出 xt 最远到哪个位置有联系。用 来衡量 xt 与 xj 的分别与前一个单词的句法距离的差距:
这里的 就是当输入大于1或者小于-1时,截取掉,给它限制在-1到1这个范围内,所以最后 的范围就是0到1。可以看出,如果 很大,那么 dt 就大于 dj ,否则的话 dt 就小于 dj 。这也很合乎直观上的认知,如果 大于 ,那么说明 xj 和 xt 的最近公共祖先的高度比较低,那么说明 xj 和 xt 在同一棵子树中,差值自然大,反之的话 xj 是当前子树的最左边的子结点,差值就很小。
所以模型只需要一步步往左寻找第一个 最接近0的点,也就是之前提到过的 。为了实现这个目标,可以定义 的概率为:
为什么这么设计呢?其实还是很有道理的。概率越大的话,说明 越小,而其他的 越大,这就印证了上面提出的观点。而如果取 的话, 一定很小,会拉低概率;反之取 的话,会乘上一个很小的项 ,也会拉低概率。所以取 就是最优的。
第3步: 我们的最终目的是求出门 ,也就是 xt 与 xi 的相关度。在之前的动机中,直接将 之后的设为1,之前的设为0,但是这样是离散序列,无法传播梯度,所以这里采用另一种方法来求。注意到只有 接近于1,而其他的概率都接近于0,所以只需要用概率密度函数来作为 就行了:
注意到这个概率密度函数在 时值基本很小接近于0,而大于等于它时很大,越来越接近于1。这和设计的初衷已经很像了,所以可以近似用来作为 。
这里要提几点证明,可看可不看。
证明开始
首先这个概率 的形式其实是一个狄利克雷过程,有两个特殊值要定义一下,一个是 时,概率为:
还有就是当 时,因为 实际不存在,所以定义为句法距离无穷大,那么 定义为0,所以概率为:
然后可以求出 的期望(这里论文中又写的一塌糊涂,符号定义都不统一。。。):
进一步可以写为:
上面的求和裂项相消可以得到:
这里也可以验证出 ,所以最终得到下面的门是正确的:
然后要证明的就是根据这个策略求出的两个单词的关联区间没有交叉(但是可以完全覆盖)。首先放宽一下条件,证明当 只取0或者1时,性质成立,也就是定义(这里原文又打错了。。。):
也就是在原来的定义中令 r 为正无穷。这样的话如果 ,那么 就是1,否则就是0。放宽了条件之后, 取值就只有1和0了,所以求出的 一定是满足句法距离 所有位置中最右边的一个。而对于所有的 ,都满足 。证明也很简单,假设存在两个单词 和 ,其中 ,它俩的关联区间交叉了,那么假设 的 为 u ,而 xn 的 lt 为 m ,所以 。那么根据定义,有:
这两个式子显然矛盾,所以证明了在宽松的条件下,这个不交叉的性质是成立的。
另一个极端是令 ,这种情况下 ,最终算下来 是一个首项为 公比为2的等比数列。这里的话论文里说最终会形成一棵所有叶子结点都直接连接在根结点上面的句法树,但是我是没看出来为什么,首先这种情况下句法距离 d 对最终的损失函数没有影响了,所以梯度无法传播回来,句法距离 d 应该只受到词向量影响了,最终就是一个普通的语言模型,句法距离最终会是什么样子谁也不知道。
在具体实现时,将 设为一个中间值,但是这样会产生交叉的关联区间,所以测试的时候再将其设为正无穷。
证明结束
Reading Network
上面的Parsing Network求了半天就是为了得到这个gates ,然后怎么使用呢?既然是语言模型,下面当然要用LSTM来对句子进行编码了。众所周知,在LSTM中有两个隐含层状态 h 和 c ,所以在这里不直接使用上一个时刻传过来的状态,而是用历史所有时刻的状态信息,再与gates加权后输入到下一时刻。在论文中并没有直接使用gates作为权重,而是计算了一个新的权重,这里称作结构化attention:
当然这还不是最终的权重,再通过加入gates,定义一个新的结构化intra-attention:
上面两个式子我也不是很清楚怎么解释,反正最后就用这个权重来对历史状态进行编码:
最后将加权求和后的隐含层状态作为下一个时刻的隐含层输入,得到新的隐含层表示。
Predict Network
最后就是预测下一个单词是什么了,这里并没有直接用当前时刻 t 的隐含层输出来预测,还是采用了下一个时刻输出对所有历史信息的attention,做加权求和,但是存在一个问题, 的值依赖于 ,也就是依赖于 ,但是这是我们需要预测的,那怎么办呢?论文中就直接用另一套参数直接预测出一个临时的 :
这样就能估计出 和 了。最后对历史状态加权求和,然后用一个前馈神经网络预测下一个单词:
其中 是对 对加权求和。
实验
具体实验设置啥的去看论文吧,这里就贴几个结果图解释一下。
上面这个是字符级别的语言模型的结果,PRPN取得了SOTA的结果。
上面这个是词级别的语言模型的结果,除了那个用了4层LSTM和跨越连接的模型(参数多)外,PRPN效果是最好的。
当然我最关心的还是无监督成分句法分析上面的结果:
目前为止,无监督成分句法分析的标准做法还是用WSJ10数据集(也就是长度小于等于10的句子),然后用unlabeled F1评测。可以看到,PRPN效果只能说一般般,不是很好。
其实我也很疑惑,这里的无监督句法分析全靠Parsing Network产生的句法距离来产生,但是一个关键问题是句法距离并没有监督,唯一的监督信号来自于最后Predict Network的语言模型,那么这个句法距离真的能够学习到真实的句法距离吗?我比较怀疑,不过效果证明,这个对语言模型还是有帮助的,对无监督成分句法分析的话不好说。
总结
这篇论文几个review都给出了还算不错的评价,思想是不错的,但是和其中一个review观点一样,我觉得文章写得太烂了,一堆的笔误,逻辑很混乱,即使这已经是review后修改过的版本了,还是有一堆错误。
过两天再看一篇ICLR2019的还是这个组的PRPN的改进版本,看看到底有何改进。不过真要搞无监督句法分析的话,还是老老实实去做聚类吧。