Siamese-LSTM (孪生网络)

最近因为公司leader的要求,简单研究了一下孪生网络(Siamese LSTM,一个用来计算句对相似度的模型)。

背景

  • 孪生网络的思想比较简单,是分别利用LSTM对待比较的句对中句子进行建模,然后计算两个隐层向量的曼哈顿距离(Manhattan distance)来评价句子相似度。由于LSTM建模过程一致,因此可以用全部句子训练LSTM的参数,然后参数共享给左右两个LSTM网络。

要点

  • 1.将句子建模网络从LSTM改造为Bi-LSTM+Attention
  • 2.中文训练数据为蚂蚁金服句对数据,约4万组,正负样本比例1:3.6;英文训练数据来自Kaggle上的Quora句对数据,约40万组,比例1:1.7。翻译数据指使用Google Translator将Quora数据翻译成中文(机翻,质量一般)。

资料

代码

结果

1
2
3
4
5
6
7
8
9
$ 根据数据比例来看,中文训练集的基准准确率应为0.783,英文与翻译数据为0.630
$ =================================================================================================
$ 中文 数据实际训练 5 轮时的效果:使用随机词向量时,训练集十折交叉0.778;使用CN120G词向量时,训练集十折交叉0.789
$ 英文 数据实际训练 5 轮时的效果:使用随机词向量时,训练集十折交叉0.774;使用Google词向量时,训练集十折交叉0.771
$ 翻译 数据实际训练 5 轮时的效果:使用随机词向量时,训练集十折交叉0.755;使用CN120G词向量时,训练集十折交叉0.756
$ =================================================================================================
$ 中文 数据实际训练 8 轮时的效果:使用随机词向量时,训练集十折交叉0.777;使用CN120G词向量时,训练集十折交叉0.787
$ 英文 数据实际训练 8 轮时的效果:使用随机词向量时,训练集十折交叉0.774;使用Google词向量时,训练集十折交叉0.778
$ 翻译 数据实际训练 8 轮时的效果:使用随机词向量时,训练集十折交叉0.786;使用CN120G词向量时,训练集十折交叉0.786

总结

1.有无预训练词向量几乎不影响结果。
2.中文数据上训练几乎没有效果,和英文形成鲜明对比–这是因为蚂蚁金服数据间太相似了或者数据量太小,翻译数据集上的实验证明了这一点。
3.孪生网络的效果没有想象中的那么好,后续还会继续从调参、加停用词等角度进行研究。此外,之前在QA机器人中用CNN来做句子语义匹配时缺少数据,现在这里的数据可以用了!233