论文笔记 | 语义解析相关论文

1. Language to Logical Form with Neural Attention

ACL 2016. Li Dong and Mirella Lapata

seq2seq将自然语言转换为logic forms。文中给出了两种模型,一种是建模为vanilla sequence transduction task,简称为Seq2Seq,也就是decoder部分生成一个一个的token。另一种是将decoder设计为层次树结构,简称为Seq2Tree,实验证明了建模为树结构更优,因为其可以获取到logic forms的结构组合特征。

Seq2Seq和Seq2Tree都是在decoder部分生成token的模型,区别在于Seq2Seq直接生成一个一个的token,无法保证生成的token组成的logic form是有效的。Seq2Tree的输出也是token,但它将非终结符都转换为了这个token。decode完一层,token的表示被作为下一层的输入,继续decode,直至一层中所有的token都是终结符。这种方法可以保证最终生成的表达式是有效的。
在这里插入图片描述

2. Abstract Syntax Networks for Code Generation and Semantic Parsing

  1. Maxim Rabinovich, Mitchell Stern, Dan Klein. Computer Science Division University of California.

为了保证decoder生成的logic forms是有效的,通常会对decoder进行一些限制。Dong and Lapata, 2016中的Seq2Tree是利用自上而下的类似构建树的过程生成token。这种方式可以保证产生的结构是有效的,但在一些情况下,会生成无意义的logic form。比如在lambda表达式中的($1, $1),虽然结构有效,但并不能通过它来查询得到结果。

这篇文章同样是属于constraint decoder范畴,但利用的是grammar来限制decoder输出。decoder生成抽象语法树(Abstract Syntax Tree, AST),描述这种树的语言是Abstract Syntax Description Language(ASDL)。python也是使用这种语法树,所以更容易生成python代码。

ASDL主要有几个元素:Primitive types,Composite types,Constructors,Composite nodes,Fields。对应这几个元素,作者设计了四类modules,并加在普通的LSTM decoder上。

在这里插入图片描述

3. A Syntactic Neural Model for General-Purpose Code Generation

ACL 2017. Pengcheng Yin, Graham Neubig. Carnegie Mellon University

作者认为现有的方法将代码生成看做是自然语言生成的任务,但没有考虑到目标编程语言的句法。他预定义了一些规则,包含Call、If、For、FunctionDef等的参数和其他相关内容。判断出自然语言表达的类型,就根据该类型的参数继续生成。

本质上,这也是一个用grammar来限制decode过程的方法。
在这里插入图片描述

4. Tree-structured Decoding with Doubly-recurrent Neural Network

ICLR 2017. David Alvarez-Melis, Tommi S. Jaakkola. MIT

这篇文章有两个关键点:

  • 在decoder部分构建树的时候,使用了doubly recurrent neural network分别对当前节点的父节点和sibling节点建模。即改变了之前的工作中将父节点表示和sibling节点表示直接concat在一起来预测当前节点label的方式,认为父节点和sibling节点应该区别对待。
  • 在训练时,不仅考虑了节点label的正确性,还考虑了节点拓扑结构的正确性,即该节点有无孩子节点,有无下一个sibling节点。

5. Semantic Parsing with Semi-Supervised Sequential Autoencoders

  1. Google DeepMind

在做语义解析相关任务时,训练数据是(x, y),x和y都是序列。解决方法是找到一个映射,能够从x得到y。但是这样标记好的数据较少,而y是较容易获得的,所以这篇文章提出一个半监督的方法,来解决这一问题。

论文提出一个模型SEQ4,由两个seq2seq架构组成。第一个seq2seq中的encoder以y为输入,decoder输出\tilde{x},第二个seq2seq中的encoder以\tilde{x}为输入,decoder输出重构的\hat{y}。

在这里插入图片描述

本文的半监督指的是监督学习和无监督学习结合。无监督学习是指,训练数据中只有y,损失函数则定义为重构误差。监督学习是指,训练集的数据是(x, y),损失函数不仅包含y的重构误差,还包括x的误差。

实验表示,半监督的方式比只使用监督学习的方式性能要好。

6. SEQ2SQL: Generating structured queries from natural language using reinforcement learning

  1. Victor Zhong, Caiming Xiong, Richard Socher.

这篇文章有两个贡献点:

  • 提出了seq2sql,将自然语言转换为sql查询。总结了常见问题对应的sql的形式,主要包含三部分:聚合操作,select的列以及where的条件。如下图所示,seq2SQL中就包含三个组件。前两个部分的值是固定的,但where中的条件具有无序性,不能直接使用交叉熵作为损失函数。所以,前两个部分使用交叉熵作为损失函数,第三个部分使用policy-based RL方法,根据reward,定义损失。

  • 提供了一个人工标注的数据集WikiSQL,包含80654条数据,每条数据的形式为<问题句子,对应sql查询>。
    在这里插入图片描述

准确率59.4%,baseline:

  • seq2seq semantic parsing [Dong & Lapata, 2016] 35.9%
  • augmented pointer network [Vinyals et al., 2015] 53.3%

总结

这些语义解析的工作,前三个是在constraint decoder上的改进,保证输出的代码或查询是有效的。第一个工作中的Seq2Tree能够保证生成的token符号匹配正确,但不能保证生成的查询可执行。第二个和第三个工作都利用grammar对decode过程进行限制,能够保证生成的代码或查询是可执行的。

第4,5个工作是对seq2seq模型本身的改进,第4个工作是利用两个decoder,一个建模父节点,一个建模同级节点。第5个工作使用了两个seq2seq,变成了自编码器的形式,结合监督学习和无监督学习,使得效果更佳。

第6个工作是对损失函数的改进,任务时生成sql查询,作者预先定义了sql查询中的三个主要部分,在decode的时候,前两个部分能够得到确切值,选择交叉熵做为损失函数,where部分因为条件的无序性,使用基于策略的强化学习方法,计算reward,加入到损失函数中。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值