模型结构与原理

1. 基于CNN的句子建模

这篇论文主要针对的是句子匹配(Sentence Matching)的问题,但是基础问题仍然是句子建模。首先,文中提出了一种基于CNN的句子建模网络,如下图:

图中灰色的部分表示对于长度较短的句子,其后面不足的部分填充的全是0值(Zero Padding)。可以看出,模型解决不同长度句子输入的方法是规定一个最大的可输入句子长度,然后长度不够的部分进行0值的填充;图中的卷积计算和传统的CNN卷积计算无异,而池化则是使用Max-Pooling。

  • 卷积结构的分析

下图示意性地说明了卷积结构的作用,作者认为卷积的作用是从句子中提取出局部的语义组合信息,而多张Feature Map则是从多种角度进行提取,也就是保证提取的语义组合的多样性;而池化的作用是对多种语义组合进行选择,过滤掉一些置信度低的组合(可能这样的组合语义上并无意义)。

2. 基于CNN的句子匹配模型

下面是基于之前的句子模型,建立的两种用于两个句子的匹配模型。

2.1 结构I

模型结构如下图:

简单来说,首先分别单独地对两个句子进行建模(使用上文中的句子模型),从而得到两个相同且固定长度的向量,向量表示句子经过建模后抽象得来的特征信息;然后,将这两个向量作为一个多层感知机(MLP)的输入,最后计算匹配的分数。

这个模型比较简单,但是有一个较大的缺点:两个句子在建模过程中是完全独立的,没有任何交互行为,一直到最后生成抽象的向量表示后才有交互行为(一起作为下一个模型的输入),这样做使得句子在抽象建模的过程中会丧失很多语义细节,同时过早地失去了句子间语义交互计算的机会。因此,推出了第二种模型结构。

2.2 结构II

模型结构如下图:

图中可以看出,这种结构提前了两个句子间的交互行为。

  • 第一层卷积层

  首先从Sentence x中任取一个向量xa,再从Sentence y中将每一个向量和xa进行卷积操作

同理以上操作,将两个句子中所有的向量两两组合,构成2D向量,构成Layer-2。下面给出数学形式化表述:

  • 第一层卷积层后的Max-Pooling层

从而得到Layer-2,然后进行2×2的Max-pooling:

  • 后续的卷积层

后续的卷积层均是传统的二维卷积操作,形式化表述如下:

  • 二维卷积结果后的Pooling层

与第一层卷积层后的简单Max-Pooling方式不同,后续的卷积层的Pooling是一种动态Pooling方法,这种方法来源于参考文献[1]。

  • 结构II的性质
  1. 保留了词序信息;
  2. 更具一般性,实际上结构I是结构II的一种特殊情况(取消指定的权值参数);

实验部分

1. 模型训练及参数

  • 使用基于排序的自定义损失函数(Ranking-based Loss)
  • BP反向传播+随机梯度下降;
  • mini-batch为100-200,并行化;
  • 为了防止过拟合,对于中型和大型数据集,会提前停止模型训练;而对于小型数据集,还会使用Dropout策略;
  • Word2Vector:50维;英文语料为Wikipedia(~1B words),中文语料为微博数据(~300M words);
  • 使用ReLu函数作为激活函数;
  • 卷积窗口为3-word window;
  • 使用Fine tuning;

2. 实验结果

一共做了三个实验,分别是(1)句子自动填充任务,(2)推文与评论的匹配,以及(3)同义句识别;结果如下面的图示:

其实结构I和结构II的结果相差不大,结构II稍好一些;而相比于其他的模型而言,结构I和结构II的优势还是较大的。

