paper链接 https://arxiv.org/abs/1408.5882
阅读这篇paper的一些笔记:
Abstract
本文将CNN和NLP结合;
介绍了一系列的对比实验,实验结果说明了:
- 一个简单的(单层神经网络)的CNN模型
- 一点超参数的调节(Filter的个数)
- static word vector
文本分类的效果很好
non-static就是词向量随着模型训练变化,这样的好处是词向量可以根据数据集做适当调整
static就是直接使用word2vec训练好的词向量即可
卷积之后得到的列向量维度也是不同的,可以通过pooling来消除句子之间长度不同的差异
Introduction
主要是介绍了CNN近年来在NLP领域有一些发展
Model
这是本文的模型,基本也就是CNN的结构
左边是一个n*k的矩阵,表示一句话的n个词语,每个词语是一个k维向量
(这里word2vec)
然后设置一个滑窗的长度h,用这个滑窗滑过整个矩阵,然后通过下面这个公式的计算,算出h对应的一个特征的向量c
w是权重,b是偏移量
f就是一个非线性函数
(卷积核)
形成这个向量,称为feature map
我们可以通过改变h的大小,生成很多feature maps
然后对于每个feature map,采取选出这个向量中的最大值,(意在找到最重要的特征)
同时也解决了每个feature map不等长,统一了维度的问题
然后再将这个传递到 全连接层
这是一个softmax层(因为涉及到句子的分类问题)
输出的就是对于不同的label的概率分布
数据集相对较小,很容易就会发生过拟合现象
所以这里引如dropout来减少过拟合现象。
就是产生一定的概率来mask掉一些点
Regularization
这里用到了dropout和l2正则项,避免过拟合
dropout就是将pooling之后的结果随机mask一部分值
比如,我们在这里pooling之后的结果是z,我们将z处理成y之后向前传递的时候,
然后我们就做一个 and 操作
每一次梯度下降,调整参数的时候,依靠这个阈值s来约束中间的参数
Result
这里是一些数据集
然后作者对比了自己的模型和其他下面很多模型的表现,发现效果很好;
在这里,rand是一个随机的词向量模型
static 就是用pre-trained word2vec词向量
non-static 就是会根据specific task来调整词向量(这里也不太清楚)
multichannel就是两种混合来用
Conclusion
CNN在NLP的一个尝试,并且效果还不错
说明了,pre-trained的word vector 是deep learning在NLP领域重要的组成部分
提特征不同,我纠结于很多中间过程,但是了解的不多,或者思维习惯,
- Ref