简介
- 文本情感分析项目主要是针对语言用户提供的评论,通过算法自动来判断此评论十正面还是负面评论。
- 情感分析是文本处理领域的经典问题。
主要的步骤
- 数据的抓取:通过爬虫抓取相关文本数据
- 数据的清洗/预处理:
- 读取数据。将每一条评论转化成list里面的一个元素,所以再train_comment里面,一条就是一个评论。
- 清洗数。据存储的过程,剔除掉多余的html标签,一般都要用str.strip('\n'),剔除掉前后的空格号。
- 特殊符号的替换。对特殊符号的处理:例如?@#¥%……这些,都可以用re.sub替换掉。一般替换成空格吧。
- 数字的替换。将数字转化为 NUM,注意前后要有空格。也是用re.sub('\d+',' NUM ',text)
- 去掉多余的停用词。利用jieba先对每个comment进行分词,然后再用循环语句找到非停用词的词,再' '.join()加上空格连接在一起。这样依旧是一个comment一个元素,只是所有的词都被jieba分词,再合并了。为了下一步的转换成词向量
- 可以一些可视化分析。(见仁见智)
- 文本转化成向量(特征工程)。
- 用tf-idf来做。sklearn的库的链接。tf-idf,简单来说就是再one-hot的基础上,对于一些词出现的频率给了权重,出现越少的词,其实越重要。
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_model = TfidfVectorizer().fit(train_comments_cleaned)
X_train = tfidf_model.transform(train_comments_cleaned)# 训练数据的特征
y_train = train_labels# 训练数据的label
X_test = tfidf_model.transform(test_comments_cleaned)# 测试数据的特征
y_test = test_labels# 测试数据的label
print(X_train[0],y_train[0])
print (np.shape(X_train), np.shape(X_test), np.shape(y_train), np.shape(y_test))
注意:对于训练数据调用fit_transform, 也就是训练的过程。但是我们要用训练集取训练模型,将测试集进行转化。
- 模型选择与参数选择。(与一般的建模过程一样)
- 选择模型。逻辑回归,朴素贝叶斯,SVM。
- 利用网格搜索GridSearchCV
选出最好的参数组合。但是网格搜索很慢,这一点需要注意。
from sklearn.model_selection import GridSearchCV
from sklean.linear_model import LogisticRegression
# 定义需要的超参数
params_c = np.logspace(-1,1,20) #0.01~10,20步
lr = LogisticRegression(penalty = 'l2')
# 三折交叉验证集,评价指标是f1-score
grid_model = GridSearchCV(lr,{'C':params_c},cv = 3,n_jobs = -1,scoring = 'f1')
grid_model.fit(X_train,y_train)
# best_params_就是网格搜索找到的最佳参数
print(grid_model.best_params_)
# 直接再这个网格搜索的最佳结果模型上面进行预测测试集
predictions = grid_model.predict(X_test)
同理,其他的模型也是一样的。
- 模型评价。
from sklearn.metrics import classification_report
print(classification_report(y_test, predictions))
image.png
网友评论