《Convolutional Neural Network Architectures for Matching Natural Language Sentences》句子匹配的更多相关文章

  1. Convolutional Neural Network Architectures for Matching Natural Language Sentences

    interaction  n. 互动;一起活动;合作;互相影响 capture vt.俘获;夺取;夺得;引起(注意.想像.兴趣)n.捕获;占领;捕获物;[计算机]捕捉 hence  adv. 从此;因 ...

  2. 《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》

    代码: keras:https://github.com/phdowling/abcnn-keras tf:https://github.com/galsang/ABCNN 本文是Wenpeng Yi ...

  3. 1 - ImageNet Classification with Deep Convolutional Neural Network (阅读翻译)

    ImageNet Classification with Deep Convolutional Neural Network 利用深度卷积神经网络进行ImageNet分类 Abstract We tr ...

  4. 论文翻译:2019_TCNN: Temporal convolutional neural network for real-time speech enhancement in the time domain

    论文地址:TCNN:时域卷积神经网络用于实时语音增强 论文代码:https://github.com/LXP-Never/TCNN(非官方复现) 引用格式:Pandey A, Wang D L. TC ...

  5. 论文阅读(Weilin Huang——【TIP2016】Text-Attentional Convolutional Neural Network for Scene Text Detection)

    Weilin Huang--[TIP2015]Text-Attentional Convolutional Neural Network for Scene Text Detection) 目录 作者 ...

  6. 《Bilateral Multi-Perspective Matching for Natural Language Sentences》(句子匹配)

    问题: Natural language sentence matching (NLSM),自然语言句子匹配,是指比较两个句子并判断句子间关系,是许多任务的一项基本技术.针对NLSM任务,目前有两种流 ...

  7. 论文翻译:2020_FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions

    论文地址:FLGCNN:一种新颖的全卷积神经网络,用于基于话语的目标函数的端到端单耳语音增强 论文代码:https://github.com/LXP-Never/FLGCCRN(非官方复现) 引用格式 ...

  8. 卷积神经网络(Convolutional Neural Network,CNN)

    全连接神经网络(Fully connected neural network)处理图像最大的问题在于全连接层的参数太多.参数增多除了导致计算速度减慢,还很容易导致过拟合问题.所以需要一个更合理的神经网 ...

  9. Convolutional Neural Network in TensorFlow

    翻译自Build a Convolutional Neural Network using Estimators TensorFlow的layer模块提供了一个轻松构建神经网络的高端API,它提供了创 ...

随机推荐

  1. wireshark 表达式备忘录

    参考资料: https://blog.csdn.net/wojiaopanpan/article/details/69944970 wireshark分两种表达式,一种是捕获表达式,这个是在捕获时用的 ...

  2. CF 1073C Vasya and Robot(二分答案)

    C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  3. Unity3D笔记 NUGUI 一

    NGUI是严格遵循KISS原则(KISS原则,keep it simple and stupid ,简单的理解这句话就是,要把一个系统做的连白痴都会用.这就是用户体验的高层境界了,好听的说法也是有的, ...

  4. Unity3D笔记 GUI 二 、实现选项卡一窗口

    实现目标: 1.个性化Box控件 2.新建TextAmount样式 3.新建TextItem样式 一.个性化Windows界面 设置GUI Skin 1.2 部分代码 Rect stateBox = ...

  5. 找到多个与名为“xxx”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间以搜索与此请求相匹配的控制器,则会发生这种情况。

    一次在建MVC 项目的进行开发的时候,因为后来想到了一个更好的项目名称,就把 Web项目的名称重命名 改了, 然后 程序集名称,默认命名空间,都改成新的了,刚建立的项目本身也不大,运行起来,总是报 & ...

  6. Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR

    Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR 参考博文:http://blog.csdn.net/u79501/article/details/68942174 http ...

  7. Python面向对象:类、实例与访问限制

    首先记录下面向对象的名词: 对象:python万物皆对象,程序设计的东西在对象上体现. 类:具有相同属性和行为的对象的集合. 消息:各个对象之间通过消息相互联系. 方法:对象功能实现的过程. 封装:把 ...

  8. 机器学习TensorFlow安装经过摘要

    第一步:我在Github上面下载了TensorFlow项目源码 第二步:在tensorflow-master/tensorflow/docs_src/install里面找到了install_mac.m ...

  9. C#中DataSet、DataTable、DataReader的区别

    简单说就是:     DataSet:数据集.一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable         DataTable:数据表 ...

  10. 【linux & &&命令】&后台(并行)命令 &&串行命令

    & 放在一个命令末尾,可以将这个命令放到后台执行.放到后台后主进程将继续向下执行,后台命令将与主进程并行执行. &&  放在一个命令末尾,与什么都没有单纯换行实际效果相同,等待 ...