SiameseSentenceSimilarity,个人实现的基于Siamese bilstm模型的相似句子判定模型,提供训练数据集和测试数据集.
句子相似度计算是自然语言处理中的一个重要技术手段,主要有两种方法:
1, 基于传统的无监督方式,传统的用于计算句子相似度的方式有很多种,感兴趣的,可以参考我的基于传统方法的句子相似读计算项目:
https://github.com/liuhuanyong/SentenceSimilarity
2, 基于标注数据的句子相似度计算.这个**大体是将句子相似度计算问题转换成一个相似句子类型判定问题,目前经典的方法是Siamese网络,这是本项目的一个初衷.
数据集主要来源于CCKS2018评测项目微众银行客户问句匹配大赛, 总数据集大小为十万条.数据集样式如下:
'''
怎么我开不了微利貸 怎么开不了户 录制不了 提示上传失败 0
亲为什么我的审批不通过的 为什么还款及时会提示综合评估未通过 1
你好,我借款的验证码发到我以前用的那个手机号码了,我该怎么设置呢 手机号码换了 1
“如何获得微粒贷资格” 为什么没微粒贷啊 1
为什么没接到电话 两天了,怎么还没有给我打电话审核? 1
我的电话已改为 绑定的手机号码能不能更改 1
借贷下来时间 10月国庆期间能借钱不 0
什么时候才邀请? 什么时候才能申请 1
上边可借56000元为什么申请不成功 为什么可借一万五,却借不出来 1
1万利息是多少 10个月利息多少 1
没经过审批 如何能通过微众银行审批要求 1
延期3天还款收取逾期利息是多少? 14号还款日,逾期两天手续费是多少? 1
申请的额度能取现吗 取现一次性取完可以吗 0
利息与罚息如何计算 咱这个利息多高啊 1
如何申请货款 怎样开通我微粒贷 1
多久才有贷款 凌晨以后的申请何时到账 1
你好 我要换卡怎么换 我卡掉了 换卡失败 0
'''
模型**:采用典型的siamese网络,两个句子分成左右两个部分进行输入,使用了四层双向lstm(权重共享)进行网络编码,最后计算两个编码之间的距离,最后做预测分类: 一 , 编码层:使用两个双向LSTM进行编码,权重共享
'''搭建编码层网络,用于权重共享'''
def create_base_network(self, input_shape):
input = Input(shape=input_shape)
lstm1 = Bidirectional(LSTM(128, return_sequences=True))(input)
lstm1 = Dropout(0.5)(lstm1)
lstm2 = Bidirectional(LSTM(32))(lstm1)
lstm2 = Dropout(0.5)(lstm2)
return Model(input, lstm2)
二, 左右句子编码相似度计算
'''基于曼哈顿空间距离计算两个字符串语义空间表示相似度计算'''
def exponent_neg_manhattan_distance(self, sent_left, sent_right):
return K.exp(-K.sum(K.abs(sent_left - sent_right), axis=1, keepdims=True))
模型 | 训练集 | 测试集 | 训练集准确率 | 测试集准确率 | 备注 |
---|---|---|---|---|---|
问句匹配 | 80000 | 20000 | 0.8125 | 0.7956 | 20个epcho |
1,句子相似度计算是自然语言处理中的一个重要技术手段,本文简单实现了simamese相似度计算网络.
2,通过LSTM编码,曼哈顿距离作为相似读衡量的网络,在训练集上达到了0.81,测试集达到0.7956的准确率.
3,目前关于相似度计算的网络有很多,本项目是一个基础,后期将逐步学习,尝试其他网络.
4,将传统的相似度计算方式和深度学习网络进行融合,或许是可以做的一个点.
如有自然语言处理、知识图谱、事理图谱、社会计算、语言资源建设等问题或合作,请联系我:
邮箱:lhy_in_blcu@126.com
csdn:https://blog.csdn.net/lhy2014
我的自然语言处理项目: https://liuhuanyong.github.io/
刘焕勇,**科学院软件研究所