阅读理解系列之Stochastic Answer Network

作者: CNforinsist | 来源:发表于2020-02-13 19:54 被阅读0次

    今天终于开始技术博客的第一章,从阅读理解的非预训练model开始,第一篇SAN for SQUAD 2.0

    阅读理解系列之Stochastic Answer Network (SAN)

    一、摘要

    SAN for SQUAD 2.0 主要包含两个组件:

    a span detector and a binary classifier for judging whether the question is unanswerable,and both components are jointly optimized.

    也就是一个跨度检测器和一个线性分类器,其中线性分类器用来判断当前问题是否有答案(毕竟这是SQUAD2.0相比于 1.1的最大改变之处,也为阅读理解提供了难度),跨度检测器用来检测答案的span。整个模型可以看作,整体包含五(四)层。

    二、 模型架构

    以下是模型的整体架构图

    模型分为两部分:左边的上半部分也就是刚才所写的跨度检测器(a span detector),也就是SAN Answer Module,右边的上半部分也就是线性分类器(a binary classifier),而且模型包括两种不同的layers。

    几个关键点:

    共享层(不局限于某个特定的下游任务)包括:

    a lexicon encoding layer, contextual encoding layer and memory generation layer

    特定下游任务层:包括 SAN ANswer Module 和 a binary classfier

    整个模型是共同学习的

    下面详细介绍整个模型的各个层级

    1.lexicon encoding layer(也就是词典编码层)

    事先将question划分位Q={q_0,q_1,q_2,..,q_m-1} ,passage/paragraph划分为P={p_0,p_1,p_2,...,p_m-1},answer 计算为 A={abegin , aend},A也就是P中的一个字串,当问题无法回答时,A指向段落的最后一个标记。

    第一步,将Q and P映射到欧氏空间(所有model的第一步都大差不差),这里采用的是300-dim的glove word emdedding、16-dim part-of-speech(POS) tagging embeddings, 8-dim named-entity embeddings and 4-dim hard-rule features

    最后就是通过两层的position-wise Feed- Forward Networks (FFN)将questrion and passager映射到同一纬度。最后分别将Q和P转换为矩阵:Eq=R d*m

    Eq=Rd*m

    2.Contextual Encoding Layer(上下文编码层)

    使用两层的BiLSTM作为上下文信息编码层

    为了避免过拟合将600-dimensional CoVe vectors和lexicon embeddings进行concat 作为contextual encoding layer的最后输入,

    然后将600-dimensional CoVe vectors与第一层的输出进行concat作为第二层的输入。

    最后通过两层的BiLSTM的输出得到最终的Hq∈ R4d×mfor questions and Hp∈ R4d×nfor passages.

    3.Memory Generation Layer

    本层的主要作用的是将前面得到的Hq、 Hp进行融合从而产生一个 working memory,在此层中使用attenion机制来计算qustion and passage之间的相似度:

    先得到question-aware passage representation:

    Up= concat(Hp, HqC)

    然后对passage进行self-attention:

    本层的数学公示建议去看论文。😂

    最后也是通过一层BiLSTM形成了最后的M = BiLSTM([Up];ˆUp]).

    4.Span detector

    这一层对于有答案的文章来说其实也就是最后一层,该层输出最后答案的span。

    本文中使用的是multi-turn answer module 来进行 span detector

    输入初始状态s0(s0是Q每个token的加权之和),最后通过一个线性函数来找begin and end point of answer spans at each reasoning step t ∈ {0, 1, . . . , T − 1}

    需要注意的是最后的预测span是每个时间步骤t的平均和;

    论文中采用了随机的dropout机制

    5.Unanswerable classifier

    针对SQUAD 2.0中的不可回答问题,特有的一个机制。

    论文中仅仅采用了一层的神经网络来作为线性分类器。公式如下:

    Pu= sigmoid([s0; m0]W4)

    Pu也就是最后判断问题是否可回答的概率值。

    6.Objective

    目标函数包括两部分:

    Ljoint= Lspan+ λLclassifier

    span loss function:

    线性分类器的目标函数:

    y=1时表示问题不可回答,y=0时表示问题可回答

    三、实验

    从实验结果来看,SAN在2.0上的确取得了当今非预训练模型几乎最好的成绩,至于实验细节,论文写的还是很详细的。

    实验细节

    分词: spaCywordembedding:GloVe300-Dcharacterencoding:

    利用CNN训练, embedding size设为20.windows设为1,3,5hidden size设为{50,100,150}

    word embedding和character embedding拼接, 

    最终的lexicon embedding就是600维.

    LSTM hiddensize:128

    注意力层的projectionsize:256 。dropout:0.2   batchsize:32  optimizer:Adamax     learningrate:0.002

    但自己在对于代码的复现中并没有在2.0上取得像论文一样的实验效果,(可能哪儿参数不对?欢迎大家给我留言讨论😁)

    四、个人感悟

    就整篇文章看完,个人觉得 SAN的模型其实十分简单,而且整个的训练时间也不长.实力点赞!!

    SAN与其他模型主要的区别在于,它的预测输出结果,并不是最后直接输出,而是每个时间步骤迭代的结果,最后取平均得到最后输出,这点的确很特别。。。

    下期预告:QANET

    相关文章

      网友评论

        本文标题:阅读理解系列之Stochastic Answer Network

        本文链接:https://www.haomeiwen.com/subject/ixtbthtx.html