Gated-Attention Readers for Text Comprehension

article/2025/11/1 11:58:44

bDNQFx.png

Gated-Attention Readers for Text Comprehension

文本理解中的门控attention阅读器

code

Abstract

本文研究的是完形填空问题式MRC,作者提出的门控注意力阅读器集中了多跳结构和一种新的注意力计算机制(基于query嵌入和RNN文档阅读器中间状态之间的乘积计算),这使阅读器能够在文档中构建特定于query的token表示形式。

1 Introduction

最近MRC模型的成功主要归因于两个原因:(1)多跳架构,允许模型迭代地扫描文档和问题以获得多次跳转。(2)注意力机制,使模型能够专注于上下文适当的子部分。直观地说,多跳体系结构允许reader递增地改进token表示,并且注意力机制根据文档中不同部分与query的相关性来重新加权文档中的不同部分。本文设计了一种新颖的注意力机制将多跳推理和注意力以互补的方式结合起来,该注意力可以在跳数之间对不断变化的token进行进行门控,该门控注意力( GA )允许query在语义级上直接与token嵌入的每个维度交互

2 Realated Work

完形填空风格的QA设计 ( d , q , a , C ) (d,q,a,\mathcal{C}) (d,q,a,C)形式的元组,其中 d d d是文档(上下文), q q q是对 d d d的内容的query,其中用占位符替换短语, a a a q q q的答案,其中 a a a来自一组候选 C \mathcal{C} C(完形填空:给一篇文章 d d d,给每个空提问题 q q q,在给出的答案集 C \mathcal{C} C中选出正确答案 a a a)。

*LSTMs with Attention:*使用LSTM单元来计算组合document-query表示 g ( d , q ) g(d,q) g(d,q),该document-query表示用于对候选答案进行rank。其中包括DeepLSTM Reader,其执行单次正向遍历连接的(document-query)对以获得 g ( d , q ) g(d,q) g(d,q)Attention Reader,其首先根据q的attention通过词的加权聚集来计算文档向量 d ( q ) d(q) d(q),然后组合 d ( q ) d(q) d(q) q q q以获得它们的联合表示 g ( d ( q ) , q ) g(d(q),q) g(d(q),q)Impatient Reader,document表示是递增构建的;Stanford Attentive Reader,简化了注意力reader的结构,使用较浅的循环单元与bilinear形式进行query-document attention。

Attention SumAttention-Sum(AS) Reader,使用两个双向GRU将 d d d q q q都编码成向量,通过计算 q q q和实体嵌入之间的点积并取softmax,获得 d d d中实体的概率分布,然后进一步应用一种称为指针和注意力的聚合机制对同一实体的概率进行求和,从而使文档中的频繁实体比稀有实体更受关注;在AS Reader的基础上,又引入了双向注意力机制,形成Attention-over-Attention(AoA) Reader

Muliti-hop Architectures:Memory Networks,通过聚合附近的单词将文档中的每个句子编码到存储器中。

3 Gated-Attention Reader

本文提出的GA Reader在上下文(文档中的单词嵌入)上执行多个跳跃,跨跳迭代细化,直到到达最终的attention-sum模块,该模块将最后一跳中的上下文表示映射到候选答案上的概率分布。本文的门控注意力是通过query和上下文嵌入之间的multiplicative(乘性)交互实现,并在多步推理过程中以每跳作为细粒度信息filters。filters分别对文档中每个token的向量表示的各个分量进行加权。gated-attention layers的设计是基于向量空间表征之间乘法交互作用的有效性。

3.1 Model Details

该模型结构并不复杂,通过几个BiGRU进行交互,输入序列: X = [ x 1 , x 2 , . . . , x T ] X=[x_1,x_2,...,x_T] X=[x1,x2,...,xT],输出序列: H = [ h 1 , h 2 , . . . , h T ] H=[h_1,h_2,...,h_T] H=[h1,h2,...,hT],其通过GRU计算过程如下:
r t = σ ( W r x t + U r h t − 1 + b r ) z t = σ ( W z x z + U z h t − 1 + b z ) h ∼ t = t a n h ( W h x t + U h ( r t ⊙ h t − 1 ) + b h ) h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ∼ t r_t=\sigma(W_rx_t+U_rh_{t-1}+b_r)\\ z_t=\sigma(W_zx_z+U_zh_{t-1}+b_z)\\ \overset{\sim}{h}_t=tanh(W_hx_t+U_h(r_t\odot h_{t-1})+b_h)\\ h_t=(1-z_t)\odot h_{t-1}+z_t\odot \overset{\sim}{h}_t rt=σ(Wrxt+Urht1+br)zt=σ(Wzxz+Uzht1+bz)ht=tanh(Whxt+Uh(rtht1)+bh)ht=(1zt)ht1+ztht
其中 r t r_t rt z t z_t zt称为复位门和更新门, h ∼ t \overset{\sim}{h}_t ht称为候选输出

