CNN用于文本分类

本文介绍了卷积神经网络用于句子分类的算法,适合于短文本,可见的应用场景如微博的情感分析,商品标题的标签分类等。

paper:

http://www.aclweb.org/anthology/D14-1181

Convolutional Neural Networks for Sentence Classification

传统分类做法

传统的特征提取:如TF-IDF、互信息、信息增益等提取关键词后使用Bag-of-words,再使用LR等分类器进行分类。
或者之前所讲的fasttext,对词训练完成后进行avg或者max,再全连接一个softmax进行分类,
或者mikolov的sentence vector,单独训练每个句子的vector。

CNN for text classification

CNN用于文本分类_第1张图片
CNN模型结构
  1. 一个长度为n的句子被视为n个word的拼接(concatenation),每个word 的embedding有k维,则concat后的句子表示为一个N x k的矩阵,即神经网络的输入

  2. 由于图像是二维(长和宽)三通道(RGB),而句子是一维的(word按顺序拼接)(可以N通道,使用L种不同的embedding方法,就可以形成L层输入为N x k的矩阵),因此这里的CNN的filter(卷积核)的大小都为h x k ,即每个filter扫过的区域是从上往下覆盖到一个word的所有embedding长度

  3. 因此选取几个不同大小(h不同的)filter去学习句子的特征。

每个filter(这里表示为w)所学习到的特征即如下表示:
filter.png
卷积计算
CNN用于文本分类_第2张图片
conv.gif

这里的思想和图像中的CNN一样,每个filter相当于去学习图片的纹理(比如边,角,圆弧),如果在图片这一片区域出现了相同的纹理,则这一片学习到的特征的取值会变的很大。

上图为一个卷积核的卷积操作,即学习该图片的哪一部分有卷积核所检测的特征,该图的卷积核可以看做一个X形状的特征,去匹配image矩阵中哪个部位有类似的X形状,显然越像X的部位得分越高。

而在NLP文本中,每个卷积核去学习一种文本上隐藏的特征(比如去学习不喜欢 not like,sick of,hate),如果扫过的整一块window表达了类似的特征,就会在这个卷积核的取值上变大而显现出来。
每个filter扫一遍句子,可以得到这个filter的feature map,因为filter的窗口长度为h,所以feature map中共得到n-h+1个feature

Pooling:

在得到每个卷积核的feature map之后,要做一个max-pooling,即max(c)


CNN用于文本分类_第3张图片
pooling.jpg

Pooling的用处是:
1.使长度不同的sentence经过这个卷积核后得到的特征都为1维
2.抓住不变性,比如一个卷积核是用来检测是否存在not like这样的负面评论,则不论出现该模式出现在句子的哪里,前面还是后面,这个卷积核都能取得很高的卷积值。

当然Pooling会损失句子的order信息,比如最显著的模式出现的位置(句子的前面还是后面),因此又多种基于Pooling的优化:如k-max pooling(保留feature map中K个最大的值)或者dynamic k-max pooling (sentence分为几段,每一段取一个最大值)

可以详见这篇blog:自然语言处理中CNN模型几种常见的Max-Pooling操作http://blog.csdn.net/malefactor/article/details/51078135

1 filter = 1 feature ,这里使用多种不同长度的filter (相当于捕捉n-gram的信息)来获得多个features,最终经过一个softmax分类器来进行分类。

experiment:

paper中的任务一共使用了300个卷积核(h=3,4,5 各100),去捕捉sentence的300种特征 (CNN的特点,卷积核也在训练过程中进行迭代,相当于特征模式匹配是自己训练生成的,比如做情感分类,很多pos/neg的文本特征会被自动学习;而做短文本的类目划分,则卷积核会去自动训练成去识别与体育、娱乐等相关的词组)

总结

CNN-text 使用了CNN的各种常见特征Matrix-Filter-Pooling-Softmax
Matrix:将一维的句子变成二维的矩阵
Filter : 卷积核去学习句子在具体任务上的模式
Pooling : 池化,特征数量保持一致与不变性
Softmax:全连接,根据任务做2~n分类
可以作为文本分类的一个较强baseline,当然作为神经网络的一种,调参较为繁琐,如果追求效率,选择fasttext更为轻量。

参考

http://geek.csdn.net/news/detail/189196 淘宝应用场景-基于商品标题短文本分类
https://zhuanlan.zhihu.com/p/29076736 基于word2vec和CNN的文本分类

你可能感兴趣的:(CNN用于文本分类)