博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论文解读 | QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION
阅读量:4289 次
发布时间:2019-05-27

本文共 5698 字,大约阅读时间需要 18 分钟。

单位 : 燕山大学

作者 : 王 琴

摘 要

  当前使用端到端方法的机器阅读和问答 (Q&A) 模型主要是基于具有注意力的循环神经网络(RNN)。这种方法的确取得了很大的成功,但由于 RNN 的顺序性,这些模型在训练和推理方面通常都很慢。因此作者提出了一种新的问答架构,称为 QANet,它不需要循环网络,编码器完全由卷积和自注意力构成。其中,卷积对局部关系进行建模,使用自注意力对全局关系进行建模。在 SQuAD 数据集上,此模型的训练速度是RNN的 3倍到13 倍,其推理速度提高 4 到 9 倍,并同时能达到与RNN模型相当的准确性。这些优点能让更多的数据参与训练,因此,本文还加入了使用机器翻译模型反向翻译生成的数据。在 SQuAD 数据集上,使用数据增强训练的单一模型在测试集上的F1达到了84.6。这明显优于已发布的最佳 F1 分数 81.8。

1 介 绍

  在过去几年中,端到端模型取得了重大进展,在许多具有挑战性的数据集上显示出很好的结果。它们通常采用两个关键要素:(1) 一个循环模型来处理顺序输入, (2) 一个注意力组件来处理长期交互。BiDAF模型便是这两者的成功组合,并在 SQuAD 数据集上取得了很好的结果。但这些模型的一个缺点是,它们在训练和推理方面通常都很慢,尤其是对于长文本。这不仅导致实验的周转时间长,而且还限制了模型应用于更大的数据集。同时,缓慢的推理限制了机器理解系统在实时应用程序中的表现。

  在本文中,为了使机器理解更快消除了这些模型的循环性,转而使用卷积和自注意力来构建编码器,分别对问题和上下文进行编码。 然后通过标准的注意力机制学习上下文和问题之间的相互作用。在此编码器上再次编码一层,并在之后结合每个位置作为答案开始或结束概率的编码信息,作者称这种架构为 QANet,如图 1 所示。

在这里插入图片描述
  本文模型设计的原因如下:卷积捕获文本的局部结构,而自注意力学习每对单词之间的全局关系。添加的context-query attention是一个用于为文本中的每个位置构建 query-aware 向量的模块,用于后续建模层。此架构的前馈特性显着加快了模型的运行速度。在对 SQuAD 数据集进行的实验中,QANet模型在训练中快了 3 到 13 倍,在推理中快了 4 到 9 倍。作为一个简单的比较,QANet可以在 3 小时的训练内达到与 BiDAF 模型相同的准确度(77.0 F1 分数),原来需要花费 15 小时。提速还允许使用更多的迭代来训练模型,以获得更好的结果。例如,如果训练了18 小时,它在开发集上的 F1 分数为 82.7,这比BiDAF 模型好得多,并且与发布的最佳结果相当。由于此模型速度很快, 为了进一步改进模型,作者引入了数据增强技术来增强训练数据。 该技术通过将原始句子从英语翻译成另一种语言,然后再翻译回英语得到新样本,这不仅增加了训练文本的数量,而且还使措辞多样化。

  在 SQuAD 数据集上,使用数据增强训练的 QANet 在测试集上获得了 84.6 的F1 分数,明显优于之前发布的 81.8 结果。 作者还进行了消融测试,以证明模型的每个模块的有效性。 综上所述,本文的贡献如下:

  • 提出了一种高效的阅读理解模型,该模型完全建立在卷积和自我注意的基础上。与 RNN 相比,这种组合保持了良好的准确性,同时实现了高达 13 倍的训练加速和 9 倍的每次训练迭代。 加速增益使得此模型成为扩展到更大数据集的最有希望的候选模型。
  • 为了改进在 SQuAD 上的结果,提出了一种新的数据增强技术,通过释义来丰富训练数据。 它实现了比当前最好的的模型更高的准确度。

2 模 型

2.1 问题形成

  本文中的阅读理解任务定义是给定一个包含 n 个单词的上下文段落 C = {c1, c2, …, cn} 和包含 m 个单词 Q = {q1, q2, …, qm} 的询问语句,输出来自 C的S = {ci ,ci+1,…,ci+j}。 以下将使用 x 表示原始单词及其嵌入向量。

