ACL2019|Dynamically Fused Graph Network for Multi-hop Reasoning

本文介绍了一种名为动态融合图形网络(DFGN)的新型文本问答方法,特别适用于需要跨多个文档进行推理的问题。DFGN通过构建实体图并进行多跳推理,为开放域问答提供了解决方案。在HotpotQA数据集上的实验表明,DFGN能有效地整合来自不同文档的信息,显著提高了多文档问答的准确率。

文本问答(TBQA)近年来得到了广泛的研究。大多数现有的方法主要是在一个段落内找到问题的答案。然而许多困难的问题需要在两个或多个文档之中寻找答案。本文提出了动态融合图形网络(DFGN)这种新的回答方法,为需要多个分散证据来进行推理的文本问答提供了新的思路。在人类的逐步推理行为的启发下,DFGN包含了一个动态融合层,该层从给定查询中提到的实体开始,沿着文本动态构建的实体图进行探索,并从给定的文档中逐步找到相关的支持实体。

论文地址:
https://arxiv.org/abs/1905.06933

引言

问答是自然语言处理的重要组成部分,它提供了一种可量化的方法来评估NLP系统的语言理解和推理能力。传统的问答研究大多数都集中在从一个段落中寻找证据和答案,很少测试底层模型的深层推理能力。有研究提出,现有问答基准中的大多数问题都可以避过推理,通过检索一组句子来回答。
本文研究了基于多跳机制的文本问答,所谓多跳机制为在多个原始文本中进行多跳推理。在不依靠任何与训练知识库的前提下,使用不同文档中的多个证据来进行答案的推理。即模型需要可以概括和回答开放域中的问题。此模型的两大难点为:1)多跳机制需要高效地从多文档种抽取有效信息。现有研究大多使用静态的图神经网络(GNN)来聚合QA对实体图中的信息。2)现有研究中,通常将所有文档信息聚合到一个QA对实体图种,然后直接在实体图上选择实体作为答案。这种方法很难应用于开放域的任务中。
本文针对多跳文本问答提出了动态融合图形网络的方法,并且提出了通过DFGN来预测部分被遮盖实体图来解释和评估推理链的方法。

方法

人类对于问答的推理过程是:首先从查询中的某个感兴趣的实体开始,接下来关注实体周围的词语、邻近的与此实体有关系的实体或者被相同表面引用连接的实体,之后不断地重复这个步骤形成一个推理链,最后定位到可能是答案的某个实体或者片段上。
通过模仿人类的推理行为,此文章针对于问答系统构建了5个组件:用于段落选择的子网络,实体图结构单元,编码层,多跳推理的融合模块和最终的推理层。
图 1 模型结构概览

段落选择

对于每一个问题,有 N p N_p Np的段落用于推断答案。因为不是每段中的信息都与问题相关,作者训练了一个子网络用于选择段落。此子网络使用预训练的BERT模型,后接基于sigmoid预测的句子分类器进行训练。使用查询语句 Q Q Q和段落进行二分类。

构建图网络

文章使用斯坦福CoreNLP工具包,对内容 C C C进行POL(Person, Organization和Location)实体抽取,抽取出的实体数目为 N N N。首先对 C C C中所有句子出现的每一对实体对进行连接,作为句子层的连接;对具有相同文本的实体对进行连接,作为内容层的连接;对相同段落的中心实体点和其他实体点进行连接,作为段落层的连接,其中中心实体点为从段落题目中抽取出的实体点。

编码查询和内容

将查询 Q Q Q和内容 C C C进行级联,之后通过预训练BERT模型得到表示:
Q = [ q 1 , . . . , q L ] ∈ R L × d 1 Q=[q_1,...,q_L]\in \mathbb{R}^{L\times d_1} Q=[q1,...,qL]RL×d1,
C T = [ c 1 , . . . , c M ] ∈ R M × d 1 C^{T}=[c_1,...,c_M]\in \mathbb{R}^{M\times d_1} CT=[c1,...,cM]RM×d1
其中 L , M L,M L,M Q , C Q,C Q,C的长度, d 1 d_1 d1为BERT的隐状态层数。
之后将两个表示通过一个双注意层来增强两者之间的交互,然后将输出与输入相加得到最终表示 Q 0 ∈ R L × d 2 Q_0 \in \mathbb{R}^{L \times d_2} Q0RL×d2, C 0 ∈ R M × d 2 C_0\in \mathbb{R}^{M\times d_2} C0RM×d2,其中 d 2 d_2 d2为输出嵌入的维度。

