在本片博客中我们结合之前讲的工具库、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) 基于英文文本的简易情感分析相关推荐

  1. NLP自然语言处理之基于BiLstm的短文本情感分析

    1.BILSTM基本原理 前向的LSTM与后向的LSTM结合成BiLSTM.比如,我们对"我爱中国"这句话进行编码,模型如图1所示. 2.情感分析步骤 收集数据:爬虫爬取 数据预处 ...

  2. 【自然语言处理NLP】中文语料整理【情感分析、文本分类、摘要、实体分析】

    中文NLP语料整理 新闻文本分类语料 情感分析语料 实体分析语料 垃圾分类语料 个人开发在做很多NLP相关任务的时候,语料的寻找十分头疼. 有很多公开的语料,被他人收费,或要积分下载等等. 对平时开发 ...

  3. 《文本大数据情感分析》读书报告

    <文本大数据情感分析>(高凯 徐华 王九硕 岳重阳 高成亮著)一书介绍社交网络等海量异构信息采集算法:对文本挖掘与自然语言处理中涉及到情感分析.微博情绪诱因分析.电商产品评价与意见挖掘等内 ...

  4. python毕业设计开题报告-基于python爬虫的影评情感分析研究开题报告

    论文(设计)题目 基于python爬虫的影评情感分析研究开题报告 选题的背景.意义及研究现状: 研究现状: 文本情感分析又称倾向性分析.情感挖掘,主观分析或评论挖掘,是对带有情感色彩的评论文本内容进行 ...

  5. 基于Cemotion的在线评论情感分析及准确率验证(准确率:96%)

    前段时间找到了Cemotion这个NLP第三方库,发现它准确率高的惊人,Cemotion算法的优点在于准确率高.调用方便,缺点是运行较慢(相比其他NPL算法).环境配置(自动安装TensorFlow环 ...

  6. HanLP 基于SVM支持向量机 进行 ChnSentiCorp 情感分析

    一.ChnSentiCorp情感分析酒店评论数据集 ChnSentiCorp情感分析酒店评论数据集是一个标注了情感的数据集,分了负面和正面两类,下载地址: http://file.hankcs.com ...

  7. pyhanlp 文本分类与情感分析

    这一次我们需要利用HanLP进行文本分类与情感分析.同时这也是pyhanlp用户指南的倒数第二篇关于接口和Python实现的文章了,再之后就是导论,使用技巧汇总和几个实例落.真是可喜可贺啊. 文本分类 ...

  8. 基于 CNN 的中文对话情感分析

    1 基于 CNN 的中文对话情感分析:https://www.jianshu.com/p/87ca0616f1a4 2 清华 ACL 2020 长文 | KdConv:多领域知识驱动的中文多轮对话数据 ...

  9. 基于IMDB评论数据集的情感分析

    文章目录 前言 一.大型电影评论数据集介绍 二.环境配置 三.实验模型及流程 1.实验模型 2.实验流程 四.实验代码 1.多层感知器模型代码 2.递归神经网络模型代码 3.长短期记忆模型代码 五.实 ...

最新文章

  1. 华为自动驾驶实车实路测试视频曝光!
  2. 为了写论文给 Linux “投毒”,导致整个大学都被 Linux 拉黑!
  3. 将ResultSet转为List
  4. 【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)
  5. es6 Promise.race()方法
  6. SAP-FI-财务报表版本设定
  7. 关于Word插入图片闪退
  8. HCU混动控制器,HEV串并联(IMMD) 混动车辆 simulink stateflow模型包含工况路普输入,驾驶员模型
  9. EXCEL实用技巧-多条件求和、多条件计数、多条件查找
  10. F005MyBatis学习笔记-MyBatis的多表关联查询
  11. Python pandas库|任凭弱水三千,我只取一瓢饮(4)
  12. 【arduino从入门到放肆】⑥Arduino 小台灯
  13. 取消高速省界收费站驶入“快车道”,我们距智能交通还有多远?
  14. Ogre个人初步学习总结
  15. 服务器Connections could not be acquired from the underlying database错误
  16. 磐石云服务器_磐石云双十二高防ip、海外服务器限量1元秒杀
  17. 滑块验证码通杀方案--python破解代码
  18. 【Unity3d】(二) Unity3D--光的反射与折射实现
  19. python progressbar2_python progressbar2 使用
  20. 录音怎么转换成文字?这个方法打工人必学

热门文章

  1. 用amd组装高档游戏型计算机,开学纳新要理智,DIY一台心仪电脑不求人
  2. 利用SpringMVC的AOP来实现后台系统的操作日志记录
  3. 微分中值定理—柯西中值定理
  4. 什么是Dline的可信身份验证
  5. Android 7.0+模拟器Fiddler抓包详细教程
  6. 程序员常见逻辑题笔试题
  7. win10更新卡住不动_安装Win10 2004系统卡在61%|Win10更新卡住解决方法
  8. 敏捷项目管理之Scrum教练篇
  9. expected static method
  10. 安卓手机与蓝牙模块联合调试(五)-- 编写自己的蓝牙控制界面控制单片