将BiGRU两个序列进行连接:
G R U ↔ ( X ) = [ h 1 f ∣ ∣ h T b , . . . , h T f ∣ ∣ h 1 b ] ∈ R 2 n h × T \overset{\leftrightarrow}{GRU}(X)=[h_1^f||h_T^b,...,h_T^f||h_1^b]\in \mathbb{R}^{2n_h\times T} GRU(X)=[h1fhTb,...,hTfh1b]R2nh×T
X ( 0 ) = [ x 1 0 , x 2 0 , . . . , x ∣ D ∣ ( 0 ) ] X^{(0)}=[x_1^{0},x_2^{0},...,x_{|D|}^{(0)}] X(0)=[x10,x20,...,xD(0)]表示文档的token嵌入,也是document reader在第1层的输入; Y = [ y 1 , y 2 , . . . , y ∣ Q ∣ ] Y=[y_1,y_2,...,y_{|Q|}] Y=[y1,y2,...,yQ]表示query的token嵌入,其中 ∣ D ∣ |D| D ∣ Q ∣ |Q| Q表示文档的document和query的长度

3.1.1 Multi-Hop Architecture

模型图如图1所示:

bgDKaV.png

该模型优K层GA计算(读取document和query),上一层的输出作为下一层输入。

通过获取文档BiGRUns的全部输出转换为文档嵌入(蓝色部分):
D ( k ) = G R U ↔ D k ( X ( k − 1 ) ) D^{(k)}=\overset{\leftrightarrow}{GRU}_D^{k}(X^{(k-1)}) D(k)=GRUDk(X(k1))
特定层的query表示被计算为query的BiGRU的完整输出(绿色部分):
Q ( k ) = G R U ↔ Q k ( Y ) Q^{(k)}=\overset{\leftrightarrow}{GRU}_Q^{k}(Y) Q(k)=GRUQk(Y)
通过将Gated-Attention应用于 D k D^{k} Dk Q k Q^{k} Qk,以计算下一层 X k X^{k} Xk的输入:
X k = G A ( D ( k ) , Q ( k ) ) X^{k}=GA(D^{(k)},Q^{(k)}) Xk=GA(D(k),Q(k))

3.1.2 Gated-Attention Module

为了表达方便,作者省略了section3.1.1的上标k,对于D中每个token d i d_i di,GA模块使用soft attention形成query q ∼ i \overset{\sim}{q}_i qi 的特定于token的表示,然后将该query表示与文档token表示逐个元素相乘:
α i = s o f t m a x ( Q T d i ) q ∼ i = Q α i x i = d i ⊙ q ∼ i \alpha_i=softmax(Q^Td_i)\\ \overset{\sim}{q}_i=Q\alpha_i\\ x_i=d_i\odot \overset{\sim}{q}_i αi=softmax(QTdi)qi=Qαixi=diqi

启示

  1. related work写的很好
  2. 采用记忆网络的编码结构可以多次迭代更新query表示,从而提升推理潜力
  3. 门控注意力按位相乘的计算方法可以尝试使用

http://chatgpt.dhexx.cn/article/w9k9rZAH.shtml

相关文章

Html中Input的accept属性

Accept属性规定通过在文件上传提交的服务接受的文件类型 但是accept属性只能适用在Html input类型为文件类型,也就是说其他类型的input accept属性就不适用 我写的这个过滤文件属性是针对于后缀名为.xls的文件,所有的文件只要不是.xls后缀就不显示出来…

ApplicationContext

如果说BeanFactory是Spring的心脏,那么Application就是完整的身躯。ApplicationContext就是由BeanFactory派生出来的。 1、ApplicationContext ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径…

ActionContext

1、ActionContext翻译成中文就是Action的上下文(为什么说是上下文,是应为他的生命周期长,和我们的项目的生命周期是相同的,我们很多公共的东西都放在里面,方便存取 ),ActionContext是struts2的上…

readonly option is set (add ! to override)错误的解决

在mac电脑或linux系统中经常操作修改某个文件后保存退出出现readonly option is set (add ! to override)。如图: 正常情况下按 A进入编辑模式修改文件后按ESC退出编辑模式,:wq命令保存退出,但经常会遇到以上显示,文件权限只读或者…

ByteBuffer的allocate和allocateDirect