使用融合模块进行推理

整个模块分为四步:文档到图,动态图注意力机制,更新查询,图到文档。
图 2 融合模块结构概览

文档到图

文章构建了一个二元矩阵 M M M,如果内容中第 i i i个token属于第 j j j个实体范围,则 M i , j M_{i,j} Mi,j等于1。使用之前的到的token嵌入通过平均池化层和最大池化层得到实体嵌入 E t − 1 = [ e t − 1 , 1 , . . . , e t − 1 , N ] E_{t-1}=[e_{t-1,1},...,e_{t-1,N}] Et1=[et1,1,...,et1,N]。其中 E t − 1 E_{t-1} Et1的维度为 2 d 2 × N 2d_2\times N 2d2×N N N N为实体数目, 2 d 2 2d_2 2d2可以表示平均池化和最大池化的结果。

动态图注意力机制

文章假设每一个实体点都会传播信息到附近的实体点,所以与查询越接近的实体点,其附近的实体点收到的信息越多。首先将内容部分实体点进行遮蔽(mask),之后在查询的嵌入和内容的嵌入上使用注意力网络,来预测遮蔽的实体点,最终得到与查询最有关的实体点。

其中 V t V_t Vt为线性投影矩阵, σ \sigma σ为sigmoid函数。
接下来使用动态子图传播信息:

其中 U t ∈ d 2 × 2 d 2 , W t ∈ ( R ) 2 d 2 U_t \in \mathbb{d_2\times 2d_2}, W_t\in\mathbb(R)^{2d_2} Utd2×2d2,Wt(R)2d2为线性投影参数, α i \alpha _i αi代表第 i i i行信息传播的比例。
在动态图注意力机制中,信息流的表示为:

其中 B i B_i Bi为实体点 i i i的邻接点,实体点嵌入的更新表示为 E ( t ) = [ e 1 ( t ) , . . . , e N ( t ) ] E^{(t)}=[e_1^{(t)},...,e_N^{(t)}] E(t)=[e1(t),...,eN(t)]

更新查询

一个完整的推理链包含很多个步骤,每一步新访问的实体点都会变成下一步的起始实体点。文章参考双重注意力网络设计了查询嵌入的更新机制

图到文档

使用之前构建的二元矩阵 M M M,联合内容嵌入 C t − 1 C_{t-1} Ct1和相应的实体嵌入 E t − 1 E_{t-1} Et1得到token。同时使用LSTM进行下一步内容嵌入的预测:

预测

预测框架由四格输出维度构成,包括支持句,答案的开始位置,答案的结束位置和答案类型。使用堆栈结构的4层同构LSTM来进行预测:

最终损失函数为:

实验

文章在数据集HotpotQA上进行实验。在段落选择阶段,文章使用BERT的分词器对所有段落和问题进行分词,句对的编码向量由BERT预训练模型确定。在图构建阶段,文章使用斯坦福Core NLP工具包里的预训练NER模型进行实体抽取。在编码阶段,文章依然使用BERT预训练模型作为编码器。
以下为模型表现:
图 3 HotpotQA不同测试集的表现
图 4 消融学习
本文还定义了ESP(实体等级支持)的分数:路径(Path)为融合模块的实体序列访问顺序, P = [ e p 1 , . . . , e p t + 1 ] P=[e_{p_1},...,e_{p_{t+1}}] P=[ep1,...,ept+1];路径分数(Path Score)为遮盖与路径上注意力分数的乘积, s c o r e ( P ) = ∏ t i = 1 m i , p i α t , p i , p i + 1 score(P)=\prod_{t}^{i=1}m_{i,p_i}\alpha_{t,p_i,p_{i+1}} score(P)=ti=1mi,piαt,pi,pi+1;击中句(Hit)为如果句子中至少有一个实体在路径中,则称此句为击中句。对于 m m m个支持句,根据最高分选择前 k k k个路径预测为推理链。对于每个支持句,使用这 k k k个路径计算多少句为击中句,最终得到两种ESP得分为:
图 5 ESP得分
ESP EM:对于 m m m个支持句,如果 m m m句都为击中句,则称为完全契合(Exact Match)。
ESP Recall:对于 m m m个支持句,如果 h h h句为击中句,则此值为 h / m h/m h/m
图 6 案例研究

