自然语言处理 | (6) 基于英文文本的简易情感分析
在本片博客中我们结合之前讲的工具库、sklearn以及pandas,来构建一个简易的情感分析模型。情感分析属于分类任务,即为文本分配情感标签,我们将使用简单的逻辑回归模型来实现这个多分类任务。
目录
1.加载数据
2.数据预处理
3.模型训练
完整代码
1.加载数据
data = pd.read_csv("./data/emotion_data.csv")
print(data.shape)
print(data.head()) #content是推特内容 sentiment是情感
print(data['sentiment'].unique())#不同的情感种类
print(len(data['sentiment'].unique()))#不同的情感种类数量 13分类
2.数据预处理
# 去掉无关列
data = data.drop(['tweet_id','author'],axis=1)
#或data = data.drop(data.columns[[0,2]], axis=1)
print(data.head())
print(data.shape)
#对content字段的所有文本进行分词,去除停用词 提取词干stemmer
import nltk
from nltk import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
print(data['content'][0]) #content字段的第一条文本 处理之前
def preprocessing(text):#分词token_words = word_tokenize(text)#去除停用词stop_words = stopwords.words('english')fileter_words = [word for word in token_words if word not in stop_words]#stemmerstemmer = PorterStemmer()fileterStem_words = [stemmer.stem(word) for word in fileter_words]return ' '.join(fileterStem_words) #返回一个字符串 以空格间隔#使用apply对content字段的所有文本进行处理 矢量化编程 避免显式for循环 速度快
data['content'] = data['content'].apply(preprocessing)
print(data['content'][0])#content字段的第一条文本 处理之后
dataset = data.as_matrix() #将DataFrame转换为矩阵/2维数组
print(dataset.shape)
#提取特征(第2列 处理后的文本)
features = dataset[:,1]
print(features[100])
#提取标签/sentiment(第1列)
target = dataset[:,0]
# 使用LabelEncoder对不同的情感target进行编码 把不同的情感转换为数字
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
print(target)
target_processed = le.fit_transform(target)
print(target_processed)
print(le.classes_) #anger对应数字0 依次类推
# 对输入的文本进行特征抽取和表示(这里用到的tf-idf特征之后会学习)
#数字化 把文本表示成特征向量(1*42725维的稀疏向量)
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
X_processed = tfidf.fit_transform(features)
print(X_processed.shape) #特征矩阵 40000条文本 每行代表一个文本的特征向量
print(X_processed[0].shape)
print(X_processed[0]) #稀疏向量
#切分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_processed, target_processed, test_size=0.25, random_state=42)
3.模型训练
from sklearn.linear_model import LogisticRegression
#使用简单的逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
直接使用sklearn中逻辑回归模型的默认参数,当然也可以手动设置一些超参数,再额外划分一个验证集,进行超参数调试,选出一个最好的模型,最后在测试集上进行评估。
逻辑回归主要用来解决2分类问题,也可以用来解决多分类,2分类可以看作多分类的特殊情况。通过multi_class参数进行设置,默认是'ovr' :one vs. rest,此时多分类就相当于训练多个2分类器(logistic回归分类器),进行多次2分类,每次把其中一个类当作正类,其余所有类作为负类,然后进行多数投票,决定样本的类别,本例中的13分类要进行13次2分类(2分类时只需要训练一个2分类器,进行一次2分类即可);当然也有不同的选择,如‘multinomial’,此时应用逻辑回归在多分类上的推广形式,即softmax回归(把sigmoid函数替换为softmax函数),训练一个多分类器,直接进行多分类。
可以在LogisticRegression中查看各个参数的详细说明。
# 模型评估
lr.score(X_test, y_test)
可以看到模型在测试集上的准确率不是很高,只有35.3%;因为我们采用的模型太过于简单,之后我们还会学习更加复杂高级的模型,届时将会取得更好的效果。
# 模型预测
test_ex = "It is so horrible"
test_ex = preprocessing(test_ex)
text_ex_processed = tfidf.transform([test_ex])
print(lr.predict(text_ex_processed)) #预测的情感索引
print(le.classes_[lr.predict(text_ex_processed)]) #预测的情感
自然语言处理 | (6) 基于英文文本的简易情感分析相关推荐
- NLP自然语言处理之基于BiLstm的短文本情感分析
1.BILSTM基本原理 前向的LSTM与后向的LSTM结合成BiLSTM.比如,我们对"我爱中国"这句话进行编码,模型如图1所示. 2.情感分析步骤 收集数据:爬虫爬取 数据预处 ...
- 【自然语言处理NLP】中文语料整理【情感分析、文本分类、摘要、实体分析】
中文NLP语料整理 新闻文本分类语料 情感分析语料 实体分析语料 垃圾分类语料 个人开发在做很多NLP相关任务的时候,语料的寻找十分头疼. 有很多公开的语料,被他人收费,或要积分下载等等. 对平时开发 ...
- 《文本大数据情感分析》读书报告
<文本大数据情感分析>(高凯 徐华 王九硕 岳重阳 高成亮著)一书介绍社交网络等海量异构信息采集算法:对文本挖掘与自然语言处理中涉及到情感分析.微博情绪诱因分析.电商产品评价与意见挖掘等内 ...
- python毕业设计开题报告-基于python爬虫的影评情感分析研究开题报告
论文(设计)题目 基于python爬虫的影评情感分析研究开题报告 选题的背景.意义及研究现状: 研究现状: 文本情感分析又称倾向性分析.情感挖掘,主观分析或评论挖掘,是对带有情感色彩的评论文本内容进行 ...
- 基于Cemotion的在线评论情感分析及准确率验证(准确率:96%)
前段时间找到了Cemotion这个NLP第三方库,发现它准确率高的惊人,Cemotion算法的优点在于准确率高.调用方便,缺点是运行较慢(相比其他NPL算法).环境配置(自动安装TensorFlow环 ...
- HanLP 基于SVM支持向量机 进行 ChnSentiCorp 情感分析
一.ChnSentiCorp情感分析酒店评论数据集 ChnSentiCorp情感分析酒店评论数据集是一个标注了情感的数据集,分了负面和正面两类,下载地址: http://file.hankcs.com ...
- pyhanlp 文本分类与情感分析
这一次我们需要利用HanLP进行文本分类与情感分析.同时这也是pyhanlp用户指南的倒数第二篇关于接口和Python实现的文章了,再之后就是导论,使用技巧汇总和几个实例落.真是可喜可贺啊. 文本分类 ...
- 基于 CNN 的中文对话情感分析
1 基于 CNN 的中文对话情感分析:https://www.jianshu.com/p/87ca0616f1a4 2 清华 ACL 2020 长文 | KdConv:多领域知识驱动的中文多轮对话数据 ...
- 基于IMDB评论数据集的情感分析
文章目录 前言 一.大型电影评论数据集介绍 二.环境配置 三.实验模型及流程 1.实验模型 2.实验流程 四.实验代码 1.多层感知器模型代码 2.递归神经网络模型代码 3.长短期记忆模型代码 五.实 ...
最新文章
- 华为自动驾驶实车实路测试视频曝光!
- 为了写论文给 Linux “投毒”,导致整个大学都被 Linux 拉黑!
- 将ResultSet转为List
- 【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)
- es6 Promise.race()方法
- SAP-FI-财务报表版本设定
- 关于Word插入图片闪退
- HCU混动控制器,HEV串并联(IMMD) 混动车辆 simulink stateflow模型包含工况路普输入,驾驶员模型
- EXCEL实用技巧-多条件求和、多条件计数、多条件查找
- F005MyBatis学习笔记-MyBatis的多表关联查询
- Python pandas库|任凭弱水三千,我只取一瓢饮(4)
- 【arduino从入门到放肆】⑥Arduino 小台灯
- 取消高速省界收费站驶入“快车道”,我们距智能交通还有多远?
- Ogre个人初步学习总结
- 服务器Connections could not be acquired from the underlying database错误
- 磐石云服务器_磐石云双十二高防ip、海外服务器限量1元秒杀
- 滑块验证码通杀方案--python破解代码
- 【Unity3d】(二) Unity3D--光的反射与折射实现
- python progressbar2_python progressbar2 使用
- 录音怎么转换成文字?这个方法打工人必学