ICLR 2017 | 基于双向注意力流的机器理解

2024-05-07 14:18

本文主要是介绍ICLR 2017 | 基于双向注意力流的机器理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文提出了双向注意力流(BIDAF)网络,是一种分层的多阶段架构,在不同粒度等级上对上下文进行建模。BIDAF包括字符级(character-level)、单词级(word-level)和上下文(contextual)的embedding,并使用双向注意力流来获取query-aware的上下文表示。

论文地址:
https://arxiv.org/abs/1611.01603
代码地址:
https://allenai.github.io/bi-att-flow/
引言

Machine Comprehension,即机器理解,简记为MC,针对给定的一个上下文,回答一个问题,这需要我们对复杂的交互过程进行建模。近来,注意力机制(Attention Mechanisms)成功地在MC领域进行了应用,典型做法是通过注意力机制来关注上下文并最后生成一个固定大小的向量。
模型

BIDAF模型包括六大基本模块,以下为该模型的基本层级式架构图:
BIDAF模型架构图
在上图中,左侧灰色图框显示了六大基本模块,右侧显示了Embed Layer和Attention Flow Layer的具体操作。
下面对六个模块分别进行叙述。
Character Embedding层

对于context paragraph和query,均利用character level CNN将每个词映射到一个高维向量空间。
Word Embedding层

对于context paragraph和query,均利用GloVe将每个词映射到一个高维向量空间。
把character embedding和word embedding拼接起来,通过两层的Highway Network生成两个矩阵:表示context的X∈ℝd×T
X∈Rd×T,表示query的Q∈ℝd×J

Q∈Rd×J。
Contextual Embedding层

使用双向LSTM分别对X和Q进行编码,捕捉X和Q各自单词间的局部关系,拼接双向LSTM的输出,得到H∈ℝ2d×T
H∈R2d×T和U∈ℝ2d×J

U∈R2d×J。
以上三层用来捕捉context 和query各自不同粒度(character, word, phrase)上的特征。
Attention Flow层

输入是H和U,输出是context words的query-aware的向量表示G以及上一层传下来的contextual embedding。
具体实现方式为:在context-to-query以及query-to-context两个方向计算attention。即先计算相关性矩阵,再归一化得到 attention系数,最后与原始矩阵相乘得到修正后的向量矩阵。
两种attention共享相似度矩阵S∈ℝT×J
S∈RT×J
,计算方式为:

其中Stj

Stj​表示第t个context word与第j个query word的相似度。
Context-to-query Attention

计算对每一个context word而言,哪些query words和它最相关。基于相关性矩阵S,经softmax归一化得到attention矩阵,计算query向量的加权和得到Uˆ∈ℝ2d×T

U^∈R2d×T。
Query-to-context Attention

计算对任一query word而言,哪些context words和它最相关,即说明这些context words对回答问题很重要。基于相关性矩阵S,按列比较,取每行的最大值,进行softmax归一化,计算context向量加权和,将结果平铺T次得到Hˆ∈ℝ2d×T
H^∈R2d×T。

最后通过contextual embedding、C2Q、Q2C计算得到G,即context中单词的query-aware representation。

β

β可以是多层perceptron,本文使用了简单的拼接。
5.Modeling层

输入是G,经过两层双向LSTM编码得到M∈ℝ2d×T

M∈R2d×T,捕捉的是考虑query的context word间的关系。M的每一个列向量都包含了对应单词关于整个context和query的上下文信息。
6.Output层

输出层可以根据实际任务进行设计,此处以QA为例,即从context中找到答案的开始位置p1
p1​和结束位置p2p2​。将其看作一个多分类问题,预测每个位置是正确位置的概率。计算公式如下:

其中WT(p1)∈ℝ10dW(p1)T​∈R10d随模型一起训练。
接下来把M输入到一个双向LSTM之中,得到一个新的用于预测结束位置的矩阵M2∈ℝ2d×TM2∈R2d×T,同样地,WT(p2)∈ℝ10d

W(p2)T​∈R10d随模型一起训练。

模型整体的损失函数定义为:

其中y1i
yi1​和y2iyi2​分别是第i个样本的groundtruth的开始和结束位置,pkpk​代表向量p的第k个分量。
最终的answer span (k, l)由p1kp2l

pk1​pl2​的最大值决定,可在线性时间内完成计算。
实验
1. Question Answering Experiments

基于BIDAF模型在SQuAD数据集进行了QA的实验,实验结果如下所示:
SQuAD实验结果
可以看出,BIDAF(ensemble)在所有评价指标上均表现最优。文章进一步通过实验分析了模型中各个模块的作用大小,如下所示:
SQuAD对比实验
可以看出,在embedding方面,word embedding更为重要;在attention方面,C2Q方向的attention对结果影响更大。
2. Cloze Test Experiments

基于BIDAF模型在CNN/DailyMail数据集上进行了cloze的实验,实验结果如下所示:
CNN/DailyMail实验结果
实验表明,BIDAF的single model在所有评价指标上均表现最优,甚至在DailyMail test上超过了其他的ensemble模型。
结论

本文提出了一种双向注意力流的机制,主要有三个特点:

    没有把context编码成固定大小的vector,而是让vector可以流动,减少早期加权和带来的的信息损失。
    使用了Memory-less的机制,即在每一次迭代时,仅对query和当前的context进行计算,并不直接依赖之前的 attention,这使得后面的attention计算不会受到之前错误的 attention信息的影响。
    计算query-to-context和context-to-query两个方向的 attention信息,认为二者能够相互补充。
 

这篇关于ICLR 2017 | 基于双向注意力流的机器理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967583

相关文章

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学