文章目录
- R-NET结构
- 问句和段落编码(Question and Passage Encoder)
- 门控注意力循环网络(Gated Attention-Based Recurrent Nerworks)
- 自匹配注意力(Self-Matching Attention)
- 输出层(Outpur Layer)
- 实验
【自然语言处理|微软R-NET: 端到端、抽取式机器阅读理解问答模型】Reference:
1. R-NET: Machine Reading Comprehension with Self-Matching Networks
2.《R-NET:MACHINE READING COMPREHENSION》阅读笔记
R-NET是端到端阅读理解QA神经网络模型,目的是从段落中抽取问句对应的答案区间。
R-NET各自编码问句和段落词向量,使用门控注意力RNNs编码具有问句感知的段落词向量表示,通过自匹配注意力收集全局问句信息和段落各词的上下文信息以改善段落词向量表示,使用指针网络定位候选答案位置区间。
★关键贡献点★:
- 段落不同单词在回答特定问句时重要性不同,使用门控注意力循环神经网络,向段落各词向量编码问句语义,同时屏蔽(mask out)段落中与问句相关度低的片段;
- RNNs记忆能力有限,候选答案无法感知其他片段关于答案的线索,使用自匹配注意力机制,可从全段落中收集答案信息,使得段落词向量可有效编码问句信息;
- 单模型达到SQuAD和MS-MARCO数据集SOTA效果;
文章图片
问句和段落编码(Question and Passage Encoder) 假定问句和段落的符号表示分别为: Q = { w t Q } t = 1 m Q=\{w_t^Q\}_{t=1}^m Q={wtQ?}t=1m?, P = { w t P } t = 1 n P=\{w_t^P\}_{t=1}^n P={wtP?}t=1n?。
将问句和段落各自转换为词级别向量表示 { e t Q } t = 1 m \{e_t^Q\}_{t=1}^m {etQ?}t=1m?, { e t P } t = 1 n \{e_t^P\}_{t=1}^n {etP?}t=1n?,字级别向量表示 { c t Q } t = 1 m \{c_t^Q\}_{t=1}^m {ctQ?}t=1m?, { c t P } t = 1 n \{c_t^P\}_{t=1}^n {ctP?}t=1n?,再将字、词向量拼接作为Bi-RNNs输入,生成新的向量表示:
文章图片
其中将单词各字符输入至Bi-RNNs,将其最后隐状态作为字级别向量表示,字向量用于解决OOV问题(Out-of-Vocab)。
门控注意力循环网络(Gated Attention-Based Recurrent Nerworks) 使用门控注意力RNNs向段落词向量融合问句信息(传统注意力RNN的变体),通过使用门判别段落中各词对于特定问句的重要性。
Rocktaschel et al. (2015) 将问句所有单词和段落各词软对齐,获取sentence-pair(??)表示:
文章图片
RNNs(GRU,包含隐状态和输入向量两个输入)将输入向量对问句各词的attention后的向量作为输入,因此,RNNs中段落各词的输出向量动态融合了整个问句信息。
Wang & Jiang (2016a) 提出匹配LSTM,其将 u t P u_t^P utP?也作为额外的RNNs输入:
文章图片
为判别段落词与问句的匹配度,我们对RNNs的输入 [ u t P , c t ] [u_t^P,c_t] [utP?,ct?]使用门控:
文章图片
门控模拟了段落中仅有部分片段与特定问题相关。
自匹配注意力(Self-Matching Attention) 门控注意力循环神经网络生成问句感知的段落词向量,但受限于上下文信息,候选答案通常会遗忘周围窗口之外的信息,而且在诸如SQuAD问答数据集中,问句和段落之间一般在词汇和语法上存在差异。
为充分利用段落上下文信息推测答案,我们对门控注意力网络输出的具有问句感知的段落词向量 v t P v_t^P vtP?,使用自匹配注意力得到具有段落上下文信息的语义表示 c t c_t ct?,并拼接得到 [ v t P , c t ] [v_t^P,c_t] [vtP?,ct?],作为Bi-RNNs输入:
文章图片
输出层(Outpur Layer) 先验知识:Pointer-Networks
Pointer Networks是一种seq2seq模型,主要在attention mechanism上做了改进,克服seq2seq模型中 “输出严重依赖输入” 的问题,如每次从不固定长度的输入序列中选择一定数量的点作为输出。
对于凸包问题求解:从输入序列中 { p 1 , ? ? , p n } \{p_1,\cdots,p_n\} {p1?,?,pn?}中选点的过程,选点的方法叫做pointer,将attention转换为一个pointer,在输入序列中选择attention分数最高点作为当前输出,并作为下一时刻输入。
文章图片
解码器每个时刻对编码器所有时刻隐状态做attention,得到编码器各时刻作为当前解码输出的概率或分数,选择编码器中分数最高的时刻作为当前时刻输出,以及下一时刻输入。普通attention机制是将得到的注意力分数作为权重,加权得到context向量。
R-NET的输出层需要同时输出答案的起始和结束位置,起始位置和结束位置具有高度相关性(组合优化问题),可用Pointer Networks解决,Ptr-Nets首先输出起始位置,在根据起始位置预测结束位置,相当于一个解码过程。
具体地说,给定段落向量表示 { h t P } t = 1 n \{h_t^P\}_{t=1}^n {htP?}t=1n?,使用问句各词向量的注意力池化向量作为解码器初始隐状态,依次利用注意力机制指针解码起始位置 p 1 p^1 p1,结束位置 p 2 p^2 p2,推理过程如下:
- i. 初始时刻隐状态, r Q = attention ( u Q , V r Q ) r^Q=\text{attention}(u^Q,V_r^Q) rQ=attention(uQ,VrQ?):
h 0 a = r Q = ∑ i = 1 m a i u i Q , a i = exp ? ( s i ) ∑ j = 1 m exp ? ( s j ) , s j = v ? tanh ? ( W u Q u j Q + W v Q V r Q ) h_0^a=r^Q=\sum_{i=1}^ma_iu_i^Q,\quad a_i=\frac{\exp(s_i)}{\sum_{j=1}^m\exp(s_j)},\quad s_j=v^\top\tanh(W_u^Qu_j^Q+W_v^QV_r^Q) h0a?=rQ=i=1∑m?ai?uiQ?,ai?=∑j=1m?exp(sj?)exp(si?)?,sj?=v?tanh(WuQ?ujQ?+WvQ?VrQ?) - ii. 计算起始位置,将 t = 1 t=1 t=1带入下式得到起始位置 p 1 p^1 p1:
p t = arg?max ? ( a 1 t , a 2 t ? ? , a n t ) , a i = exp ? ( s i t ) ∑ j = 1 n exp ? ( s j t ) , s j t = v ? tanh ? ( W h P h j P + W h a h t ? 1 a ) p^t=\argmax(a_1^t,a_2^t\cdots,a_n^t),\quad a_i=\frac{\exp(s_i^t)}{\sum_{j=1}^n\exp(s_j^t)},\quad s_j^t=v^\top\tanh(W_h^Ph_j^P+W_h^ah_{t-1}^a) pt=argmax(a1t?,a2t??,ant?),ai?=∑j=1n?exp(sjt?)exp(sit?)?,sjt?=v?tanh(WhP?hjP?+Wha?ht?1a?) - iii. 计算下一时刻隐状态,将 t = 1 t=1 t=1带入下式得到 t 1 t_1 t1?时刻输出隐状态 h 1 h_1 h1?:
h t a = RNN ( h t ? 1 a , c t ) , c t = ∑ i = 1 n a i t h i P h_t^a=\text{RNN}(h_{t-1}^a,c_t),\quad c_t=\sum_{i=1}^na_i^th_i^P hta?=RNN(ht?1a?,ct?),ct?=i=1∑n?ait?hiP? - iv. 将 t = 2 t=2 t=2带入第ii步公式,得到结束位置 p 2 p^2 p2。
实验 模型中word embedding使用Glove预训练词向量,参数随训练时更新,OOV单词使用零向量表示,char embedding使用一层GRU训练得到,使用三层GRU各自训练问句和段落embedding。
模型中其余RNNs均使用双向GRU,隐藏层和注意力单元数均为75,使用AdaDelta优化器, ρ \rho ρ和 ? \epsilon ?分别为 0.95 0.95 0.95和 1 e ? 6 1e-6 1e?6。
SQuAD采用EM和F1评估。
Exact match(EM): 如果预测答案等于标准答案,则EM得分为1.0,否则为0.0。
F1 score: 用来计算预测答案和所有标准答案的重合程度的最大值。预测和标准答案可以看作是一个“token袋”,那么token级的F1 score就可以通过计算得到。precision表示在所有预测结果中预测对的所占比例,recall表示所有预测对的占标准答案的比例。
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- pytorch|YOLOX 阅读笔记
- 前沿论文|论文精读(Neural Architecture Search without Training)
- 联邦学习|【阅读笔记】Towards Efficient and Privacy-preserving Federated Deep Learning
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 深度学习|深度学习笔记总结
- 人工智能|hugginface-introduction 案例介绍