- CNN最初用于处理图像问题,但是在自然语言处理中,使用CNN进行文本分类也可以取得不错的效果。
- 在文本中,每个词都可以用一个行向量表示,一句话就可以用一个矩阵来表示,那么处理文本就与处理图像是类似的了。
目录
一、卷积神经网络CNN
图片来源:Convolutional Neural Networks for Sentence Classification
1.模型说明
- 在图像处理中使用不同的滤镜可以使图像凸显出不同的特征,我们把新的图像称为卷积后的特征图(第二层)。
- 将特征图通过pooling层(第三层),这与人眼在看东西的时候会首先看到耀眼的内容一样,通常选取最大值或使用平均值来得到更小的特征图,这有助于计算。
- 加上任意分类器,如SVM,LSTM等。
2.卷积核
- 上述所说的滤镜(filter)就是我们的CNN模型中的卷积核,通过使用卷积核可以将我们的原始矩阵(CNN的第一层)变成CNN的第二层。
- 卷积核是通过学习得到的,不能人工设置,这是很重要的一点,而刚开始的时候卷积核的设置是随机的。
3.CNN4Text
上述模型中是将每个单词作为一个特征向量,使用了二维和三维的卷积核进行Filter,我们也可以使用一整个句子作为特征向量,用一维的Filter进行扫描(1xN),如下图所示:
图片来源:七月在线视频课件(包括下图,原始来源我母鸡的了)
4.两种参数调整问题
- 边界处理:Narrow 和Wide
- Stride size:步伐大小
二、使用实例:word2vec+CNN进行文本分类
1.题目
用每日新闻预测金融市场变化
题目来源:Kaggle竞赛
代码作者:加号
2.数据说明
- Combined_News_DJIA.csv: 作者将数据combine成27列,第一列是日期,第二列是标签,其他25列是每日的前25条新闻,通过热门程度进行排序得来。
- 这是一个二分类问题,‘1’表示这一天的股票值上升或保持不变;‘0’表示下降。
- 训练集和测试集的比例是8:2
3.数据预处理
①导入所需要的库
import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score
from datetime import date
②读入数据
data = pd.read_csv('./Combined_News_DJIA.csv')
可以通过data.head()
查看数据的长相
③分割数据集
train = data[data['Date'] < '2015-01-01']
test = data[data['Date'] > '2014-12-31']
④处理数据集