Text Understanding with the Attention Sum Reader Network

321 阅读1分钟

#关键词 Bi-GRU, Bi-LSTM, attention sum

#来源 arXiv 2016.03.04 (published at ACL 2016)

#问题 使用带attention的深度模型解决完型填空问题

#技术细节 模型比attentive reader简单,分以下几步:

  1. 使用双向GRU/LSTM单元计算docment每个词的拼接词向量doc_endcoer

  2. 使用双向GRU/LSTM单元计算query正向尾词和反向首词的拼接词向量query_endcoer

  3. 计算doc_endcoerquery_endcoer的乘积,获得attention_res,并softmax(以保证值为正)

  4. attention_res中备选词的attention分别累和(论文的关键所在,成为之后完型填空的深度模型的必备结构

  5. 计算交叉熵并更新梯度 如图: 这里写图片描述 #模型实现关键点

  6. 由于document长,大约600+/700+,有极个别更长的,这就导致之后训练时document的gradients很大,占用很多内存,笔者的11G显存经常报不够用。所以document长度700内就够了,batch_size设32基本就到极限了

  7. 计算准确率时,要计算本epoch内累积准确,而不能以batch为单位,否则会出现准确不断跳动的情况,让人以为训练有错

  8. 第5步计算交叉熵时,不能再计算第二次softmax,要计算normalize;即假设第4步输出为outputsoutputs,那么ypredict=outputs/(outputs)y_{predict}=outputs/\sum(outputs) crossEntropy=(ytf.log(ypredict)) crossEntropy=-\sum(y*tf.log(y_{predict})) 因为第3步计算attention_res已经是softmax过的,其内所有值都属于[0,1)[0,1),document长度为700左右,每个值大约都是千分之几到百分之几,这些数再softmax之后,基本成了平均数,比如e0.0051.004e^{0.005}\approx1.004

#实现代码 Theano版本 tensorflow版本