首页 > 科技 >

机器不学习:Tensorflow实例-CNN处理句子相似度

2018-08-20 07:17:29 网络整理 阅读:183 评论:0

机器学习 www.jqbxx.com : 深度聚合机器学习、深度学习算法及技术实战

前两篇使用CNN处理句子相似度的文章,实际上使用了很简单的CNN模型,按照自己对CNN的理解实现了代码。完成以后,就开始翻阅论文,想了解一些经典的处理句子相似度的方法。 这篇文章 发表在仅次于ACL会的EMNLP会议上,使用多个粒度窗口大小的卷积滤波器,后面跟着多种类型的池化方式,目的是为了从多个角度去解析句子(Multi-perspective),尽可能多的提取句子的语义和句法结构,具体的方式大家可以参阅论文,这里给出一个 实验室同学 找到的关于本篇文章的具体卷积和池化的tensor变化PDF,在此感谢刘同学对我的指导,顺利完成本篇代码,代码已上传github。

机器不学习:Tensorflow实例-CNN处理句子相似度

如上图,底层左右两个句子计算相似度;由于是多个角度去解析句子,就采用了多个窗口大小和多个卷积方式来处理句子,是倒数第二层;接着就跟了一个相似度计算层,使用多种计算相似度的方式,如cos函数和第一第二欧氏距离;接着就再跟一个全连接层,用来调整输出。

1、闲话不多说,来看代码,具体实现的时候只采用了一种计算相似度的方法,就是cos函数,再加两种方法跟该方法类似。由此就可以计算出论文中algorithm 1中的feah的大小。这里值得一提的是tf.diag_part()函数,取对称矩阵的对角元素作为一个新的向量,因为我们只需要对应channel的相似度,所以只取对角元素就可以了。

注意feah的tensor的shape为[batch,1,1,filter_nums]

# ws11_x1 窗口大小为ws1 = 1,句子x1的tensor

# ws130_x2 窗口大小为ws1 = 30, 句子x2的tensor

def cul_feah_sim(ws11_x1, ws11_x2, ws12_x1, ws12_x2, ws130_x1, ws130_x2):

相关文章