Attention机制在问答系统中的应用--attentive pooling networks

Attention机制在时序模型中的应用,已经被证明能够提升模型的性能。本文参考《Attentive pooling Networks》,该论文以时序模型输出状态设计Attention为基线(QA_LSTM_ATTENTION),提出了一种同时对问题和答案进行特征加权的Attention设计方案。本文实现了论文中基于LSTM网络结构的Attention设计,即AP-BILSTM。

传统的Attention机制被应用于特征抽取器之后,例如QA_LSTM_ATTENTION。由于RNN算法用于处理时序特征的特点,隐含状态迭代更新,因此t时刻的状态包含了从开始到t时刻的所有信息。但是该attention设计仅仅只是通过问题对答案进行特征加权,而忽略了答案对问题的影响,本文考虑到可以同时将attention应用到问题和答案,从而提高算法的准确率,即attentive pooling。

Attention机制在问答系统中的应用--attentive pooling networks_第1张图片
AP-BILSTM算法

AP-BILSTM算法的设计是将问题和答案经过BILSTM抽取特征,然后通过问题和答案的特征计算soft  alignment,该矩阵包含了问题和答案相互作用的重要性得分,对该矩阵的列取最大,即可得到答案对问题的重要性得分,而对该矩阵行取最大,即可得到问题对答案的重要性得分

AP-BILSTM算法实验步骤

1:本次实验采用insuranceQA数据,你可以在这里获得。实验之前首先对问题和答案按字切词,然后采用word2vec对问题和答案进行预训练(这里采用按字切词的方式避免的切词的麻烦,并且同样能获得较高的准确率)。

2:由于本次实验采用固定长度的LSTM,因此需要对问题和答案进行截断(过长)或补充(过短)。

3:实验建模Input。本次实验采用问答三元组的形式进行建模(q,a+,a-),q代表问题,a+代表正向答案,a-代表负向答案。insuranceQA里的训练数据已经包含了问题和正向答案,因此需要对负向答案进行选择,实验时我们采用随机的方式对负向答案进行选择,组合成(q,a+,a-)的形式。

4:将问题和答案进行Embedding(batch_size, sequence_len, embedding_size)表示。

5:对问题和答案采用BILSTM模型计算特征Q(sequence_len, batch_size, rnn_size)、 A。

6:通过Q和A计算邻接矩阵G,其中矩阵U是模型学习的参数矩阵。

7:计算问题和答案的attention权重向量,并由该权重向量得到最终的问题和答案的特征。

8:根据问题和答案最终计算的特征,计算目标函数(cosine_similary)。

参数设置:

        1:、这里优化函数采用论文中使用的SGD(采用adam优化函数时效果会差大概1个点)。

        2、学习速率为0.1。

        3:、训练100轮,大概需要5个小时的时间。

        4、margin这里采用0.2,其它参数也试过0.15、0.25效果一般。

        5、这里训练没有采用dropout和l2约束,之前试过dropout和l2对实验效果没有提升,这里就没有采用了。

        6、batch_size为64。

        7、这里问题长度截断为30个字,答案长度截断为100个字。

        8、rnn_size为400(继续调大没有明显的效果提升,而且导致训练速度减慢)

        9、字预训练采用100维。

实验结果对比:

AP-BILSTM:0.665

AP-BILSTM-maxpooling:0.682

AP-BIGRU:0.677

这里尝试了两种不同pooling方式,从结果来看maxpooling会稍微好点,但是整体相差不大。rnn_size都为300时,采用GRU网络结果替换LSTM,实验效果有一定的提升,但是增大rnn_size到400时,GRU网络效果下降,而BILSTM有小幅度的提升。

参考文献

Attentive pooling Networks

如果有任何问题欢迎发送邮件到[email protected]

你可能感兴趣的:(Attention机制在问答系统中的应用--attentive pooling networks)