2.2 模型概述

  此模型的结构类似于大多数现有模型,包含五个主要模块:嵌入层、嵌入编码层、注意力层、模型编码层和输出层,如图 1 所示。作者的方法与其他方法的主要区别如下:对于嵌入和模型编码层,只使用卷积和自注意力机制,丢弃了大多数现有阅读理解模型使用的 RNN。 因此,模型的训练要快得多,因为它可以并行处理输入标记。尽管自注意力已经广泛使用,但卷积和自注意力的组合却是新颖的,并且明显优于单独的自注意力,在实验中使得F1提升了2.7。 作者还利用了 ConvNet 中常见的正则化方法,例如随机深度(layer dropout),这使得实验中的F1提高了 0.2 。

  1. 输入嵌入层: 通过词嵌入和字符嵌入来获得每个词 w 的嵌入。词向量在训练期间是固定的,并使用 p1 = 300 维的 GloVe模型形成的词向量来初始化。不在词汇表中的词将置为 ,并随机初始化。字符嵌入的获得方式如下:每个字符表示为维度 p2 = 200 的可训练向量,这意味着每个单词都可以被视为字符向量的串联。然后取单词中的最大长度作为每个单词的固定大小。最后,该层给定单词 x 的输出是连接 [xw;xc] ∈ Rp1+p2,其中 xw和xc 分别是 x 的词嵌入和经过卷积的字符嵌入。作者还在此表示之上采用了两层highway network

  2. 嵌入编码层: 由多个以下结构的编码器块组成的:[卷积层 × # + 自注意力层 + 前馈层],如图 1 右上方所示。作者不是使用传统的卷积而是使用深度可分离卷积,因为它具有内存效率和更好的泛化能力。kernel size设为 7,filter的数量设为 d = 128,一个块内的卷积层数量为 4。对于自注意力层,采用了多头注意力机制,对于输入中的每个位置,根据其和文本之间的相似性计算输入中所有位置的加权和,由点积测量。在所有层中,头的数量是为8 。这些基本操作都被放置在一个残差块内,如图 1 右下角所示。对于输入 x 和给定的操作 f,输出是 f (layernorm(x)) + x,意味着从每个块的输入到输出有一个完整的识别路径,其中 layernorm 是层归一化。编码器块的总数为 1。请注意,该层的输入是每个单词的维度为 p1 + p2 = 500 的向量,通过一维卷积立即映射到 d = 128维。该层的输出的维度也是 d = 128

  3. 注意力层。 该模块在几乎所有以前的阅读理解模型中都有使用。 构造如下:首先计算每对上下文和问题之间的相似性,得到相似性矩阵 S ∈ Rn×m。 然后通过应用 softmax 函数对 S 的每一行进行归一化,得到一个矩阵 S ‾ \overline{\text{S}} S。这里使用的相似函数是trilinear 函数,然后上下文到查询的注意力计算为:

在这里插入图片描述

  其中 ⊙ 是矩阵乘法,W0是可训练变量。大多数高性能模型还使用某种形式的query-to-context注意力机制,例如 BiDaF和 DCN。 根据经验,作者发现 DCN 注意力可以比简单地应用注意力好一些,因此采用了这种策略。

  1. 模型编码器层: 该层的每个位置输入为[c,a,c⊙a,c⊙b],其中a和b分别为注意力矩阵A和B中的一行。参数与嵌入编码器层,除了一个块内的卷积层数为 2,编码器块的总数为 7,在每3个模型编码器的之间共享权重。

  2. 输出层: 该层因任务而异。 SQuAD 中每个示例的答案都包含在上下文中,因此 作者采用了预测上下文中每个位置作为答案开始或结束的概率的方法。

3 反向翻译数据增强

  由于此模型速度很快,可以用更多的数据来训练它, 因此,作者将模型与简单的数据增强技术相结合,以丰富训练数据。 主要使用两种翻译模型,一种是从英语到法语(或任何其他语言)的翻译模型,另一种是从法语到英语的翻译模型,以获得文本的释义。 这种方法有助于自动增加任何基于语言的任务的训练数据量,增强过程如图 2 所示。

在这里插入图片描述

  作者在英语-法语(3600万句对)和英语-德语(450万句对)的公共WMT数据上训练了4层的GNMT模型。在 newstest2014 上实现了英语到法语36.7 的BLEU分数和 法语到英语35.9 的BLEU分数。

  在处理 SQuAD 文本和答案时,由于SQuAD 的每个训练示例都是 (d, q, a) 的三元组,其中文档 d 是答案为 a 的多句段落。 释义时,应保持问题 q 不变(以避免意外改变其含义)并生成 (d’, q, a’) 的新三元组,并保持新文档 d’ 中包含新的答案 a’。 该过程分两步进行:(i) 文本释义——将 d 释义为 d’ , (b) 答案提取——从 d’ 中提取 与 a 匹配的a’。表 1 显示了找到的新答案的过程示例。

在这里插入图片描述

4 实 验

  作者在文中对 SQuAD 数据集和 TriviaQA 数据集分别进行了实验,由于TriviaQA数据集有很大的噪声,在此不做详细介绍,但作者的模型在TriviaQA 数据集上也能取得较好的效果。以下详细介绍在 SQuAD 数据集上的表现情况。

4.1.数据集和实验设置

数据集: SQuAD 包含 107.7K 问题-答案对,其中 87.5K 用于训练,10.1K 用于验证,另外 10.1K 用于测试。段落的长度约为 250,问题的长度是 10 。只有训练和验证数据是公开可用的,测试数据是隐藏的,必须将代码提交给 Codalab 才能得到最终测试分数。为了进一步分析,作者只提供了验证集的性能。但根据实验和先前工作的观察结果,验证集分数与测试集成绩基本相当。

数据预处理: 生成了从第 3 节获得的两个额外的增强数据集,其中分别包含 140K 和 240K 的样本,分别表示为“数据增强 × 2”和“数据增强 × 3”,它们都包括原始数据。

4.2 结 果

准确性: F1 和精确匹配 (EM) 是模型性能准确性的两个评估指标。 F1 测量预测答案和真值之间的重叠标记部分,如果预测与真值完全相同,则精确匹配分数为1,否则为0。表 2 中显示了其与其他方法进行比较的结果。公平起见,作者都记录了他们最新论文中已发表的结果以及排行榜上更新但未记录的结果。从表中可以看出,本文提出的模型的准确率 (EM/F1) 性能与最先进的模型相当。特别是,作者在原始数据集上训练的模型在 EM 和 F1 分数方面优于文献中所有记录的结果(参见表 2 的第二列)。当使用适当增强数据进行训练时,本文模型可以在 EM/F1 上获得 1.5/1.1 的显著增益。最后,在官方测试集上的结果是 76.2/84.6,明显优于所记录的最好结果 73.2/81.8。

在这里插入图片描述

对 RNN 的加速:为了测量本文所提模型相对于 RNN 模型的加速,作者还测试了相应的模型架构,其中每个编码器块替换为大多数现有模型中使用的双向 LSTM 堆栈。具体来说,是将每个(嵌入和模型)编码器块分别替换为 1、2 或 3 层双向 LSTM。所有这些 LSTM 的隐藏大小均为 128。加速比较的结果如表 3 所示。可以很容易地看到,QANet明显快于所有基于 RNN 的模型,并且训练速度提升了3 到 13 倍,推理速度提升了4到 9 倍。

在这里插入图片描述

BiDAF 模型的加速: 此外,作者还使用相同的硬件,比较了QANet模型与 BiDAF 模型 (SQuAD 上基于 RNN 的经典模型)获得相同性能的训练时间。 结果如表 4 所示,表明本文的模型在训练和推理速度上比 BiDAF 快 4.3 倍和 7.0 倍。 此外,只需要五分之一的训练时间即可在开发集上获得 BiDAF 的最佳 F1 分数(77.0)。

在这里插入图片描述

4.3 消融研究与分析

  作者对所提出模型的组件进行消融研究,并研究增强数据的效果。 验证集上的分数如表 5 所示。从表中可以看出,在编码器中使用卷积是至关重要的,如果去掉 ,F1 和 EM都会急剧下降近 3%。 编码器中的自注意力也是一个必要的组件,它为最终性能贡献了 1.4/1.3 的 EM/F1 增益。 作者将这些现象解释如下:卷积捕获上下文的局部结构,而自注意力能够模拟文本之间的全局交互。 因此,它们是互补的,但不能相互替代。 使用可分离卷积代替传统卷积对性能也有突出贡献,这可以从将可分离卷积替换为普通卷积导致的精度稍差可见一斑。

在这里插入图片描述

4.4 稳健性研究

  作者还在对抗性 SQuAD 数据集上进行了实验,以研究模型的稳健性。 在这个数据集中,一个或多个句子被附加到测试集的原始 SQuAD 上下文中,故意误导训练模型产生错误的答案。 然而,该模型在训练期间对那些对抗性示例是不可知的。 主要关注两种类型的误导性句子,即 AddSent 和 AddOneSent。 AddSent 生成与问题相似但与正确答案不矛盾的句子,而 AddOneSent 添加一个随机的句子,它不一定与上下文相关。

  在此使用的模型正是使用原始 SQuAD 数据训练的模型(在测试集上获得 84.6 F1 的模型)。结果如表 6 所示,同样只比较了单个模型的性能。 从表 6 中可以看到本文模型与最先进的模型 Mnemonic 相当,但明显优于其他模型。 模型的鲁棒性可能是因为它是用增强数据训练的。

在这里插入图片描述

6 结 论

  在本文中,作者提出了一种用于机器阅读理解的快速而准确的端到端模型—— QANet。 本文的核心创新是完全去除编码器中的循环网络。 生成的模型是完全前馈的,完全由可分离的卷积、注意力、线性层和归一层化组成,适合并行计算。 生成的模型既快速又准确:它超过了 SQuAD 数据集上发布的最佳结果,同时最高可比用于训练/推理迭代的循环模型快 13/9 倍。 此外,作者还发现通过利用数据增强可以获得显着的收益。

论文地址 :

转载地址:http://jemgi.baihongyu.com/

你可能感兴趣的文章
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>
Spring Boot 中使用一个注解轻松将 List 转换为 Excel 下载
查看>>
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
一口气说出 6种 延时队列的实现方案,大厂offer稳稳的
查看>>
原来redis这么简单,跟着文章操作一遍你就会了
查看>>
Redis两种持久化机制RDB和AOF详解(面试常问,工作常用)
查看>>
事务隔离级别中的可重复读能防幻读吗?
查看>>
老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
查看>>
图片的左右切换
查看>>
进级的RecyclerView——LRecyclerView
查看>>
Android 利用Gradle实现app的环境分离
查看>>