介绍
这篇论文提出了一种非二叉化、自底向上的转移系统,并且针对它提出了一种Dynamic Oracle,用损失函数的形式来实现它。
之前的模型针对多叉树的处理都是采用head规则进行二叉化,或者采用空结点作为临时结点来进行隐式二叉化。但是本文将REDUCE动作扩展为REDUCE-k动作,从而可以对k叉树进行预测,这样减少了很多二叉树预测的中间过程,降低了模型的训练时间。并且为了提升准确率,还提出了一种用损失函数实现的Dynamic Oracle。
自底向上的转移系统就不详细介绍了,之前都已经介绍过了,这里只说明一下之后要用到的记号。
转移系统由一个stack和buffer组成,每个时刻的状态通常表示为 ,四个元素分别表示stack、buffer第一个单词的单词下标、分析结束标记、已经生成的短语成分的集合。
自底向上的转移系统
传统的转移系统REDUCE操作都只是将栈顶的两个元素归约为一个结点,而本文提出的转移系统将REDUCE扩展为REDUCE-X#k动作,归约栈顶概率最大的k个结点为结点X。举个例子,对于产生式 ,使用的动作为REDUCE-VP#3,表示归约栈顶的三个结点。
具体的转移系统和例子如上图所示,为了区分具有不同数量儿子的结点X,将结点的label细化为X#k,表示具有k个儿子。例如对于VP结点,如果有两个儿子,那么它的label就是VP#2,如果有三个儿子就是VP#3。
Dynamic Oracle
本文采用的Dynamic Oracle是用损失函数来实现的,损失函数衡量的是状态c可以产生的最优句法树和标准句法树之间的距离,这样就可以计算出采取每一个动作之后下一个状态的损失函数值,选择损失函数值最小的动作。
对于状态c,损失函数 定义为状态c可以产生的最终的句法树t和标准句法树 之间的最小汉明距离,即:
一个训练正确的Dynamic Oracle应当使得预测的下一个状态 不会增加损失函数值,即
这个最小汉明损失可以定义为 ,下面就将讨论这两部分怎么计算,主要用到短语的可达性和可分解性。
短语的可达性
在这里用短语集合 来表示一棵句法树,我们假设状态c的短语集合为 ,那么我们说,标准句法树中的一个短语 当且仅当满足如下三个条件之一时,称它是“各自可达短语”:
- (因为短语已经包含在了状态c已生成的短语集合里,那么它当然是可达的)。
- (因为短语还在buffer中,所以可以通过不断SHIFT然后REDUCE得到)。
- (这种情况表明了短语的左端点恰好位于栈里某个短语的边界处,而右端点又还在buffer里,所以还可以通过不断SHUFT然后REDUCE得到短语。但是如果左端点不是栈里短语的边界,那说明产生了交叉,自然不会可达了。而如果右端点已经在栈里了,那之后也不会得到了,因为转移系统每次都是REDUCE栈顶的短语,不可能从栈里面开始REDUCE的)。
枚举标准树中的所有短语,根据以上规则可以得到可达短语集合 ,然后从标准短语集合中排除掉这部分短语,剩下的就是不可达短语集合 。这部分短语就是不论采取何种动作序列,最后都不可能生成的短语集合。
损失函数
对于每一个状态c,可以定义它的损失函数为
其中第一个因子惩罚的是False Negative短语,也就是漏报的短语,即正确的但是不可能被生成的短语。第二个因子惩罚的是False Positive短语,也就是误报的短语,即已经生成的但是是错的短语。