Vintage NLP for Work
模型是很简单的 encoder-decoder,用 bi-LSTM 做编码,解码器简单用一个带 attention 的前馈网络。
传统解决方法有两种,即上面说的 RL 和 MML。具体的目标函数和梯度如图。
由于穷举所有的代码(对所有的 z 求和)是不可能的,这两种都用了近似的办法去求梯度。RL 选择蒙特卡洛采样,MML 选用了 beam search。
由于穷举所有的代码(对所有的 z 求和)是不可能的,这两种都用了近似的办法去求梯度。RL 选择蒙特卡洛采样,MML 选用了 beam search。
Vintage NLP for Work
传统解决方法有两种,即上面说的 RL 和 MML。具体的目标函数和梯度如图。 由于穷举所有的代码(对所有的 z 求和)是不可能的,这两种都用了近似的办法去求梯度。RL 选择蒙特卡洛采样,MML 选用了 beam search。
观察上面的梯度可以发现,其实每次更新就是让答案正确的代码权重增加了一点。但是这问题就比较严峻。
一方面,大量的虚假代码会让模型很难选中正确的代码(毕竟一开始模型是随机的),因此可能最后采样出来的都是虚假代码,那越训练就越朝着过拟合的错误方向走了,即虚假代码使探索策略(exploration strategy)产生了偏差。
另一方面,哪怕每次都完美地把正确代码选出来了,也可能99个都是虚假的,就1个是对的,那训练过程也还是会跑偏,而且这个调学习率或者多训练一段时间都是很难让正确代码追上来的。
因此,他们的想法非常直接:让所有能产生正确结果的代码,都对模型的学习产生相同的贡献。
第一,引入随机的 beam search(为什么在 beam search 之上做改进原文里有论述),使得每次以一定 epsilon 的概率随机选一个 token 放入 beam 中,以 1-epsilon 的概率选一个当前概率最高的 token 放入 beam 中。
一方面,大量的虚假代码会让模型很难选中正确的代码(毕竟一开始模型是随机的),因此可能最后采样出来的都是虚假代码,那越训练就越朝着过拟合的错误方向走了,即虚假代码使探索策略(exploration strategy)产生了偏差。
另一方面,哪怕每次都完美地把正确代码选出来了,也可能99个都是虚假的,就1个是对的,那训练过程也还是会跑偏,而且这个调学习率或者多训练一段时间都是很难让正确代码追上来的。
因此,他们的想法非常直接:让所有能产生正确结果的代码,都对模型的学习产生相同的贡献。
第一,引入随机的 beam search(为什么在 beam search 之上做改进原文里有论述),使得每次以一定 epsilon 的概率随机选一个 token 放入 beam 中,以 1-epsilon 的概率选一个当前概率最高的 token 放入 beam 中。
Vintage NLP for Work
数据集的三个领域上都取得了很好结果,REINFORCE 在七巧板数据上表现也很好,不过猜测是这个数据集过于简单,句子中的指代很明确。
其他的实验结果就不说了,简单说一下结论。
- 这种只有最后才能得到反馈的 semantic parsing 任务很常见,而强化学习可以处理这种挑战。
- 本文的 randomized beam search 可以搜索得到分布中较低概率的部分。
- beta-meritocratic update rule 可以使得所有样本的所有可能程序之间对梯度贡献相当
- 本文建立了 RL 和 MML 之间的联系,将来可以方便加入 RL 的其他成果比如 actor-critic
- beta-meritocratic update 虽然在梯度中加入了 beta 平滑项,和其他在目标函数上做模拟退火还是大有不同的,其他工作如果让 beta=0 退化成 uniform 分布之后整个目标函数就完全平坦而没有信息量了,但这里哪怕 beta=0 甚至在部分实验中能得到最好结果
- 这种对整个 world state 和上下文相关的 utterance 之间做神经网络建模有点像 program induction 里面的 https://arxiv.org/abs/1605.06640 这篇文章(不过其实没什么关系,只是形似)
- 这种只有最后才能得到反馈的 semantic parsing 任务很常见,而强化学习可以处理这种挑战。
- 本文的 randomized beam search 可以搜索得到分布中较低概率的部分。
- beta-meritocratic update rule 可以使得所有样本的所有可能程序之间对梯度贡献相当
- 本文建立了 RL 和 MML 之间的联系,将来可以方便加入 RL 的其他成果比如 actor-critic
- beta-meritocratic update 虽然在梯度中加入了 beta 平滑项,和其他在目标函数上做模拟退火还是大有不同的,其他工作如果让 beta=0 退化成 uniform 分布之后整个目标函数就完全平坦而没有信息量了,但这里哪怕 beta=0 甚至在部分实验中能得到最好结果
- 这种对整个 world state 和上下文相关的 utterance 之间做神经网络建模有点像 program induction 里面的 https://arxiv.org/abs/1605.06640 这篇文章(不过其实没什么关系,只是形似)
Abstract Syntax Networks for Code Generation and Semantic Parsing
https://arxiv.org/abs/1704.07535
Maxim Rabinovich, Mitchell Stern, Dan Klein
https://arxiv.org/abs/1704.07535
Maxim Rabinovich, Mitchell Stern, Dan Klein
Vintage NLP for Work
Abstract Syntax Networks for Code Generation and Semantic Parsing https://arxiv.org/abs/1704.07535 Maxim Rabinovich, Mitchell Stern, Dan Klein
本文发表在 ACL2017 上。在看到本文之前管理狗都没意识到上次推荐的那篇用到的 HS 数据集就是指炉石 Orz,然后去翻了一下是 DeepMind 在 ACL2016 上一篇文章中提供的数据集( https://github.com/deepmind/card2code ),包括炉石和万智牌。
任务是根据卡片上的描述,生成卡片对应的 python 代码。
由于卡牌上的描述较短,因此虽然这是限定领域但生成正确的代码仍然比较困难。
本文还用了上图所示的 ATIS(一个航空订票数据集),以及其他 semantic parsing 任务中常用的 GEO、JOBS 数据集。
本文列举的相关工作比较丰富,管理狗没怎么读过。但本文的特点是将每一种语法结构类型作为单独的网络去预测,而不像其他工作中那样只是把语法树自顶向下用一个垂直 LSTM 而不同子节点用一个水平 LSTM。
任务是根据卡片上的描述,生成卡片对应的 python 代码。
由于卡牌上的描述较短,因此虽然这是限定领域但生成正确的代码仍然比较困难。
本文还用了上图所示的 ATIS(一个航空订票数据集),以及其他 semantic parsing 任务中常用的 GEO、JOBS 数据集。
本文列举的相关工作比较丰富,管理狗没怎么读过。但本文的特点是将每一种语法结构类型作为单独的网络去预测,而不像其他工作中那样只是把语法树自顶向下用一个垂直 LSTM 而不同子节点用一个水平 LSTM。
GitHub
deepmind/card2code
A code generation dataset for generating the code that implements Hearthstone and Magic The Gathering card effects. - deepmind/card2code
Vintage NLP for Work
本文的基础是抽象语法描述语言(Abstract Syntax Description Language),主要考虑分为原子类型、组合类型。
原子类型就是标识符、整数、浮点这些。
组合类型就是指语句(stmt)、表达式(expr)这类。例如函数定义、函数调用都是一种语句(statement),因此都是语句类型的 constructor。每一种组合类型都需要将子节点组合起来,每个子节点都是有名字和类型的域(field),同时也有三种数:单值(singular)、可选(optional)、序列值(sequential)。
例如 ClassDef 是一个属于 stmt (一种组合类型)的 Constructor,包括单值的 name(类名标识符)、可选的 bases、序列值的 body。
组合类型就是指语句(stmt)、表达式(expr)这类。例如函数定义、函数调用都是一种语句(statement),因此都是语句类型的 constructor。每一种组合类型都需要将子节点组合起来,每个子节点都是有名字和类型的域(field),同时也有三种数:单值(singular)、可选(optional)、序列值(sequential)。
例如 ClassDef 是一个属于 stmt (一种组合类型)的 Constructor,包括单值的 name(类名标识符)、可选的 bases、序列值的 body。
Vintage NLP for Work
原子类型就是标识符、整数、浮点这些。 组合类型就是指语句(stmt)、表达式(expr)这类。例如函数定义、函数调用都是一种语句(statement),因此都是语句类型的 constructor。每一种组合类型都需要将子节点组合起来,每个子节点都是有名字和类型的域(field),同时也有三种数:单值(singular)、可选(optional)、序列值(sequential)。 例如 ClassDef 是一个属于 stmt (一种组合类型)的 Constructor,包括单值的 name(类名标识符)、可选的…
他们模型的特点在于不同的语法结构用不同的模型,是一个很直接的尝试。如图 a,b,c,d 的顺序,模型的预测和 AST 的构建基本相同,encoder 先生成一个向量, 然后依次往下传。先选出一个组合类型,再选择该类型对应的模型,再生成组合类型所需的域,最后再生成基本的原子类型。
Vintage NLP for Work
他们模型的特点在于不同的语法结构用不同的模型,是一个很直接的尝试。如图 a,b,c,d 的顺序,模型的预测和 AST 的构建基本相同,encoder 先生成一个向量, 然后依次往下传。先选出一个组合类型,再选择该类型对应的模型,再生成组合类型所需的域,最后再生成基本的原子类型。
除了解码时加入 attention 之外,他们还加入了 attention 的监督信息(其他工作一般是考虑使用 copy 机制),即人工生成 attention 的权重,然后作为正则项加入损失函数中。
Vintage NLP for Work
除了解码时加入 attention 之外,他们还加入了 attention 的监督信息(其他工作一般是考虑使用 copy 机制),即人工生成 attention 的权重,然后作为正则项加入损失函数中。
在传统的 Semantic Parsing 任务的三个数据集上,他们的提升并不明显。仅在 Jobs 数据集上做到了最好。
Vintage NLP for Work
在传统的 Semantic Parsing 任务的三个数据集上,他们的提升并不明显。仅在 Jobs 数据集上做到了最好。
在炉石数据集上,他们做到了最好的效果,同时也比上次介绍的同样是 ACL2017 录用的《A Syntactic Neural Model for General-Purpose Code Generation》效果要好。
文中还有一些对于模型在炉石数据集上预测错误 case 的分析,有兴趣的可以翻阅论文。
文中还有一些对于模型在炉石数据集上预测错误 case 的分析,有兴趣的可以翻阅论文。
Adversarial Evaluation of Dialogue Models
https://arxiv.org/abs/1701.08198
Anjuli Kannan, Oriol Vinyals
本文是一篇短文,来自 Google,探讨的是对话系统的评价问题,他们尝试用对抗网络来做评价。
如何评价对话系统的模型一直是个老大难问题,作者提出,一个回答能否与人类的回答区分开可以作为模型的一个衡量标准,于是从这里就可以加入对抗模型了。
他们在最简单的 RNN Encoder Decoder 上做尝试,判别器是另一个 RNN + 二分类器。Generator 以生成回复的最大似然做优化目标,判别器以分类结果的最大似然做优化目标。
他们的数据来自 Gmail 的邮件回复,判别器的正样本是正常的人类回复,负样本是随机选其他邮件会话里的回复。数据已加密。
本文有一些结论:
- 对抗网络确实可以区分出一些人类认可的较差回复:比如过分简单的 Yes、Thank You 等等。
- 但是,目前仍然没有证据表明,一个欺骗了判别器的模型一定就能给出好的回复
- 当前判别器输出与句子的长度强相关,相同长度的句子里判别器与生成器的回复相关系数 -0.02
- GAN 依然是一个最少监督的评价方法,但还需要相当探索
https://arxiv.org/abs/1701.08198
Anjuli Kannan, Oriol Vinyals
本文是一篇短文,来自 Google,探讨的是对话系统的评价问题,他们尝试用对抗网络来做评价。
如何评价对话系统的模型一直是个老大难问题,作者提出,一个回答能否与人类的回答区分开可以作为模型的一个衡量标准,于是从这里就可以加入对抗模型了。
他们在最简单的 RNN Encoder Decoder 上做尝试,判别器是另一个 RNN + 二分类器。Generator 以生成回复的最大似然做优化目标,判别器以分类结果的最大似然做优化目标。
他们的数据来自 Gmail 的邮件回复,判别器的正样本是正常的人类回复,负样本是随机选其他邮件会话里的回复。数据已加密。
本文有一些结论:
- 对抗网络确实可以区分出一些人类认可的较差回复:比如过分简单的 Yes、Thank You 等等。
- 但是,目前仍然没有证据表明,一个欺骗了判别器的模型一定就能给出好的回复
- 当前判别器输出与句子的长度强相关,相同长度的句子里判别器与生成器的回复相关系数 -0.02
- GAN 依然是一个最少监督的评价方法,但还需要相当探索
RUBER: An Unsupervised Method for Automatic Evaluation of Open-Domain Dialog Systems
https://arxiv.org/abs/1701.03079
Chongyang Tao, Lili Mou, Dongyan Zhao, Rui Yan
https://arxiv.org/abs/1701.03079
Chongyang Tao, Lili Mou, Dongyan Zhao, Rui Yan
Vintage NLP for Work
RUBER: An Unsupervised Method for Automatic Evaluation of Open-Domain Dialog Systems https://arxiv.org/abs/1701.03079 Chongyang Tao, Lili Mou, Dongyan Zhao, Rui Yan
本文来自北大,考虑的也是如何评价模型生成的答案句子。
传统的 BLEU 等指标以词共现为基础,而在对话系统中,句子多样性是很常见的,一个人类觉得好的答案可能和标准答案完全没用到相同的词,因此本文很自然地考虑用泛化能力更好的 embedding 来做判断。
本文提出的 RUBER (Referenced metric and Unreferenced metric Blended Evaluation Routine) 指标是两个部分的合成
- Referenced metric: 用句子的 embedding 通过 max/min pooling 后,将生成答案和标准答案做对比,求余弦距离
- Unreferenced metric: 用神经网络计算用户 query 和生成句子的匹配得分,不用标准答案
- Blend: 将上面两种得分归一化后进行合成,如最大、最小、几何平均、算术平均
传统的 BLEU 等指标以词共现为基础,而在对话系统中,句子多样性是很常见的,一个人类觉得好的答案可能和标准答案完全没用到相同的词,因此本文很自然地考虑用泛化能力更好的 embedding 来做判断。
本文提出的 RUBER (Referenced metric and Unreferenced metric Blended Evaluation Routine) 指标是两个部分的合成
- Referenced metric: 用句子的 embedding 通过 max/min pooling 后,将生成答案和标准答案做对比,求余弦距离
- Unreferenced metric: 用神经网络计算用户 query 和生成句子的匹配得分,不用标准答案
- Blend: 将上面两种得分归一化后进行合成,如最大、最小、几何平均、算术平均