现在自然语言处理用深度学习做的比较多,我还没试过用传统的监督学习方法做分类器,比如SVM、Xgboost、随机森林,来训练模型。因此,用Kaggle上经典的电影评论情感分析题,来学习如何用传统机器学习方法解决分类问题。
通过这个情感分析的题目,我会整理做特征工程、参数调优和模型融合的方法,这一系列会有四篇文章。这篇文章整理文本特征工程的内容。
文本的特征工程主要包括数据清洗、特征构造、降维和特征选择等。
首先是数据清洗,比如去停用词、去非字母汉字的特殊字符、大写转小写、去掉html标签等。
然后是特征构建,可以基于词袋模型构造文本特征,比如向量空间模型的词频矩阵、Tf-Idf矩阵,又比如LSA和LDA,也可以用word2vec、glove等文本分布式表示方法,来构造文本特征。此外还可以用n-gram构造文本特征。
接下来可以选择是否降维,可以用PCA或SVD等方法对文本特征矩阵进行降维。
最后选择效果比较突出的1个或几个特征来训练模型。
一、基于向量空间模型的文本特征表示
向量空间模型(Vector Space Model,VSM)也就是单词向量空间模型,区别于LSA、PLSA、LDA这些话题向量空间模型,但是单词向量空间模型和话题向量空间模型都属于词袋模型,又和word2vec等文本分布式表示方法相区别。
向量空间模型的基本想法是:给定一个文本,用一个向量表示该文本的语义,向量的每一维对应一个单词,其数值是该单词在该文本中出现的频数或Tf-Idf。那么每个文本就是一个向量,特征数量为所有文本中的单词总数,通过计算向量之间的余弦相似度可以得到文本的相似度。
而文本集合中的所有文本的向量就会构成一个单词-文本矩阵,元素为单词的频数或Tf-Idf。
在我们这个Kaggle案例中,单词-文本矩阵的行数为样本的数量,列数为单词的数量,训练集中样本有25000条,选取最高频的5000个单词,故矩阵X是(25000,5000)的矩阵。我们以词频和Tf-Idf作为文本特征,计算出两个单词-文本矩阵,然后分别训练随机森林二分类器。
首先导入所需要的库。
import os,re import numpy as np import pandas as pd from bs4 import BeautifulSoup from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.ensemble import RandomForestClassifier from sklearn import metrics import nltk from nltk.corpus import stopwords