这是一篇在谷歌学术上引用度很高的论文,也是在NLP领域直面核心挑战(阅读理解,也就是让机器阅读,然后能够回答和阅读内容相关的问题)的重磅研究和里程碑,所以这篇文章值得我们好好阅读,这是Karl Moriz Herman等人以谷歌和牛津大学名义联合发表于2015年11月的NIPS。
下图显示的是截至目前的论文被引用的情况,虽然在计算机科学领域,论文的引用数量很容易上去,但是从2015年11月到现在能够达到159,也是很少见的。
文章认为他们工作的主要贡献是定义了一种新的方法来解决机器做阅读理解的瓶颈,并且产生了大规模监督学习的数据。这就为以后制造只需要最小先验语言结构和知识,基于注意力的深度神经网络来阅读文档和回答复杂问题提供了理论和工程基础。
文章开头照例对于这个领域的研究格局做了调研,发现目前研究的方向还是词袋模型(BOW)为核心的信息抽取算法,其能力发展到阅读文档和理解文档还有相当的路要走,目前进展缓慢。这个可以很容易理解,BOW模型是忽略文法和词语之间的关联,布袋装土豆的词频分析法很难谈到去理解文档。因此,要么如同文献【1】采用手工设定规则语法去过滤,要么如同文献【2】使用检测谓词参数三元组的信息提取方法,这些信息可以保存在数据库供后续阅读理解的时候查询。提出了关键问题:
这个领域缺乏有效的监督学习算法,究其原因是缺乏充足的大训练集,同时很难构建灵活学习文档结构的统计模型。
虽然已经证明获取监督学习自然语言阅读理解数据是非常困难的,但是一些如文献【3】【4】,已经尝试了生成合成叙述和查询的方法。这样就能解决数据不够的问题,同时方便研究者能够专注研究某单一算法在仿真场景下的性能。但是,仿真数据总归是无法模拟真实语言的丰富和复杂程度,还包括噪声。所以Karl他们寻求一种新的方法产生监督学习阅读理解数据集。也就是直接使用简单的实体检测和匿名化算法可以能够阅读文档,把摘要,句子释义和相关文档转化为上下文-查询-答案三元组生成语料库。他们通过这个方法生成了两个包含从CNN和每日邮报抓取的一百万新闻报道的语料库。然后再构建吸收了文献【4,6,7,8】研究成果的新型深度学习模型使用这两个语料库。这样的模型可以专注在可以帮助回答问题的那一部分文档,并且可以可视化这个推断过程。为了证明这种模型优越性,Karl他们把这一模型和一系列基于传统语义帧分析的算法做比较,当然结果是令人满意的。
这么好的模型需要详细解读一下。神经网络模型的解读重点在于输入的数据模型和神经网络架构。让我们从数据开始说起。这个监督学习阅读理解的数据模型核心是P(a|c,q),就是答案相对于相关上下文和问题的条件概率。这样才能避免在推断答案的时候需要先验知识,而是能够聚焦到上下文实体之间的关系,也就是上下文-查询和答案三元组。根据文献【9】,这一个领域的工作采取无监督方法,使用模版或者语法或者语义分析器从文档中提取关系元组以形成可以查询的知识图。文献【10,11】的启发,他们通过在线新闻和他们相应的文摘创建了两个机器阅读语料库,包含了CNN的93000篇新闻稿,每日邮报的220000篇报道。这些报道都包含了文章要点或者总结。而且这些总结不是简单的重复报道文字,而是带有一定抽象和概括。Karl他们使用文献【12】研究成果把这些要点文字转化为Cloze形式问题,也就是一次用一个占位符取代一个实体的方法,这样就构造了大约一百万条数据的文档-查询-答案三元组语料库,生成语料库的代码可以在github上找到。
由此,我们可以看到这篇文章的重心是构建一个无需先验知识和可以做阅读理解的语料库。为了理解这种不同的考量,我们来看以下Cloze形式查询例子(都是从每日邮报头条校验数据集里面产生的):a)高科技胸罩帮助你击败乳房X;b)糖精能够打败X吗?c)鱼肝油可以防治前列腺X吗?通过训练的n-gram模型,很容易推断X=癌症,因为这是在语料库中非常频繁的被治愈的实体。
为了防止解决方案退化和聚焦任务,我们使用以下匿名过程和随机化我们的语料库:a)为每一个数据点在同一个参照系中创建关联坐标;b)根据关联坐标把所有实体用抽象实体标记替代;c)在数据点加载时,随机排列实体标记。让我们关注下面这个例子:
显然,对比原文和被替换实体的版本,人是可以很快得出答案。但是,在匿名版本中,需要上下文来回答问题,如同在原始文本中,需要了解文本内容的人来回答。按照这个流程,正确回答问题的唯一策略就是利用每个问题相关的上下文。因此,我们语料库有多少相关上下文,那么阅读理解的能力就有多强。很自然的可以发现,一个实际应用系统会从所有可用的信息源受益,比如通过语言本身的线索或者共现统计。
下表给出了如何度量任务的难度系数,也就是在给定文档中排名前N个实体标记包含的正确答案的数量。Karl他们并没有区分实体标记和常规单词,所以这使得任务更难,当然模型也就更一般化。
论文在阐述了对于更好需求数据集的理由和评估机器阅读模型的任务之后,真正的模型出场了。首先,论文定义了两种简单基线作为评估阅读理解的性能,主线(最大词频)选取在上下文中被观察到最多的实体,而排它主线(排它词频)选取的是在上下文中被观察到最多的,同时并不在问题里的实体。这样做是因为我们相信在一个简单Cloze形式问题里面,占位标记不太可能被重复提及。
NLP模型的管道在传统做法中被用来尝试回答问题,即大量使用语言注释,结构化全局知识,语义解析和类似的NLP管道输出。基于这些手段,我们定义了一系列基于NLP的模型来完成阅读文本。
框架语义解析尝试识别谓词和它相关参数,允许模型访问“谁对谁做了什么”这样的信息。自然地,这种注释有助于问题回答。Karl他们开发了一个基于文献【13,14】研究成果的评估器,主要是使用了框架语义注释来解析我们的模型。他们在未被匿名化的语料库上广泛使用解析器。这里使用框架语义解析并没有显著的好处,因为它仅仅在解析阶段被使用,并不具备一般化语言模型的能力。因此,为达成评估机器理解能力的目的,我们需要从问题q和上下文d中提取实体谓词三元组(e1,V,e2),然后使用一些带有增加的召回/精度均衡的规则来回答问题。这些规则如下图:
为了清楚起见,论文假设所有的PropBank三元组都具有(e1,V,e2)的形式。在实际应用中,会考虑解析器的参数编号,仅仅比较相似的场景,除非在诸如置换的框架规则,因为这个时候不注重顺序。在一个单一规则对应多个kneeing的答案的时候,论文只是随机选择一个。
另一种基线是和词距有关。论文将Cloze问题的占位符合上下文中每一个实体对齐,并且计算与实体周围上下文的距离。通过将问题q中每个字到对齐的答案d的最近的字的距离计算得分。这里对齐定义为既可以是直接匹配单词或者通过共参照系来对齐。论文通过在校验数据集上的每个单词的最大惩罚来调优。
到这里,论文是在解释如何解析文本。下面真正模型化的是神经网络。如同论文里面论述的,神经网络已经广泛的应用于NLP。文献【15】和【16】已经提及了这方面的工作,包括文献【17】提到的通用的翻译模型。论文设定的神经网络模型是用来估计在文档d中回答问题q的单词类型a的概率,公式如下:
这里V是词典,W(a)是第a行的权重矩阵W,单词类型a被重用为索引。注意到,论文并不标明实体和变量,模型需要学习从输入序列中区分它们。函数g(d,g)是返回文档和问题元组的一个向量嵌入。如文献【17】的研究所示,文献【18】研究的LSTM被认为可以用来作为语言翻译和语言建模的工具。在用于翻译的时候,根据文献【19】,深度LSTM能够把长文本序列嵌入到一个向量表示,这个向量表示包含足够信息生成另一种语言的完整翻译。本文会一个单词一个单词的喂给深度LSTM编码器,然后在分隔符后,将问题喂给编码器。相似的,他们还尝试了先把问题喂给编码器,然后再喂文档。这样,编码器是把文档-问题组当作一个完整的单一长序列来处理。对于给定嵌入文档和问题组,网络会推断文档里面的哪一个标记是问题的答案。
这个过程看似简单,实际上包含了很复杂的深度LSTM神经元计算,从输入层到隐藏层,再到输出层,详细的公式如下图:
这里,x(t)是输入,y(t)是输出。||是向量拼接算子,h(t,k)是在时间t时候第k隐藏层上的隐藏态,i,f,o代表着相应的输出,遗忘和输出门。因此,这个深度LSTM编码器就是g(d,g)=y(|d| + |q|),也就是在输入x(t)下,d和q的拼接。
深度LSTM为了能够把问题和答案连接起来,需要在长距离上传递依赖。而固定宽度的隐藏向量形成这个信息流的瓶颈。论文使用文献【6,7】的研究成果来克服这个问题,即引入注意力机制。按照文献【19】的研究,注意力模型首先使用单独的双向单层LSTM来对文档-问题进行编码。一个长度为|q|的问题的编码u可以看成是一个最后前向传播向量和一个反向传播输出向量的拼接。这样就可以对于在位置t的每一个标记输出进行计算。一个文档d的表征r可以看成是它所有输出向量带权重的和。这些权重可以解释成当回答一个问题时候,导向某一特定标记的引导。具体公式如下:
这里yd是文档中标记t集合表征作为其每一列的矩阵。变量s(t)是在标记t的正规化的注意力。对于给定注意分值,文档r的嵌入可以用标记嵌入的权重求和来表示。这个模型通过一个非线性组合器联合文档和问题嵌入来定义如下:
注意力编码器可以看成是回答问题的内存网络应用生成器。模型在使用词袋模型句子层面上使用注意力机制。而注意力编码器在标记层面上使用精细注意力机制,这里的标记是给定他们在输入文档过去和未来上下文的词嵌入。注意力编码器可以聚焦到从问题到答案的路径。我们可以在问题标记被输入的时候,让模型可以重新读入文档。对于每一个问题q的标记i,模型计算双向词嵌入的文档向量r(i)。具体公式如下:
这种允许重载文档标记,并且累计信息来推断答案的方法,称之为无耐心编码器。
这个论文描述了一些模型,接下来在他们的阅读理解语料库中评估这些模型。论文假设是神经模型原则上应该很适合这个任务。然而,他们承认简单的复现模型如LSTM可能没有足够的表达力来解决需要复杂推理的任务。所以,他们期望基于注意的模型将优于纯基于LSTM的方法。
考虑到调查的第二个维度,传统与神经方法之间的比较,没有强烈的先前倾向于神经网络。虽然在过去几年的许多出版物已经证明神经模型胜过经典方法,仍然不清楚其中有多少是语言建模能力的固有的问题,多少事任何神经模型的作用。这里呈现的任务的实体匿名化和置换方面可以在这方面最终平衡游戏场,有利于能够处理语法而不仅仅是语义的模型。
考虑到这些考虑,实验部分设计有三个目标。首先,要通过应用广泛的模型来确定机器阅读任务的难度。第二,比较基于解析的方法与神经模型的性能。第三,在检查的神经模型组中,想要确定每个组件对最终性能的贡献;也就是说,想要分析LSTM可以解决这个任务的程度,以及各种关注机制在多大程度上影响性能。
所有模型的超参数都在两个语料库的相应验证集上进行调整。实验结果在下表中,注意力和无耐心编码器在两个数据集中表现最好。
训练机器阅读和理解模型的监督范式为建立完整的自然语言理解系统的路径提供了一个有前途的途径。本文已经证明了一种用于获得大量文档 - 问题 - 答案三元组的方法,并且示出了基于循环和注意力的神经网络为该任务提供有效的建模框架。分析表明,注意力和无耐心的编码器能够传播和集成远距离的语义信息。特别是,我们认为纳入注意机制是这些结果的关键贡献者。
我们使用的注意机制只是一个非常一般的想法的一个实例,可以进一步利用。然而,并入世界知识和多文档查询也将需要注意和嵌入机制的发展,其查询的复杂性不与数据集大小线性地缩放。仍然有许多查询需要复杂的推理和长距离参考分辨率,我们的模型还不能回答。因此,我们的数据提供了一个可扩展的挑战,应该支持NLP对未来的研究。此外,使用我们描述的技术可以获得显着更大的训练数据集,无疑允许我们训练更多的表达和准确的模型。
这篇文章比较难懂,涉及到的模型都是比较新的模型,因此在阅读的时候需要把相关论文也要拿来读,因此花费的时候相对就长很多。
看完文章,我们更关注的是代码实现,这是投入实战的关键。代码的实现,我会另外单独写一篇。
网友评论