R-NET机器阅读理解(原理解析)

简介 

    斯坦福大学自然语言计算组发布SQuAD数据集,诸多团队参与其中,而微软亚研的R-NET是首个在某些指标中接近人类的深度学习模型。由于刚刚 开源CNTK版的R-NET,趁着余热解读其中的原理。


阅读准备

    先介绍一下SQuAD数据集的特点,SQuAD数据集包含10w个样例,每个样例大致由一个三元组构成(文章Passage, 相应问题Query, 对应答案Answer), 以下皆用(P,Q,A)表示。
 由于R-NET模型中多次引用 Matching-LSTM 模型和 Pointer-Net模型中的思想,所以建议准备精读的朋友先看一下 Blog(Matching-LSTM)和李宏毅老师的Ptr-Net。

结构图




原理介绍

    R-NET模型一共分为四个步骤,分别为QUESTION AND PASSAGE ENCODER, GATED ATTENTION-BASED RECURRENT NETWORKS, SELF-MATCHING ATTENTION, OUTPUT LAYER, 基本结构可观察上面所示的结构图。


1. QUESTION AND PASSAGE ENCODER

    第一层为表示学习过程, R-NET中的方式Input = Glove + char embedding。第一种是把文章P,和问题Q中的单词替换为Glove词向量中的数据,第二种是char embedding, 。最终把文章P和问题Q分别通过BiRNN。

uQt=BiRNNQ(uQt1,[eQt,cQt])uPt=BiRNNP(uPt1,[ePt,cPt])


2. GATED ATTENTION-BASED RECURRENT NETWORKS

    从上一层网络中可以得到 ,在这一层网络中R-NET试图把 进行attention加权融入到 中,得到及问题Q意识下的文章语义理解
vPt=RNN(vPt1,ct)

    其中 为对问题Q的attention-pooling加权。从中可以看出 中的attention权重完全由文章中单词的含义 ,和上一个单词在问题下的理解 决定。
    基本具体形式如下:
stj=vTtanh(WQuuQj+WPuuQt+WPvvPt1)ati=exp(sti)/j=1mexp(stj)ct=i=1matiuQi

    R-NET又基于matching-lstm和门控制方式对以上方法提出两点改进,第一点是把 并联为 加入RNN中,即
vPt=RNN(vPt1,[ct,uPt])

    第二点又在 上面加入门控制方式,为了更好地提取和文章有关的问题信息,即
gt=sigmoid(Wg[ct,uPt])[ct,uPt]=gt[ct,uPt]

3. SELF-MATCHING ATTENTION



    此过程充分借鉴了 Attention is all you need 中的自注意力思想,在模型效果提升中起了很大作用,而且这个方法也易于实现。
hPt=BiRNN(hPt1,[ct,vPt])

    其中   是基于当前单词下的整篇文章的语义。
stj=vTtanh(WPvvPj+WP~vvPt)ati=exp(sti)/j=1nexp(stj)ct=i=1nativPi

4. OUTPUT LAYER



    R-NET模型输出的是答案在文章中的起始位置,在这一过程中借鉴了pointer-network的思想,R-NET模型先计算得到开始位置在文章中的分布 ,再利用这一分布 对整篇文章进行加权作为输入得到终止位置在文章中的分布  。所以这其实是一个seq2seq的过程,只不过最终得到的seq中只有两项,即起始位置 和终止位置 。对于一个seq2seq过程,R-NET使用对问题   进行attention-pooling得到的   作为起始键。
sj=vTtanh(WQuuQj+WQvvQr)ai=exp(si)/j=1mexp(sj)rQ=i=1naiuQi

    其中这个seq2seq的循环循环结构为:
hat=RNN(hat1,ct)

$c_{t}$ 依然是对文章的attention-pooling得到的结果:
stj=vTtanh(WPhhPj+Wahhat1)ati=exp(sti)/j=1nexp(stj)ct=i=1natihPi

    通过以上RNN循环单元两次可以得到两个权重分布,我们可以通过下面这种方式从中得到答案的起始位置。
pt=argmax{at1,...,atn}
 
    不过再具体实验中还有一个小trick对提升效果很有用,由于我们得到了两个分布 ,通过两个分布我们可以得到一个联合分布,在计算中可以表示为一个矩阵,然而由于开始位置永远在终止位置之前,所以我们的选择区域始终在矩阵对角线的左上半部分。又因为答案的长度有一定范围,我们可以设置答案的最大长度,所以最后的训责区域只是一个若当标准型矩阵的。

转载: https://blog.csdn.net/jyh764790374/article/details/80247204

猜你喜欢

转载自blog.csdn.net/jdbc/article/details/80657702