写在前:

本次的训练集和测试集还有停用词我都放在我的公众号里面了(为了方便大家提取特意去开的公众号哈哈哈哈)

公众号:YOLO的学习进阶日常
对话框输入:英文文本分析

数据源

做本次实战的契机是疫情期间参加了一个重庆高校AI大学生联盟的一个 nlp的培训,然后结训仪式的时候出了这个题,我的名次是第三,具体要求如下:

数据集包含2.4万个IMDB电影评论,0为消极,1为积极。
labeledTrainData为带标签的训练集。该文件以制表符分隔,并有一个标题行,后跟24,000行,其中包含每个评论的ID,情感和文本。
test为测试集。后跟1000行,其中包含每个评论的ID和文本。
目标是预测出每个英文文本的情感态度

第一个是我自己的做法,我也把官方给出的答案也写了下
———————————————————————————————————

文章目录

  • **写在前:**
  • 数据源
  • 1.数据预处理
  • 2.停用词、分词处理 、提取高频词、词袋模型进行向量化处理
  • 5.网格搜索+逻辑回归
    • **网格搜索的原理**

上面的几个步骤我参考了B站的子豪君的英文文本处理这个视频

1.数据预处理

在进行数据分析的时候首先就是先观察我们的文本,对于英文文档来说,我们只想保留英文字母,因此最简单的方法就是

  1. 使用正则表达式去除特殊字符
  2. 把大写字母转换成小写字母,因为计算机只能处理二进制语言,但是大小写虽然意思一样但是二进制却是不同的所以我们需要都小写
import pandas as pd
import re #正则表达式的模块
import warnings #消除警告
warnings.filterwarnings("ignore")
#tsv文件时\t来划分的,但是还是使用读取csv的方式
train=pd.read_csv("./labeledTrainData.tsv",sep='\t',encoding="ISO-8859-1")
train_sentence=train['review']
label=train['sentiment']
def remove_punctuation(text): text=re.sub('[^a-zA-Z]',' ',text)words=text.lower().split()return ' '.join(words)
train_sentence=train_sentence.apply(remove_punctuation)

2.停用词、分词处理 、提取高频词、词袋模型进行向量化处理

为什么要把这三个板块放在一起写呢?

词袋模型word2Vec和TF-IDF(之后我也会专门出一个小节来解释这两个词向量模型)模块里面的参数本身就已经包含了停用词分词还有高频词的处理了,不需要专门拿出来进行处理。

为什么要进行停用词,分词处理呢?

stop_words:这里的停用词除了指脏话之类的,更重要的是为了让一些模型少出现a an 之类的无意义的词语,停用词我也放在我公众号上了可以自行提取
analyzer:英文是以词(word)来进行划分的,因为这里套用的是词向量模型,其实现在有更好的英文分词方式,再后文我会提到

为什么要提取高频词呢?

max_features:因为我们想要进行文本的相似度分析,从而训练模型让模型更加精准,就提取出更为排名15000的高频词来进行分析,从而让机器知道哪些是消极的哪些是积极的,过多过少都达不到训练的效果
ngram_range:ngram模型的目的就是为了不让词序混乱导致意思混淆,比如“ I love you ” 和"you love me "完全就是两个意思

向量化处理目的是为了把英文翻译成计算机能够识别的二进制语言,因此和标准话,归一化不一样,向量化是根据文本长度等来进行转换的,是文本特有的一种处理方式

from sklearn.feature_extraction.text import CountVectorizer
stop_words=open('./stopwords.txt')
cv=CountVectorizer(analyzer='word',ngram_range=(1,4),stop_words=stop_words,max_features=150000)
cv.fit(test_sentence)
test_sentence=cv.transform(test_sentence)

5.网格搜索+逻辑回归

网格搜索(之后我也会补上的!)本质上就是一个优化模型,选择最优的参数(一般是CV)但是运行速度过于缓慢,在这里我使用逻辑回归的原因是因为:

首先这是二分类,如果采用神经网络这些复杂的模型来还容易达到过度拟合的状态,不是说逻辑回归因为很简单就不好用了,在实际应用中,其实逻辑回归就能解决一大部分分类问题。
cv:交叉验证,提取最好的参数,不会导致过度拟合,一般来说再逻辑回归中就使用C和dual两个参数就够了

