A Syntactic Neural Model for General-Purpose Code Generation
(Yin and Neubig, ACL 2017)
https://arxiv.org/abs/1704.01696
左边是自然语言和对应的 AST,右边是生成模型的过程及目标程序代码
(Yin and Neubig, ACL 2017)
https://arxiv.org/abs/1704.01696
左边是自然语言和对应的 AST,右边是生成模型的过程及目标程序代码
Vintage NLP for Work
A Syntactic Neural Model for General-Purpose Code Generation (Yin and Neubig, ACL 2017) https://arxiv.org/abs/1704.01696 左边是自然语言和对应的 AST,右边是生成模型的过程及目标程序代码
一周前ACL2017录用通知刚出来,这篇工作已被录用但还没正式出版。
这是 UCB 的 Pengcheng Yin 等人的工作,主要任务是把自然语言的句子转换为 python 代码。
先简单介绍一下这个任务背景,说到生成,一般我们会考虑两种数据,即自然语言和形式语言。从一种变换到另一种分别有一些代表任务:
- 自然语言到自然语言:文本摘要、问答系统、对话机器人
- 自然语言到形式语言:semantic parsing、code generation(即本文工作)
- 形式语言到自然语言:结构化数据叙述(如天气预报生成、球赛转播生成)、知识图谱关系描述
- 形式语言到形式语言:编译器
就本文工作来说,还有另一个相关分支是从程序的输入输出样本,生成程序代码:Program Synthesis/Induction
这种任务过去面临两个问题:
以往的 semantic parsing 任务中,往往是把自然语言转换成某种逻辑表达式(neo-Davidsonian style DSL、typed lambda calculus、SQL subset、AMR 等),这些 DSL 的语法往往很有限。虽说能一定程度将自然语言形式化,但却简单或抽象层次太低,并不能大量运用于实际。
最近的 code generation 工作则会使用 DL 中成熟的 seq-to-seq 框架来把自然语言变换为具体代码,但是这种框架中并没考虑到目标语言的语法,因此生成的序列很难保证是正确的程序代码。
本文采取的概率模型可以将自然语言转换为目标语言的 AST,因而可以适用于各种通用编程语言,他们在 python 的多个数据集上做了实验。
这个概率模型并不试图去建模语言的生成序列,而是建模 AST 的构建过程:选择一条产生式、确定生成符号。因此生成的结果一定是符合目标语法的。
模型决定具体用哪条产生式时用的是 softmax 分类,确定生成符号时还单独考虑了拷贝机制(Gu et al. 2016, Incorporating Copying Mechanism in Sequence-to-Sequence Learning)。
这是 UCB 的 Pengcheng Yin 等人的工作,主要任务是把自然语言的句子转换为 python 代码。
先简单介绍一下这个任务背景,说到生成,一般我们会考虑两种数据,即自然语言和形式语言。从一种变换到另一种分别有一些代表任务:
- 自然语言到自然语言:文本摘要、问答系统、对话机器人
- 自然语言到形式语言:semantic parsing、code generation(即本文工作)
- 形式语言到自然语言:结构化数据叙述(如天气预报生成、球赛转播生成)、知识图谱关系描述
- 形式语言到形式语言:编译器
就本文工作来说,还有另一个相关分支是从程序的输入输出样本,生成程序代码:Program Synthesis/Induction
这种任务过去面临两个问题:
以往的 semantic parsing 任务中,往往是把自然语言转换成某种逻辑表达式(neo-Davidsonian style DSL、typed lambda calculus、SQL subset、AMR 等),这些 DSL 的语法往往很有限。虽说能一定程度将自然语言形式化,但却简单或抽象层次太低,并不能大量运用于实际。
最近的 code generation 工作则会使用 DL 中成熟的 seq-to-seq 框架来把自然语言变换为具体代码,但是这种框架中并没考虑到目标语言的语法,因此生成的序列很难保证是正确的程序代码。
本文采取的概率模型可以将自然语言转换为目标语言的 AST,因而可以适用于各种通用编程语言,他们在 python 的多个数据集上做了实验。
这个概率模型并不试图去建模语言的生成序列,而是建模 AST 的构建过程:选择一条产生式、确定生成符号。因此生成的结果一定是符合目标语法的。
模型决定具体用哪条产生式时用的是 softmax 分类,确定生成符号时还单独考虑了拷贝机制(Gu et al. 2016, Incorporating Copying Mechanism in Sequence-to-Sequence Learning)。
Vintage NLP for Work
一周前ACL2017录用通知刚出来,这篇工作已被录用但还没正式出版。 这是 UCB 的 Pengcheng Yin 等人的工作,主要任务是把自然语言的句子转换为 python 代码。 先简单介绍一下这个任务背景,说到生成,一般我们会考虑两种数据,即自然语言和形式语言。从一种变换到另一种分别有一些代表任务: - 自然语言到自然语言:文本摘要、问答系统、对话机器人 - 自然语言到形式语言:semantic parsing、code generation(即本文工作) - 形式语言到自然语言:结构化数据叙…
实验结果从 BLEU 值来看还是较高的,但对目标程序来说 BLEU 指标毫无意义,只有准确度才有实用价值。因此可以看到第一个较难的 HS 数据集上效果还很差,但从 Django 框架构建的数据集上的效果还可以。
Tree Edit Models for Recognizing Textual Entailments, Paraphrases, and Answers to Questions (Heilman and Smith, NAACL-HLT 2010)
http://aclweb.org/anthology/N10-1145
http://aclweb.org/anthology/N10-1145
Vintage NLP for Work
Tree Edit Models for Recognizing Textual Entailments, Paraphrases, and Answers to Questions (Heilman and Smith, NAACL-HLT 2010) http://aclweb.org/anthology/N10-1145
上一篇工作中提到把“生成目标序列”改为“生成目标 AST 操作序列”,其实这也不是一件很新鲜的事。
这篇2010年的工作就也试图寻找出一个序列,从而把一棵依存句法树变成另一棵树。做的工作是文本蕴含(Recognizing Textual Entailment)、复述检测(Paraphrase Detection)、答案选择(Answer Selection)。这三个任务比较相似,以往的各种工作基本都会用自己提出的模型同时在这三者上做实验。
上面的示意图是一个蕴含任务,即给定一个句子,要求判断另一个句子的意思是否已经被涵盖了。用本文的方法若找出了一个序列,则说明新句子被给定的句子所蕴含了。
他们设计了一个启发式的核函数(Kernel),然后在核函数的基准下做贪心搜索寻找出变化序列。另外他们也设计了比原本的树编辑距离(Tree Edit Distance)更多的操作。
这篇2010年的工作就也试图寻找出一个序列,从而把一棵依存句法树变成另一棵树。做的工作是文本蕴含(Recognizing Textual Entailment)、复述检测(Paraphrase Detection)、答案选择(Answer Selection)。这三个任务比较相似,以往的各种工作基本都会用自己提出的模型同时在这三者上做实验。
上面的示意图是一个蕴含任务,即给定一个句子,要求判断另一个句子的意思是否已经被涵盖了。用本文的方法若找出了一个序列,则说明新句子被给定的句子所蕴含了。
他们设计了一个启发式的核函数(Kernel),然后在核函数的基准下做贪心搜索寻找出变化序列。另外他们也设计了比原本的树编辑距离(Tree Edit Distance)更多的操作。
Vintage NLP for Work
上一篇工作中提到把“生成目标序列”改为“生成目标 AST 操作序列”,其实这也不是一件很新鲜的事。 这篇2010年的工作就也试图寻找出一个序列,从而把一棵依存句法树变成另一棵树。做的工作是文本蕴含(Recognizing Textual Entailment)、复述检测(Paraphrase Detection)、答案选择(Answer Selection)。这三个任务比较相似,以往的各种工作基本都会用自己提出的模型同时在这三者上做实验。 上面的示意图是一个蕴含任务,即给定一个句子,要求判断另一个句子…
传统的树编辑距离操作只有增节点、删节点、加 label 等三种,他们扩展了很多。他们在 Introduction 中也提到这些扩展是从分析了数据集共性后提出来的。
因此,这类方法其实很需要对任务比较熟悉,才能设计出更容易学出成效的候选操作(Operation Candidates)。
因此,这类方法其实很需要对任务比较熟悉,才能设计出更容易学出成效的候选操作(Operation Candidates)。
NLP 与知识图谱的对接
http://mp.weixin.qq.com/s/ELTerjijT2nVW87wzUWGMA
(本文整理自中国中文信息学会常务理事、白硕博士在杭州金融知识图谱论坛上的演讲。)
挺不错的一个综述,带着技术的视角看产业,能引出从业者更多的思考。
文因互联是鲍捷老师回国后创立的一个专注知识图谱的创业公司。
http://mp.weixin.qq.com/s/ELTerjijT2nVW87wzUWGMA
(本文整理自中国中文信息学会常务理事、白硕博士在杭州金融知识图谱论坛上的演讲。)
挺不错的一个综述,带着技术的视角看产业,能引出从业者更多的思考。
文因互联是鲍捷老师回国后创立的一个专注知识图谱的创业公司。
今天发个炒冷饭的东西,去年十月 Nature 刊登了一篇 DeepMind 的工作即可微神经计算机(DNC),作者 Graves 在14年就已经提出了神经图灵机,后来有了各种各样的如 GPU 机、加入强化学习计算等改良。
最近 Talla 公司的数据科学家做了一个报告,机器之心发了全文翻译:
http://mp.weixin.qq.com/s/faUbQ_wXsGVf4GcMhEBXGw
最近 Talla 公司的数据科学家做了一个报告,机器之心发了全文翻译:
http://mp.weixin.qq.com/s/faUbQ_wXsGVf4GcMhEBXGw
Vintage NLP for Work
今天发个炒冷饭的东西,去年十月 Nature 刊登了一篇 DeepMind 的工作即可微神经计算机(DNC),作者 Graves 在14年就已经提出了神经图灵机,后来有了各种各样的如 GPU 机、加入强化学习计算等改良。 最近 Talla 公司的数据科学家做了一个报告,机器之心发了全文翻译: http://mp.weixin.qq.com/s/faUbQ_wXsGVf4GcMhEBXGw
DNC 的工作原理其实特别简单,有兴趣的同学建议通读原文做一个自己的实现,github 上已经有了各种各样的实现,例如最近的 pytorch 版本:
https://github.com/ypxie/pytorch-NeuCom (官方说6个月内发布代码然而现在一点动静都没有)
DNC 通过一个核心的多层 LSTM 网络,除了正常会有的输入和输出之外,还构造了一系列的参数用于与一个额外设计的内存(一个超大矩阵)做交互。
交互通过三种形式的 Attention-like 想法实现,但大多是可以从传统计算机中获得的改良。
第一是基于内容的寻址,即用比较向量直接与内存的每个字做相似度计算,而不是像以往的论文中设计的 key-value 内存那样比较 key。
第二是带分配器的动态内存分配,传统计算机 OS 会保存一个空闲内存的链表,这里也类似,会记录每个字的使用情况,并结合上一次读写内存的位置来决定这次需要写入的位置。
第三是用转移矩阵实现的时序内存链接,也是考虑到传统代码执行时有局部性(即设计分页分块等概念的基础),这里用一个转移矩阵来构建上一次读写了 j 位置以后这次读写 i 位置的概率。并对这个矩阵做了一些稀疏性的优化。
实现效果是很漂亮的,在 Facebook bAbI 数据集实现了最好结果,在伦敦地铁图和家谱图上实现了遍历、推断、最短路径搜索,以及带强化学习加成的 mini-SHRDLU 小游戏。
所以其实有种 DL 界在重新发明计算机的感觉,主要大家也没见过别的计算模型。到目前为止 DNC 上的操作还是不可解释的,通过上面三种内存交互我们还是不知道机器如何处理数据结构、如何做推断的,因此下一步要继续增强模型的能力可能还会遇到瓶颈。例如,当前实验中只做了最长五站地铁的推断,但传统的图算法远远超过这个水平。
https://github.com/ypxie/pytorch-NeuCom (官方说6个月内发布代码然而现在一点动静都没有)
DNC 通过一个核心的多层 LSTM 网络,除了正常会有的输入和输出之外,还构造了一系列的参数用于与一个额外设计的内存(一个超大矩阵)做交互。
交互通过三种形式的 Attention-like 想法实现,但大多是可以从传统计算机中获得的改良。
第一是基于内容的寻址,即用比较向量直接与内存的每个字做相似度计算,而不是像以往的论文中设计的 key-value 内存那样比较 key。
第二是带分配器的动态内存分配,传统计算机 OS 会保存一个空闲内存的链表,这里也类似,会记录每个字的使用情况,并结合上一次读写内存的位置来决定这次需要写入的位置。
第三是用转移矩阵实现的时序内存链接,也是考虑到传统代码执行时有局部性(即设计分页分块等概念的基础),这里用一个转移矩阵来构建上一次读写了 j 位置以后这次读写 i 位置的概率。并对这个矩阵做了一些稀疏性的优化。
实现效果是很漂亮的,在 Facebook bAbI 数据集实现了最好结果,在伦敦地铁图和家谱图上实现了遍历、推断、最短路径搜索,以及带强化学习加成的 mini-SHRDLU 小游戏。
所以其实有种 DL 界在重新发明计算机的感觉,主要大家也没见过别的计算模型。到目前为止 DNC 上的操作还是不可解释的,通过上面三种内存交互我们还是不知道机器如何处理数据结构、如何做推断的,因此下一步要继续增强模型的能力可能还会遇到瓶颈。例如,当前实验中只做了最长五站地铁的推断,但传统的图算法远远超过这个水平。
GitHub
GitHub - ypxie/pytorch-NeuCom: Pytorch implementation of DeepMind's differentiable neural computer paper.
Pytorch implementation of DeepMind's differentiable neural computer paper. - GitHub - ypxie/pytorch-NeuCom: Pytorch implementation of DeepMind's differentiable neural computer paper.
Vintage NLP for Work
DNC 的工作原理其实特别简单,有兴趣的同学建议通读原文做一个自己的实现,github 上已经有了各种各样的实现,例如最近的 pytorch 版本: https://github.com/ypxie/pytorch-NeuCom (官方说6个月内发布代码然而现在一点动静都没有) DNC 通过一个核心的多层 LSTM 网络,除了正常会有的输入和输出之外,还构造了一系列的参数用于与一个额外设计的内存(一个超大矩阵)做交互。 交互通过三种形式的 Attention-like 想法实现,但大多是可以从传统计算机中获得的改良。…
图片里可以比较清楚地看到几个主要部分:
a) 核心的输入输出和 LSTM
b) 用于和内存交互的一些权重向量
c) 内存:N个位置、字长为W
d) 转移链接矩阵
a) 核心的输入输出和 LSTM
b) 用于和内存交互的一些权重向量
c) 内存:N个位置、字长为W
d) 转移链接矩阵
Data Recombination for Neural Semantic Parsing (Jia and Liang, ACL2016)
http://aclweb.org/anthology/P16-1002
http://aclweb.org/anthology/P16-1002
Vintage NLP for Work
Data Recombination for Neural Semantic Parsing (Jia and Liang, ACL2016) http://aclweb.org/anthology/P16-1002
这篇工作发表于去年 ACL,来自 Stanford 的 Percy Liang 组,做的工作是 Semanic Parsing,即把自然语言的句子转换为对应的形式化表示。
本文亮点不在模型,他们用的是普通的 seq2seq 模型(带 copy 机制),即只是把原始句子和目标表示都看成序列,然后正常训练。
本文亮点是标题的 recombination,这个词原本常用于指染色体的杂交,这里也比较形象,上图中数据集只有红蓝两个句子,但是经过 data recombination 之后就产生了四个杂交出来的句子,再由这四个句子进行训练。
这里的语义杂交用了 SCFG 语法,这是普通 CFG 的变种。在一条 SCFG 语法中,左边一个终结符推导出的右边是一个 tuple,在这里分别是自然语言句子和语义表示的 pair。这样只要能用语法推导找到左边的句子,那么右边的语义就是它对应的 semantic parsing 结果。
但是在本文中学习到的 SCFG 只是用来构造新数据集的,不直接做 Parsing。
首先直接从数据集里获得一个语法,即把数据集的每个 (句子, 语义) 样本放到语法规则中:Root -> (句子, 语义)。
然后通过三种规则,生成一个新语法。
最后从语法里采样,就能得到新数据集用于训练。
这个方法有点类似图像里常用的 data augmentation,但一般而言无论用多少 augmentation 的方法(拉伸、翻转、改变色调),一个猫的图还是一个猫的图。
但这里的方法可以使得新得到的样本的标签(即所需的语义表示序列)也会发生变化。
本文亮点不在模型,他们用的是普通的 seq2seq 模型(带 copy 机制),即只是把原始句子和目标表示都看成序列,然后正常训练。
本文亮点是标题的 recombination,这个词原本常用于指染色体的杂交,这里也比较形象,上图中数据集只有红蓝两个句子,但是经过 data recombination 之后就产生了四个杂交出来的句子,再由这四个句子进行训练。
这里的语义杂交用了 SCFG 语法,这是普通 CFG 的变种。在一条 SCFG 语法中,左边一个终结符推导出的右边是一个 tuple,在这里分别是自然语言句子和语义表示的 pair。这样只要能用语法推导找到左边的句子,那么右边的语义就是它对应的 semantic parsing 结果。
但是在本文中学习到的 SCFG 只是用来构造新数据集的,不直接做 Parsing。
首先直接从数据集里获得一个语法,即把数据集的每个 (句子, 语义) 样本放到语法规则中:Root -> (句子, 语义)。
然后通过三种规则,生成一个新语法。
最后从语法里采样,就能得到新数据集用于训练。
这个方法有点类似图像里常用的 data augmentation,但一般而言无论用多少 augmentation 的方法(拉伸、翻转、改变色调),一个猫的图还是一个猫的图。
但这里的方法可以使得新得到的样本的标签(即所需的语义表示序列)也会发生变化。
Vintage NLP for Work
这篇工作发表于去年 ACL,来自 Stanford 的 Percy Liang 组,做的工作是 Semanic Parsing,即把自然语言的句子转换为对应的形式化表示。 本文亮点不在模型,他们用的是普通的 seq2seq 模型(带 copy 机制),即只是把原始句子和目标表示都看成序列,然后正常训练。 本文亮点是标题的 recombination,这个词原本常用于指染色体的杂交,这里也比较形象,上图中数据集只有红蓝两个句子,但是经过 data recombination 之后就产生了四个杂交出来的句子,再由这四个句子进行训练。…
导出这个 SCFG 用到了三种策略,以 AbstracingEntities 为例。识别上面得到的语法中是否能字符串匹配得到一个带类型的子串,比如图中的 texas 和 state 类型,这样,在语法中就可以加入一条规则:把这个 texas 抽出,并补上对应的 StateId 作为非终结符。然后再加一条新的 StateId -> ("texas", texas) 语法(左边带引号的是字符串,右边是
http://mp.weixin.qq.com/s/MtLcMjL58sROOcXcxKRl1Q
转发一个报告会活动,是选了几个 ACL2017 的入围作者来讲解工作,有兴趣的可以报名看看
时间:2017年4月22日
地点:北京市海淀区知春路49号希格玛大厦地下一层小剧场
主办方:中国中文信息学会青年工作委员会、腾讯高校合作
转发一个报告会活动,是选了几个 ACL2017 的入围作者来讲解工作,有兴趣的可以报名看看
时间:2017年4月22日
地点:北京市海淀区知春路49号希格玛大厦地下一层小剧场
主办方:中国中文信息学会青年工作委员会、腾讯高校合作
COS597C: Advanced Methods in Probabilistic Modeling
https://www.cs.princeton.edu/courses/archive/fall11/cos597C/
- posterior inference with variational methods
- hierarchical modeling for grouped data
- model selection, specification, and checking
- Bayesian nonparametric modeling
https://www.cs.princeton.edu/courses/archive/fall11/cos597C/
- posterior inference with variational methods
- hierarchical modeling for grouped data
- model selection, specification, and checking
- Bayesian nonparametric modeling
Controllable Text Generation
https://arxiv.org/abs/1703.00955
Zhiting Hu, Zichao Yang, Xiaodan Liang, Ruslan Salakhutdinov, Eric P. Xing
https://arxiv.org/abs/1703.00955
Zhiting Hu, Zichao Yang, Xiaodan Liang, Ruslan Salakhutdinov, Eric P. Xing
Vintage NLP for Work
Controllable Text Generation https://arxiv.org/abs/1703.00955 Zhiting Hu, Zichao Yang, Xiaodan Liang, Ruslan Salakhutdinov, Eric P. Xing
本文来自 CMU 的 Eric Xing 老师组。他们组的工作感觉总是很难啃 orz
本文工作是做所谓“受控”文本生成,“受控”体现在他们单独把句子的一些属性作为孤立隐表示(disentangled latent representation)提取出来。这些表示可以独立控制句子的属性,实验中用到了情感、时态两个属性。
即可以把情感单独作为表示的一维提取出来,改变这一维就可以改变所生成句子的情感极性:积极或消极。
类似地,改变时态的那一维就可以控制生成句子是过去时、现在时还是将来时。
因此这样不仅实现了生成受控文本,而且也实现了对句子向量表示的特定维度的解释。
本文工作是做所谓“受控”文本生成,“受控”体现在他们单独把句子的一些属性作为孤立隐表示(disentangled latent representation)提取出来。这些表示可以独立控制句子的属性,实验中用到了情感、时态两个属性。
即可以把情感单独作为表示的一维提取出来,改变这一维就可以改变所生成句子的情感极性:积极或消极。
类似地,改变时态的那一维就可以控制生成句子是过去时、现在时还是将来时。
因此这样不仅实现了生成受控文本,而且也实现了对句子向量表示的特定维度的解释。
Vintage NLP for Work
本文来自 CMU 的 Eric Xing 老师组。他们组的工作感觉总是很难啃 orz 本文工作是做所谓“受控”文本生成,“受控”体现在他们单独把句子的一些属性作为孤立隐表示(disentangled latent representation)提取出来。这些表示可以独立控制句子的属性,实验中用到了情感、时态两个属性。 即可以把情感单独作为表示的一维提取出来,改变这一维就可以改变所生成句子的情感极性:积极或消极。 类似地,改变时态的那一维就可以控制生成句子是过去时、现在时还是将来时。 因此这样不仅实现了生…
以改变时态为例,要做到这一点,就需要保证这一维能且仅能控制句子的时态。
他们用普通的 VAE 保证生成句子的多样性,用一个判别器来控制生成的这个句子确实属于所控制的时态,用一个独立性约束项来保证句子除时态以外的其他一切属性都不归这个维度控制(为了实现这点没有再用一个判别器而是直接复用 VAE 的 encoder 部分)。这样把这三者加起来就得到一个最后的损失函数。
他们用普通的 VAE 保证生成句子的多样性,用一个判别器来控制生成的这个句子确实属于所控制的时态,用一个独立性约束项来保证句子除时态以外的其他一切属性都不归这个维度控制(为了实现这点没有再用一个判别器而是直接复用 VAE 的 encoder 部分)。这样把这三者加起来就得到一个最后的损失函数。