Abstract
这篇文章解决的还是semantic parser的问题,主要的实验还是在WikiTableQuestion和WikiSQL上进行。将文本问题转换成程序,通过一个computer执行。这篇文章提到了semantic parser的两个难点,一个是存在假程序,也就是答案正确但是程序本身是错误的。另一个就是搜索空间过大的问题。spurious program的问题其实就是MAPO要解决的bias的问题,所以这篇文章要解决的问题和MAPO是差不多的,只不过方法不一样,MAPO是针对存在这一类问题的任务,而这篇文章只是针对semantic parser的问题。核心idea:作者认为correct program和question之间是有一定对应关系的,比如结构上的对应。所以作者希望能够导出这样的规则,称为latent-alignment framework。 prediction分成两部分,1)预测抽象程序。2)把抽象程序填充。其实这种方法就像是模板预测,先生成模板然后预测。
Introduction
他这里的规则感觉很古怪,但是这个idea还挺好的。
correct program和spurious program的差别就在于“silver”被用了两遍,所以导出的规则就是同一个variable不能被trigger两次。
在第一阶段,将question text映射成abstract program,第二个阶段就是对abstract program填充,也就是填充模板,每一个空对应一个分类器。
Model
首先是定义语法,因为有抽象程序和实例程序,所以也定义了抽象语法和实例语法。Abstract Grammar定义了5种基本类型,Row,Column,String,Number,Date。function:Return Type -> function,比如ROW -> first,取出第一列。
导出语法树。Instantiation Grammar属于填充部分,根据不同的条件填充变量。这个语法树就可以写成规则的组合,所以这个程序把生成template转换成生成规则了。
operator可以是>=<,条件也可以通过and或者or的方式。
另外,作者观察了数据集,发现1)那些能够生成consistent program的程序的abstract program利用的规则都不是很复杂。2)在WikiTableQuestion86%的问题都只有一个consistent program。而wikiSQL中每一个问题基本上有84个consistent program。3)只有少部分的abstract program是能够被实例化成consistent program的。
Training
Our learning objective J is to maximize the log-likelihood of the marginal probability of all consistent programs, which are generated by mapping an utterance x to an interim abstract program h.
目标函数是优化所有的consistent program的边缘概率。
很好理解,第一项是生成抽象程序的概率,第二项是生成实例程序的概率。在训练阶段只会关注能够生成consistent program的程序,在测试阶段会选择概率最大的。这个训练应该还可以再做优化的。
Conclusion
这篇文章还有很多细节没有阅读,但是大致是思想还是明白的,生成模板,然后填充,不过这种方法最后并没有超越sota。而且对于这个数据集而言,我感觉伪程序出现的不多,我sample了一些数据集后没有发现太多的伪程序,所以我认为他这种模板的方法对于accuracy上应该是没有什么太大提升的,但是他的方法还是很新的,我并没有跑过他的代码,但是从程序的长度和复杂度上讲,程序不会超过三跳,方法也没有很复杂,所以填充模板应该不会出现太多错误,主要原因可能是再模板生成的准确率上,如果能提升模板准确率那么模型可以改进。