网格搜索的原理

在一定的区间内,通过循环遍历,尝试每一种可能性,并计算其约束函数和目标函数的值,对满足约束条件的点进行逐个比较目标函数的值,最后得到最优解的近似值。

同时为了避免初始数据的划分对结果的影响,我们需要采用交叉验证的方式来减少偶然性,一般来说网格搜索都需要和交叉验证相结合使用。

GridSearchCV( estimator,param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True,  refit=True,cv=None, verbose=0, pre_dispatch='2*n_jobs',  error_score='raise',return_train_score=True)
参数 参数解释
estimator 分类器
param_grid 值为字典或者列表,需要最优化的取值范围paramters = {‘n_estimators’:range(10,100,10)}。
scoring 准确度评价指标,默认None 这个时候就需要score函数,或者scoring=‘roc_auc’
fit_params 字典类型数据,主要用于给fit方法传递参数
n_jobs 并行数,int:个数 默认值:1
pre_dispatch 指定总共分发的并行任务数,n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次
cv 交叉验证的参数,默认None,使用三折交叉验证,制定fold数量,默认是3,也可以是yield训练/测试数据的生成器
refit 默认True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与验证集进行训练,最终用于性能评估的最佳参数模型。就是说在搜索参数结束之后,用最佳参数结果再次fit一次
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(train_sentence,label,random_state=1234)
x_train=cv.transform(x_train)
x_test=cv.transform(x_test)
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
param_grid={'C':range(1,10),'dual':(True,False)}
lr_penalty= LogisticRegression()
grid=GridSearchCV(lr_penalty,param_grid=param_grid,cv=3,n_jobs=1)
grid.fit(x_train,y_train)
lg_final=grid.best_estimator_
lr_penalty= LogisticRegression(lg_final)
lr_penalty.fit(x_train,y_train)
y_pred = lr_penalty.predict(test_sentence)
y_pred=pd.DataFrame({'id':test['id'],'label':y_pred})
y_pred.to_csv("./segment.csv")

所有代码:

import pandas as pd
import re
import warnings
warnings.filterwarnings("ignore")
train=pd.read_csv("D:\\AA\\C\\Data game\\2 cold movie\\labeledTrainData.tsv",sep='\t',encoding="ISO-8859-1")
test=pd.read_csv("D:\\AA\\C\\Data game\\2 cold movie\\test.tsv",sep='\t',encoding="ISO-8859-1")train_sentence=train['review']
test_sentence=test['review']
label=train['sentiment']
stop_words=open('D:\\AA\C\\Data game\\1 O2O food\\stopwords.txt')
def remove_punctuation(text): text=re.sub('[^a-zA-Z]',' ',text)words=text.lower().split()return ' '.join(words)
test_sentence=test_sentence.apply(remove_punctuation)
train_sentence=train_sentence.apply(remove_punctuation)from sklearn.feature_extraction.text import CountVectorizer
cv=CountVectorizer(analyzer='word',ngram_range=(1,4),stop_words=stop_words,max_features=150000)
cv.fit(test_sentence)
test_sentence=cv.transform(test_sentence)cv1=CountVectorizer(analyzer='word',ngram_range=(1,4),stop_words=stop_words,max_features=150000)
cv1.fit(train_sentence)from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(train_sentence,label,random_state=1234)
x_train=cv.transform(x_train)
x_test=cv.transform(x_test)
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
param_grid={'C':range(1,10),'dual':(True,False)#改成[]也可以}
lr_penalty= LogisticRegression()
grid=GridSearchCV(lr_penalty,param_grid=param_grid,cv=3,n_jobs=1)
grid.fit(x_train,y_train)
y_pred = grid.predict(test_sentence)
y_pred=pd.DataFrame({'id':test['id'],'label':y_pred})
#test['label']=y_pred['label']
y_pred.to_csv("D:\\AA\\C\\Data game\\2 cold movie\\segment.csv")

最后的准确率是89.99

自然语言处理实战——对电影评论进行情感分析(英文)相关推荐

  1. python电影评论的情感分析流浪地球_爬虫实例 | Python爬取《流浪地球》豆瓣影评与数据分析(下)...

    [芝麻IP代理]三.数据分析与可视化 1.获取cookies 城市信息筛选中文字 匹配pyecharts支持的城市列表 2.基于snownlp的情感分析 关于snownlp的作用,主要可以进行中文分词 ...

  2. 【NLP文本分类】对IMDB电影评论进行情感分析

    概述 对imdb中的电影评论进行分类,是一个二分类的问题,这是一种重要且广泛适用的机器学习问题. 数据 imdb的数据包含50000条电影评论.拥有25000条训练数据以及25000条评估数据,有着相 ...

  3. python电影评论的情感分析流浪地球_《流浪地球》影评分析(一):使用Python爬取豆瓣影评...

    本文爬虫的步骤: 使用Selenium库的webdriver进行网页元素定位和信息获取: 使用BeautifulSoup库进行数据的提取: 使用Pandas库进行数据的存储. 后台回复python爬虫 ...

  4. python电影评论情感分析_NLP文本分类问题-电影评论的情感分析

    从头开始学习嵌入 import pandas as pd import numpy as np #读取csv文件 train = pd.read_csv('/kaggle/input/imdb-dat ...

  5. python电影评论的情感分析流浪地球_python爬取豆瓣流浪地球影评,生成词云

    代码很简单,一看就懂. (没有模拟点击,所以都是未展开的) 地址: https://movie.douban.com/subject/26266893/reviews?rating=&star ...

  6. 【项目实战】Python实现基于LDA主题模型进行电商产品评论数据情感分析

    说明:这是一个机器学习.数据挖掘实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 视频: Python实现基于LDA模型进行电商产品评论数据情感分析 ...

  7. 数据挖掘实战—电商产品评论数据情感分析

    文章目录 引言 一.评论预处理 1.评论去重 2.数据清洗 二.评论分词 1.分词.词性标注.去除停用词 2.提取含名词的评论 3.绘制词云查看分词效果 三.构建模型 1.评论数据情感倾向分析 1.1 ...

  8. 数据分析与挖掘实战-电商产品评论数据情感分析

    电商产品评论数据情感分析 背景 随着网上购物越来越流行,人们对于网上购物的需求越来越高,这让京东.淘宝等电商平台得到了很大的发展机遇.但是,这种需求也推动了更多的电商平台的崛起,引发了激烈的竞争.在这 ...

  9. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

最新文章

  1. 窗口函数(防忘笔记)
  2. (转)Ubuntu10.04各文件夹的作用
  3. JavaScript操作文件(2)
  4. mysql varchar 225 和 varchar 60 区别
  5. boost::static_min_max_signed_type用法的测试程序
  6. 附近的人 php,php 附近的人
  7. 机器学习实战(十)利用K-means算法对未标注数据分组
  8. 利用os模块生成 文件夹和文件
  9. 第4关:HDFS-JAVA接口之删除文件
  10. 云上自动化:云上编排让上云更简单
  11. nginx-2.nginx是什么
  12. c# async await异步方法
  13. 飞机遭遇时空乱流离奇穿越到30年前
  14. 简账(开源记账软件)-数据库设计
  15. python bookmark_Python PyQT-网络浏览器|书签
  16. 1月末支付机构备付金总量达1.4万亿,较去年12月下滑两千多亿
  17. 大佬H5网页手机端怎么应用微信快捷登陆?
  18. win10使用pip安装tensorflow
  19. 跟风 —— 由技术跟风所想到的
  20. C#设计模式之简单工厂模式(过渡模式)

热门文章

  1. 【PTA】【878真题】浙江大学软件学院878自命题2016真题
  2. 猫眼CEO郑志昊:为什么说产品思维已“死”?
  3. 电子签名屏什么牌子好
  4. EPMS System Analysis——AD验证、权限设计
  5. can协议crc计算_CAN总线通信的CRC校验方法
  6. 止咳绝招 献给身边咳嗽的人
  7. 阿里 P10 是怎样的存在?
  8. 体验在终端——参加2012年移动开发者大会有感
  9. 2021易烊千玺高考成绩查询,易烊千玺高考成绩公布,很多诋毁他的人,瞬间都哑口无言...
  10. 为什么总是黑php,怎么都在黑PHP?