神经网络与深度学习LSTM深度学习·神经网络·计算机视觉

LSTM_CNN在问答系统中的应用

2017-03-11  本文已影响1537人  lirainbow0

前面的随笔中,已经分别介绍了CNN算法和LSTM算法在问答系统中的应用。其中LSTM算法在抽取特征之后,针对不同时序产生的特征状态,做max-pooling或者avg-pooling获得最终的特征。无论是max-pooling或者avg-pooling只是对不同的特征做出最后的选择,因此这里我们可以采用一些其他的技巧对特征进行选择。本次实验即时对这里的特征选择进行改造,采用CNN算法的结构对所有的时序特征做出最后的选择,即LSTM_CNN算法。整个算法的流程图如下:

LSTM_CNN算法

实验步骤

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:对问题和答案采用相同的LSTM模型计算特征(sequence_len, batch_size, rnn_size)。

6:对时序的LSTM特征进行选择,这里采用CNN算法(卷积+最大池)。

7:采用问题和答案最终计算的特征,计算目标函数(cosine_similary)。

目标函数

参数设置

1:、这里优化函数采用论文中使用的SGD。

2、学习速率为0.05。

3:、训练300轮。

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

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

6、batch_size这里采用128。

7、rnn_size为200。

8、filter_size为1、2、3(相比1、2的组合效果稍好),num_filter为500.

9、目标函数采用cosine_similary,实验时也试过欧几里德距离,但是效果不佳。

实验效果对比

QA_CNN:0.62左右

QA_LSTM:0.66左右

QA_LSTM_CNN:0.67左右

:这里只做了单向的LSTM_CNN,和单向的LSTM算法相比,效果提升大概为1%左右。

如果有任何问题欢迎发送邮件到lirainbow0@163.com。

上一篇下一篇

猜你喜欢

热点阅读