在Java中当我们要对数据进行更底层的操作时,通常是操作数据的字节(byte)形式,这时常常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: Java代码 public static ByteBuffer allocate(int capacity…

直接内存 直接内存的释放和回收

直接内存 特点 不属于Java虚拟机管理,属于系统内存;属于操作系统,常见于NIO操作时,比如ByteBuffer【】用于数据缓冲区分配回收成本较高,但读写性能高;不受JVM内存回收管理 文件读写过程 java不具备磁盘…

解决The‘Access-Control-Allow-Origin‘ header contains multiple values‘*, ....‘, but only one is allowed

报错内容: Access to XMLHttpRequest at ‘http://www.z…n.com/api/login’ from origin ‘http://z…n.com’ has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘*, http://z…n.com’, but only one is …

C++中std::allocator的使用

标准库中包含一个名为allocator的类,允许我们将分配和初始化分离。使用allocator通常会提供更好的性能和更灵活的内存管理能力。 new有一些灵活性上的局限,其中一方面表现在它将内存分配和对象构造组合在了一起。类似的,delete将对象析构和内…

alloc的流程

1⃣️ 2⃣️ 3⃣️ 现在我们看的objc源码都是2.0的版本,之前还有一个1.0的版本 4⃣️ 5⃣️核心方法 最主要的就是最下面三个方法 他的最重要作用就是开辟内存 cls->instanceSize 先计算出需要的内存空间大小这个大小只和对象的成员变量有关 在没有成员变量…

ByteBuffer.allocate()与allocateDirect()的区别

allocate()产生的是HeapByteBuffer的实例, 本质上是一个no direct buffer, allocateDirect()产生的是DirectByteBuffer的实例, 本质是一个direct buffer 主要区别 buffer的创建方式不同, no direct buffer还可以通过封装已存在的byte array来产生执行IO操作时不同, no direct …

ByteBuffer常用方法与分析

目录 目标 常用API 工具方法 演示案例 allocate(int capacity)和allocateDirect(int capacity) put()和get() flip()和hasRemaining() clear() compact() wrap() 总结 目标 掌握ByteBuffer常用方法,分析ByteBuffer对象在切换读写模式的情况下基本属性的变…

allocate与allocateDirect的性能测试

allocate与allocateDirect的性能测试 测试工具JMH测试代码JMH结果结论 测试工具JMH java基准测试框架 测试代码 直接分配系统内存(allocateDirect) -测试申请内存性能JVM堆分配内存(allocate)-测试申请内存性能直接内存-操作-连续二十次添加(allocateDirect)-测试内存操作性能…

ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别

在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public s…

8、ByteBuffer(方法演示2(allocate堆内存和allocateDirect直接内存))

ByteBuffer(方法演示2(allocate堆内存和allocateDirect直接内存)) Allocate:java堆内存:读写效率低,收到gc的影响(因为我们的java对象也是存在堆内存的) !!…

03 Java NIO allocateDirect()和allocate()区别

03 Java NIO allocateDirect和allocate区别 allocateDirect()和allocate()区别直接与非直接缓冲区直接与非直接缓冲区 源码分析 allocateDirect()和allocate()区别 allocateDirect:分配直接缓冲区,将缓冲区简历在物理内存中,可以提交效率 all…

ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。

在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public …

ByteBuffer中的allocate和allocateDirect

1、区别 allocate方法创建的内存在jvm的管理范围,而allocateDirect方法创建的内存不由jvm管理,意思就是allocateDirect创建的内存由系统直接管理 2、释放 allocateDirect创建的内存不归jvm管理,那如何释放呢?虽然这块内存不属于…

NIO ByteBuffer的allocate与allocateDirect区别(HeapByteBuffer与DirectByteBuffer的区别)

参考:https://blog.csdn.net/zhxdick/article/details/81084672 其中allocateDirect分配的字节缓冲区用中文叫做直接缓冲区(DirectByteBuffer),用allocate分配的ByteBuffer叫做堆字节缓冲区(HeapByteBuffer).. 其实根据类名就可…

【系统分析师】论文

文章目录 一、论文框架二、相关素材概览2.1 常见开发模型2.2 SOA架构 三、注意事项3.1 岗位职责3.2 项目背景3.3 理论部分讨论3.4 主体内容3.5 结论部分 四、范文4.1 开发模型主题反例正例 4.2 需求获取技术反例正例 4.3 系统测试反例正例 4.4反例正例 一、论文框架 二、相关素…

系统分析员论文12篇合集

系分论文1 企业人事信息系统的应用 【摘要】 本文讨论《企业人事信息系统》项目的需求分析方法与工具的选用。该系统的建设目标是帮助该企业管理好企业内部的人员和人员的活动,人事信息管理指的是企业员工从招聘面试到离职退休的全过程,涉及的主要活动…