NLP阅读理解之Stochastic Answer Network (SAN)

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

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

1、摘要

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。整个模型能够看做,总体包含五(四)层。网络

2、 模型架构

如下是模型的总体架构图
模型总体架构图
模型分为两部分:左边的上半部分也就是刚才所写的跨度检测器(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做为上下文信息编码层spa

  • 为了不过拟合将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.code

3.Memory Generation Layer

本层的主要做用的是将前面获得的Hq、 Hp进行融合从而产生一个 working memory,在此层中使用attenion机制来计算qustion and passage之间的类似度:
截屏2020-02-13下午7.39.44.png
先获得question-aware passage representation:
Up= concat(Hp, HqC)
而后对passage进行self-attention:
截屏2020-02-13下午7.43.00.png
本层的数学公示建议去看论文。😂
最后也是经过一层BiLSTM造成了最后的M = BiLSTM([Up];ˆUp]).component

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}
截屏2020-02-13下午7.16.33.pngblog

  • 须要注意的是最后的预测span是每一个时间步骤t的平均和;
  • 论文中采用了随机的dropout机制
5.Unanswerable classifier

针对SQUAD 2.0中的不可回答问题,特有的一个机制。
论文中仅仅采用了一层的神经网络来做为线性分类器。公式以下:
Pu= sigmoid([s0; m0]W4)
Pu也就是最后判断问题是否可回答的几率值。

6.Objective
  • 目标函数包括两部分:
    Ljoint= Lspan+ λLclassifier
  • span loss function:

截屏2020-02-13下午7.26.36.png

  • 线性分类器的目标函数:

截屏2020-02-13下午7.26.42.png
y=1时表示问题不可回答,y=0时表示问题可回答

3、实验

截屏2020-02-13下午7.29.29.png
从实验结果来看,SAN在2.0上的确取得了当今非预训练模型几乎最好的成绩,至于实验细节,论文写的仍是很详细的。

实验细节

分词: spaCy
word embedding: GloVe 300-D
character encoding: 利用CNN训练, embedding size设为20. windows设为1,3,5 hidden size设为{50, 100, 150}
word embedding和character embedding拼接, 最终的lexicon embedding就是600维.
LSTM hidden size: 128
注意力层的projection size: 256
dropout: 0.2
batch size: 32
optimizer: Adamax
learning rate: 0.002

但本身在对于代码的复现中并无在2.0上取得像论文同样的实验效果,(可能哪儿参数不对?欢迎你们给我留言讨论😁)

4、我的感悟

就整篇文章看完,我的以为 SAN的模型其实十分简单,并且整个的训练时间也不长.实力点赞!!
SAN与其余模型主要的区别在于,它的预测输出结果,并非最后直接输出,而是每一个时间步骤迭代的结果,最后取平均获得最后输出,这点的确很特别。。。
下期预告:QANET

相关文章
相关标签/搜索