## ACL 2017精选论文 涉及自然语言处理、人工智能、机器学习等诸多理论以及技术的顶级会议——第55届计算语言学年会(The 55th Annual Meeting of the Association for Computational Linguistics,简称 ACL 会议)于今年7月31日-8月4日在加拿大温哥华(Vancouver)举行。从近期谷歌学术(Google Scholar)公布的学术杂志和会议排名来看,ACL 依然是最重要的自然语言处理相关的人工智能会议。因为这个会议的涵盖面非常广泛,且理论文章较多,一般的读者很难从浩如烟海的文献中即刻抓取到有用信息,这里笔者从众多文章中精选出5篇有代表性的文章,为读者提供思路。 #### Multimodal Word Distributions **摘要:本文的核心思想为如何用 Gaussian Mixture Model 来对 Word Embedding 进行建模,从而可以学习文字的多重表达。这篇文章值得对 Text Mining 有兴趣的读者泛读。** 文章作者 Ben Athiwaratkun 是康奈尔大学统计科学系的博士生。Andrew Gordon Wilson 是新加入康奈尔大学 Operation Research 以及 Information Engineering 的助理教授,之前在卡内基梅隆大学担任研究员,师从 Eric Xing 和 Alex Smola 教授,在之前,其在 University of Cambridge的Zoubin Ghahramani 手下攻读博士学位。 这篇文章主要研究 Word Embedding,其核心思想是想用 Gaussian Mixture Model 表示每一个 Word 的 Embedding。最早的自然语言处理(NLP)是采用了 One-Hot-Encoding 的 Bag of Word 的形式来处理每个字。这样的形式自然是无法抓住文字之间的语义和更多有价值的信息。那么,之前 Word2Vec 的想法则是学习一个每个 Word 的 Embedding,也就是一个实数的向量,用于表示这个 Word 的语义。当然,如何构造这么一个向量又如何学习这个向量成为了诸多研究的核心课题。 在 ICLR 2015会议上,来自 UMass 的 Luke Vilnis 和 Andrew McCallum 在“Word Representations via Gaussian Embedding”文章中提出了用分布的思想来看待这个实数向量的思想。具体说来,就是认为这个向量是某个高斯分布的期望,然后通过学习高斯分布的参数(也就是期望和方差)来最终学习到 Word 的 Embedding Distribution。这一步可以说是扩展了 Word Embedding 这一思想。然而,用一个分布来表达每一个字的最直接的缺陷则是无法表达很多字的多重意思,这也就带来了这篇文章的想法。文章希望通过 Gaussian Mixture Model 的形式来学习每个 Word 的 Embedding。也就是说,每个字的 Embedding 不是一个高斯分布的期望了,而是多个高斯分布的综合。这样,就给了很多 Word 多重意义的自由度。在有了这么一个模型的基础上,文章采用了类似 Skip-Gram 的来学习模型的参数。具体说来,文章沿用了 Luke 和 Andrew 的那篇文章所定义的一个叫 Max-margin Ranking Objective 的目标函数,并且采用了 Expected Likelihood Kernel 来作为衡量两个分布之间相似度的工具。这里就不详细展开了,有兴趣的读者可以精读这部分细节。 文章通过 UKWAC 和 Wackypedia 数据集学习了所有的 Word Embedding。所有试验中,文章采用了 K=2 的 Gaussian Mixture Model(文章也有 K=3 的结果)。比较当然有之前 Luke 的工作以及其他各种 Embedding 的方法,比较的内容有 Word Similarity 以及对于 Polysemous 的字的比较。总之,文章提出的方法非常有效果。这篇文章因为也有源代码(基于 Tensorflow),推荐有兴趣的读者精读。 #### Topically Driven Neural Language Model **摘要:文章的核心思想,也是之前有不少人尝试的,就是把话题模型(Topic Model)和语言模型(Language Model)相结合起来。这里,两种模型的处理都非常纯粹,是用“地道”的深度学习语言构架完成。用到了不少流行的概念(比如 GRU、Attention 等),适合文字挖掘的研究人员泛读。** 文章的作者是来自于澳大利亚的研究人员。第一作者 Jey Han Lau 目前在澳大利亚的 IBM 进行 Topic Model 以及 NLP 方面的研究,之前也在第二作者 Timothy Baldwin 的实验室做过研究。第二作者 Timothy Baldwin 和第三作者 Trevor Cohn 都在墨尔本大学长期从事 NLP 研究的教授。 这篇文章的核心思想是想彻底用 Neural 的思想来结合 Topic Model 和 Language Model。当然,既然这两种模型都是文字处理方面的核心模型,自然之前就有人曾经想过要这么做。不过之前的不少尝试都是要么还想保留 LDA 的一些部件或者往传统的 LDA 模型上去靠,要么是并没有和 Language Model 结合起来。 文章的主要卖点是完全用深度学习的“语言”来构建整个模型,并且模型中的 Topic Model 模型部分的结果会成为驱动 Language Model 部分的成分。概括说来,文章提出了一个有两个组成部分的模型的集合(文章管这个模型叫 tdlm)。第一个部分是 Topic Model 的部分。我们已经提过,这里的 Topic Model 和 LDA 已相去甚远。思路是这样的,首先,从一个文字表达的矩阵中(有可能就直接是传统的 Word Embedding),通过 Convolutional Filters 转换成为一些文字的特征表达(Feature Vector)。文章里选用的是线性的转换方式。这些 Convolutional Filters 都是作用在文字的一个 Window 上面,所以从概念上讲,这一个步骤很类似 Word Embedding。得到这些 Feature Vector 以后,作者们又使用了一个 Max-Over-Time 的 Pooling 动作(也就是每一组文字的 Feature Vector 中最大值),从而产生了文档的表达。注意,这里学到的依然是比较直接的 Embedding。然后,作者们定义了一组 Topic 的产生形式。首先,是有一个“输入 Topic 矩阵”。这个矩阵和已经得到的文档特征一起,产生一个 Attention 的向量。这个 Attention 向量再和“输出 Topic 矩阵”一起作用,产生最终的文档 Topic 向量。这也就是这部分模型的主要部分。 最终,这个文档 Topic 向量通过用于预测文档中的每一个字来被学习到。有了这个文档 Topic 向量以后,作者们把这个信息用在了一个基于 LSTM 的 Language Model 上面。这一部分,其实就是用了一个类似于 GRU 的功能,把 Topic 的信息附加在 Language Model 上。文章在训练的时候,采用了 Joint 训练的方式,并且使用了 Google 发布的 Word2Vec 已经 Pre-trained 的 Word Embedding。所采用的种种参数也都在文章中有介绍。 文章在一些数据集上做了实验。对于 Topic 部分来说,文章主要和 LDA 做比较,用了 Perplexity 这个传统的测量,还比较了 Topic Coherence 等。总体说来,提出的模型和 LDA 不相上下。从 Language Model 的部分来说,提出的模型也在 APNews、IMDB 和 BNC 上都有不错的 Perplexity 值。总体说来,这篇文章值得文字挖掘的研究者和 NLP 的研究者泛读。 #### Towards End-to-End Reinforcement Learning of Dialogue Agents for Information Access **摘要:文章介绍如何进行端到端(End-to-End)的对话系统训练,特别是有数据库或者知识库查询步骤的时候,往往这一步“硬操作”阻止了端到端的训练流程。这篇文章介绍了一个“软查询”的步骤,使得整个流程可以能够融入训练流程。不过从文章的结果来看,效果依然很难说能够在实际系统中应用。可以说这篇文章有很强的学术参考价值。** 文章作者群来自于微软研究院、卡内基梅隆大学和台湾国立大学。文章中还有 Lihong Li和 Li Deng(邓力)这样的著名学者的影子。第一作者 Bhuwan Dhingra 是在卡内基梅隆大学 William W. Cohen 和 Ruslan Salakhutdinov 的博士学生,两位导师都十分有名气。而这个学生这几年在 NLP 领域可以说是收获颇丰:在今年的 ACL 上已经发表2篇文章,在今年 ICLR 和 AAAI 上都有论文发表。 文章的核心思想是如何训练一个多轮(Multi-turn)的基于知识库(Knowledge Base)的对话系统。这个对话系统的目的主要是帮助用户从这个知识库中获取一些信息。那么,传统的基于知识库的对话系统的主要弊病在于中间有一个步骤是对于“知识库的查询”。也就是说,系统必须根据用户提交的查询(Query),进行分析并且产生结果。这一步,作者们称为“硬查询”(Hard-Lookup)。虽然这一步非常自然,但是阻断了(Block)了整个流程,使得整个系统没法“端到端”(End-to-End)进行训练。并且,这一步由于是“硬查询”,并没有携带更多的不确定信息,不利于系统的整体优化。 这篇文章其实就是想提出一种“软查询”,从而让整个系统得以“端到端”(End-to-End)进行训练。这个新提出的“软查询”步骤,和强化学习(Reinforcement Learning)相结合,共同完成整个回路,从而在这个对话系统上达到真正的“端到端”。这就是整个文章的核心思想。那么,这个所谓的“软查询”是怎么回事?其实就是整个系统保持一个对知识库中的所有本体(Entities)所可能产生的值的一个后验分布(Posterior Distribution)。也就是说,作者们构建了这么一组后验分布,然后可以通过对这些分布的更新(这个过程是一个自然获取新数据,并且更新后验分布的过程),来对现在所有本体的确信度有一个重新的估计。这一步的转换,让对话系统从和跟知识库直接打交道,变成了如何针对后验分布打交道。 显然,从机器学习的角度来说,和分布打交道往往容易简单很多。具体说来,系统的后验分布是一个关于用户在第 T 轮,针对某个值是否有兴趣的概率分布。整个对话系统是这样运行的。首先,用户通过输入的对话(Utterance)来触发系统进行不同的动作(Action)。动作空间(Action Space)包含向用户询问某个 Slot 的值,或者通知用户目前的结果。整个系统包含三个大模块: Belief Trackers、Soft-KB Lookup,以及 Policy Network。Belief Trackers 的作用是对整个系统现在的状态有一个全局的掌握。这里,每一个 Slot 都有一个 Tracker,一个是根据用户当前的输入需要保持一个对于所有值的 Multinomial 分布,另外的则是需要保持一个对于用户是否知道这个 Slot 的值的置信值。文章中介绍了 Hand-Crafted Tracker 和 Neural Belief Tracker(基于GRU)的细节,这里就不复述了。有了 Tracker 以后,Soft-KB Lookup 的作用是保持一个整个对于本体的所有值得后验分布。最后,这些后验概率统统被总结到了一个总结向量(Summary Vector)里。这个向量可以认为是把所有的后验信息给压缩到了这个向量里。而 Policy Network 则根据这个总结向量,来选择整个对话系统的下一个动作。这里文章也是介绍了 Hand-Crafted 的 Policy 和 Neural Policy 两种情况。整个模型的训练过程还是有困难的。虽然作者用了 REINFORCE 的算法,但是,作者们发现根据随机初始化的算法没法得到想要的效果。于是作者们采用了所谓的 Imitation Learning 方法,也就是说,最开始的时候去模拟 Hand-Crafted Agents 的效果。 在这篇文章里,作者们采用了模拟器(Simulator)的衡量方式。具体说来,就是通过与一个模拟器进行对话从而训练基于强化学习的对话系统。作者们用了 MovieKB 来做数据集。总体说来整个实验部分都显得比较“弱”。没有充足的真正的实验结果。整个文章真正值得借鉴主要是“软查询”的思想,整个流程也值得参考。但是训练的困难可能使得这个系统作为一个可以更加扩展的系统的价值不高。本文值得对对话系统有研究的人泛读。 #### Learning to Skim Text **摘要:这篇文章主要介绍如何在 LSTM 的基础上加入跳转机制,使得模型能够去略过不重要的部分,而重视重要的部分。模型的训练利用了强化学习。这篇文章建议对文字处理有兴趣的读者精读。** 作者群来自 Google。第一作者来自卡内基梅隆大学的 Adams Wei Yu 在 Google 实习的时候做的工作。第三作者 Quoc V. Le 曾是 Alex Smola 和 Andrew Ng 的高徒,在 Google 工作期间有很多著名的工作,比如 Sequence to Sequence Model 来做机器翻译(Machine Translation)等。 文章想要解决的问题为“Skim Text”。简单说来,就是在文字处理的时候,略过不重要的部分,对重要的部分进行记忆和阅读。要教会模型知道在哪里需要略过不读,哪里需要重新开始阅读的能力。略过阅读的另外一个好处则是对文字整体的处理速度明显提高,而且很有可能还会带来质量上的提升(因为处理的噪声信息少了、垃圾信息少了)。 具体说来,文章是希望在 LSTM 的基础上加入“跳转”功能,从而使得这个时序模型能够有能力判读是否要略过一部分文字信息。简单说来,作者们是这么对 LSTM 进行改进的。首先,有一个参数 R 来确定要读多少文字。然后模型从一个 0 到 K 的基于 Multinomial 分布的这一个跳转机制中决定当前需要往后跳多少文字(可以是0,也就是说不跳转)。这个是否跳转的这一个步骤所需要的Multinomial分布,则也要基于当期 LSTM 的隐参数信息(Hidden State)。跳转决定以后,根据这个跳转信息,模型会看一下是否已经达到最大的跳转限制 N。如果没有则往后跳转。当所有的这些步骤都走完,达到一个序列(往往是一个句子)结尾的时候,最后的隐参数信息会用来对最终需要的目标(比如分类标签)进行预测。 文章的另一个创新点,就是引入了强化学习(Reinforcement Learning)到模型的训练中。最终从隐参数到目标标签(Label)的这一步往往采用的是 Cross Entropy 的优化目标函数。这一个选择很直观,也是一个标准的步骤。然而,如何训练跳转的 Multinomial 分布,因为其离散(Discrete)特质,则成为文章的难点。原因是 Cross Entropy 无法直接应用到离散数据上。那么,这篇文章采取的思路是把这个问题构造成为强化学习的例子,从而使用最近的一些强化学习思路来把这个离散信息转化为连续信息。具体说来,就是采用了 Policy Gradient 的办法,在每次跳转正确的时候,得到一个为+1的反馈,反之则是-1。这样就把问题转换成为了学习跳转策略的强化学习模式。文章采用了 REINFORCE 的算法来对这里的离散信息做处理。从而把 Policy Gradient 的计算转换为了一个近似逼近。这样,最终的目标函数来自于三个部分:第一部分是 Cross Entropy,第二部分是 Policy Gradient 的逼近,第三部分则是一个Variance Reduction 的控制项(为了优化更加有效)。整个目标函数就可以完整得被优化了。 文章在好多种实验类型上做了实验,主要比较的就是没有跳转信息的标准的 LSTM。其实总体上来说,很多任务(Task)依然比较机械和人工。比如最后的用一堆句子,来预测中间可能会出现的某个词的情况,这样的任务其实并不是很现实。但是,文章中提到了一个人工(Synthetic)的任务还蛮有意思,那就是从一个数组中,根据下标为0的数作为提示来跳转取得相应的数作为输出这么一个任务。这个任务充分地展示了 LSTM 这类模型,以及文章提出的模型的魅力:第一,可以非常好的处理这样的非线性时序信息,第二,文章提出的模型比普通的 LSTM 快不少,并且准确度也提升很多。 总体说来,这篇文章非常值得对时序模型有兴趣的读者精读。文章的“Related Work”部分也很精彩,对相关研究有兴趣的朋友可以参考这部分看看最近都有哪些工作很类似。 #### From Language to Programs: Bridging Reinforcement Learning and Maximum Marginal Likelihood **摘要:这篇文章要解决的问题是如何从一段文字翻译成为“程序”的问题,文章适合对 Neural Programming 有兴趣的读者泛读。** 作者群来自斯坦福大学。主要作者来自 Percy Liang 的实验室。最近几年 Percy Liang 的实验室可以说收获颇丰,特别是在自然语言处理和深度学习的结合上都有不错的显著成果。 这篇文章里有好一些值得关注的内容。首先从总体上来说,这篇文章要解决的问题是如何从一段文字翻译成为“程序”的问题,可以说是一个很有价值的问题。如果这个问题能够可以容易解决,那么我们就可以教会计算机编写很多程序,而不一定需要知道程序语言的细微的很多东西。从细节上说,这个问题就是给定一个输入的语句,一个模型需要把目前的状态转移到下一个目标状态上。难点在于,对于同一个输入语句,从当前的状态到可能会到达多种目标状态。这些目标状态都有可能是对当前输入语句的一种描述。但是正确的描述其实是非常有限的,甚至是唯一的。那么,如何从所有的描述中,剥离开不正确的,找到唯一的或者少量的正确描述,就成为了这么一个问题的核心。 文章中采用了一种 Neural Encoder-Decoder 模型架构。这种模型主要是对序列信息能够有比较好的效果。具体说来,是对于现在的输入语句,首先把输入语句变换成为一个语句向量,然后根据之前已经产生的程序状态,以及当前的语句向量,产生现在的程序状态。在这个整个的过程中,对于 Encoder 作者们采用了 LSTM 的架构,而对于 Decoder 作者们采用了普通的 Feed-forward Network(原因文章中是为了简化)。 另外一个比较有创新的地方就是作者们把过于已经产生程序状态重新 Embedding 化(作者们说是叫 Stack)。这有一点模仿普通数据结构的意思。那么,这个模型架构应该是比较经典的。文章这时候引出了另外一个本文的主要贡献,那就是对模型学习的流程进行了改进。为了引出模型学习的改进,作者们首先讨论了两种学习训练模式的形式,那就是强化学习(Reinforcement Learning)以及 MML(Maximum Marginal Likelihood)的目标函数的异同。文章中提出两者非常类似,不过比较小的区别造成了 MML 可以更加容易避开错误程序这一结果。文章又比较了基于 REINFORCE 算法的强化学习以及基于 Numerical Integration 以及 Beam Search 的 MML 学习的优劣。总体说来,REINFORCE 算法对于这个应用来说非常容易陷入初始状态就不太优并且也很难 Explore 出来的情况。MML 稍微好一些,但依然有类似问题。文章这里提出了 Randomized Beam Search 来解决。也就是说在做 Beam Search 的时候加入一些 Exploration 的成分。另外一个情况则是在做 Gradient Updates 的时候,当前的状态会对 Gradient 有影响,也就是说,如果当前状态差强人意,Gradient 也许就无法调整到应该的情况。这里,作者们提出了一种叫 Beta-Meritocratic 的 Gradient 更新法则,来解决当前状态过于影响 Gradient 的情况。 实验的部分还是比较有说服力的,详细的模型参数也一应俱全。对于提出的模型来说,在三个数据集上都有不错的表现。当然,从准确度上来说,这种从文字翻译到程序状态的任务离真正的实际应用还有一段距离。这篇文章适合对于最近所谓的 Neural Programming 有兴趣的读者泛读。对怎么改进强化学习或者 MML 有兴趣的读者精读。文章的“Related Work”部分也是非常详尽,有很多工作值得参考。