结论

本文针对多跳推理文本问答提出了一种新的动态融合图网络,在HotpotQA上取得了很好的效果,并定义了新的评测分数ESP EM和ESP Recall,为多文档的QA问题提供了新的思路。



扫码识别关注,获取更多论文解读

### Multi-Level Attention Network for Retinal Vessel Segmentation Retinal vessel segmentation plays a crucial role in diagnosing various eye-related diseases, such as diabetic retinopathy and glaucoma. A multi-level attention network is one of the advanced deep learning approaches that enhance the accuracy and precision of vessel segmentation by leveraging attention mechanisms at multiple levels of the neural network architecture. #### Architecture Overview The architecture typically follows an encoder-decoder structure with additional attention modules strategically placed to emphasize relevant features during decoding. This design allows the model to focus on salient regions while suppressing irrelevant background information, which is particularly important in retinal images where vessels are thin and may blend into the background. 1. **Encoder Path**: The encoder consists of convolutional layers followed by pooling operations to extract hierarchical features from the input image. Commonly used architectures like U-Net or ResNet can serve as the backbone for feature extraction. 2. **Attention Modules**: Multiple attention blocks are integrated at different levels (shallow, intermediate, and deep) within the decoder path. These blocks compute attention maps that dynamically weigh the importance of each feature map channel and spatial location. For instance: - **Channel Attention**: Computes the significance of each channel across the entire feature map. - **Spatial Attention**: Focuses on critical spatial locations within each channel. 3. **Decoder Path**: As the feature maps pass through upsampling layers, attention-weighted features from the encoder are combined to refine the segmentation output progressively. Skip connections help preserve spatial details lost during encoding. 4. **Final Segmentation Layer**: A 1x1 convolution layer is applied at the end to produce the final binary segmentation mask indicating vessel and non-vessel pixels. #### Implementation Details Implementing a multi-level attention network involves defining both the encoder and attention-augmented decoder parts. Below is a simplified example using PyTorch: ```python import torch import torch.nn as nn import torch.nn.functional as F class AttentionBlock(nn.Module): def __init__(self, in_channels): super(AttentionBlock, self).__init__() self.conv1 = nn.Conv2d(in_channels, in_channels // 8, kernel_size=1) self.conv2 = nn.Conv2d(in_channels // 8, 1, kernel_size=1) def forward(self, x): # Channel attention att = F.relu(self.conv1(x)) att = torch.sigmoid(self.conv2(att)) return x * att class MultiLevelAttentionUNet(nn.Module): def __init__(self, in_channels=3, out_channels=1): super(MultiLevelAttentionUNet, self).__init__() self.encoder = nn.Sequential( nn.Conv2d(in_channels, 64, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2) ) self.attention_blocks = nn.ModuleList([ AttentionBlock(64), AttentionBlock(128), AttentionBlock(256) ]) self.decoder = nn.Sequential( nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2), nn.ReLU(), nn.Conv2d(128 + 64, 128, kernel_size=3, padding=1), nn.ReLU(), nn.ConvTranspose2d(128, out_channels, kernel_size=2, stride=2), nn.Sigmoid() ) def forward(self, x): enc_features = [] for layer in self.encoder: x = layer(x) if isinstance(layer, nn.MaxPool2d): enc_features.append(x) x = self.attention_blocks[0](x) dec_input = torch.cat((x, enc_features[-1]), dim=1) x = self.decoder(dec_input) return x ``` This implementation provides a foundational framework that can be further enhanced by adding more complex attention mechanisms or integrating pre-trained models for better performance. Additionally, training should involve loss functions tailored for segmentation tasks, such as Dice loss or Binary Cross-Entropy Loss.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值