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

如上图,底层左右两个句子计算相似度;由于是多个角度去解析句子,就采用了多个窗口大小和多个卷积方式来处理句子,是倒数第二层;接着就跟了一个相似度计算层,使用多种计算相似度的方式,如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):x1_concat = tf.concat([ws11_x1, ws12_x1, ws130_x1], 3)x2_concat = tf.concat([ws11_x2, ws12_x2, ws130_x2], 3)x1_flat = tf.reshape(x1_concat, [-1, 1, 3, 100])x2_flat = tf.reshape(x2_concat, [-1, 1, 3, 100])regM_matmul = tf.matmul(x1_flat, x2_flat, transpose_a=True)feah = []for batch in range(50):feah.append(tf.diag_part(regM_matmul[batch][0]))feah_flat = tf.reshape(feah,[-1,1,1,100])return feah_flat

2、 algorithm 2中的feaa同样也只用cos函数结果表示相似度。

def cul_feaa_sim(ws11_x1, ws11_x2, ws12_x1, ws12_x2, ws130_x1, ws130_x2):x1_concat = tf.concat([ws11_x1, ws12_x1, ws130_x1], 3)x2_concat = tf.concat([ws11_x2, ws12_x2, ws130_x2], 3)x1_flat = tf.reshape(x1_concat, [-1, 1, 3, 100])x2_flat = tf.reshape(x2_concat, [-1, 1, 3, 100])regM_matmul = tf.matmul(x1_flat, x2_flat, transpose_b=True)feaa = tf.reshape(regM_matmul,[-1,1,1,9])return feaa


在1、和2、中,卷积和池化的tensor的变化如上图所示,得到的max池化方式的tensor的shape是[batch,1,1,filter_nums],其他池化方式一样。参照下图对各种池化方式计算相似度的直观描述,可以推测出具体的返回结果feah和feaa的shape。

3、而algorithm 2中的feab的卷积方式就和图二不同,而是如下图所示:

因此计算feab的方式知识在feah的基础上改变了tensor的形状,在算法的伪代码中也可以清楚地看出来,因此这里就不在贴出feab的代码,感兴趣的同学可以到该代码的地址下载并运行,观察代码进行分析:

4、写代码的过程中,再次感受到在tensorflow中,对梯度求导、最优化算法这种数学推算要求不高,都已经在tensorflow中封装的很好了,而最重要的就是对数据的处理,将数据从文本信息,一步步变为input的tensor,然后再不停地使用tf.reshape、tf.concat、tf.stack、tf.matmul等函数,就可以构造出一个比较基础的神经网络架构。然后就可以慢慢调参了。

Tensorflow实例-CNN处理句子相似度(MPCNN)相关推荐

  1. 基于GRU和am-softmax的句子相似度模型 | 附代码实现

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言:搞计算机视觉的朋友会知道,am-softmax 是人脸识别中的成果.所以这篇文章就是借鉴人脸 ...

  2. [深度学习]-基于tensorflow的CNN和RNN-LSTM文本情感分析对比

    基于tensorflow的CNN和LSTM文本情感分析对比 1. 背景介绍 2. 数据集介绍 2.0 wordsList.npy 2.1 wordVectors.npy 2.2 idsMatrix.n ...

  3. 基于XGBoost的句子相似度匹配

    问题的定义 项目概述 本项目将会是自然语言处理相关方法的实践,数据集是Kaggle上关于句子相似度匹配的竞赛.涉及到文本类信息的数据清洗和特征工程,在模型方法上将会使用XGBoost.XGBosst方 ...

  4. LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案。 1:采用句子相似度的方式。根据问题的字面相似度选择相似度最

    LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案. 1:采用句子相似度的方式.根据问题的字面相似度选择相似度最 ...

  5. TensorFlow使用CNN实现中文文本分类

    TensorFlow使用CNN实现中文文本分类 读研期间使用过TensorFlow实现过简单的CNN情感分析(分类),当然这是比较low的二分类情况,后来进行多分类情况.但之前的学习基本上都是在英文词 ...

  6. python cnn代码详解图解_基于TensorFlow的CNN实现Mnist手写数字识别

    本文实例为大家分享了基于TensorFlow的CNN实现Mnist手写数字识别的具体代码,供大家参考,具体内容如下 一.CNN模型结构 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5* ...

  7. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...

    如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...

  8. 【NLP】TensorFlow实现CNN用于中文文本分类

    代码基于 dennybritz/cnn-text-classification-tf 及 clayandgithub/zh_cnn_text_classify 参考文章 了解用于NLP的卷积神经网络( ...

  9. 自然语言处理(nlp)之词袋模型及句子相似度

    本博文将会介绍NLP中常见的词袋模型(Bag of Words)以及如何利用词袋模型来计算句子间的相似度(余弦相似度,cosine similarity).   首先,让我们来看一下,什么是词袋模型. ...

最新文章

  1. android 手势放缩_AIR Android:放大与缩小手势
  2. tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解
  3. 微信小程序的多选改变样式_微信小程序button选中改样式-实现单选/多选
  4. 2010 eWEEK 年度产品
  5. 细说ASP.NET Core静态文件的缓存方式
  6. linux3.0-内核自带led驱动移植
  7. macyy_macyy进频道失败怎么办
  8. HDU-4578 Transformation 线段树(两种方法)
  9. TMG 模拟公司网络架构要点
  10. 小程序数据框有重影_关于拖动滚动条编辑框数据重影的问题
  11. PHIL2650 是个好课程
  12. APP分发渠道的竞争分析
  13. 模块式工业机器人柔性自动化生产线实训系统(五站)
  14. MyEclipse破解 CI-2018.9.0版本
  15. 重温51汇编指令(附实验)
  16. 麒麟810处理器_华为携7nm麒麟810处理器 剑指高通
  17. PHP之依赖注入容器pimple
  18. __参加华为新员工培训有感
  19. 王者荣耀头像大小怎么调?调整图片尺寸大小工具分享
  20. 水火不容?研发人员也是产品经理!

热门文章

  1. Url跳转和伪静态html解决方案
  2. JS中“创建对象”及“通过原型创建对象”浅析
  3. FCOS—分割思想做目标检测
  4. 计算机技术网络信息安全
  5. 2022年第七届数维杯大学生数学建模挑战赛报名通知
  6. 亚马逊云科技启示录:创新作帆,云计算的征途是汪洋大海
  7. JS 内存泄漏与垃圾回收机制
  8. 网红蛋糕店整体室内装修施工图+效果图
  9. VMware15虚拟机安装MacOS10.13苹果系统教程
  10. 4.文件系统的类型和结构