自然语言处理——对电影评论的文本情感分析

题目(来自阿里云天池):数据主要包括IMDB网站上的电影评论文本数据。 数据分为训练数据和测试数据,分别保存在train.csv和test_noLabel.csv两个文件中。 字段说明如下: (1)ID:编号 (2)TXT:电影评论文本 (3)Label:评论的情感类别,1表示积极,0表示消极。 测试数据不包括评论的情感类别,需要通过由训练数据所建立的模型以及所给的测试数据,得出测试数据相应的情感类别。 注:比赛所用到的数据来自于公开数据集Large Movie Review Dataset。 数据引用: @InProceedings{maas-EtAl:2011:ACL-HLT2011, author = {Maas, Andrew L. and Daly, Raymond E. and Pham, Peter T. and Huang, Dan and Ng, Andrew Y. and Potts, Christopher}, title = {Learning Word Vectors for Sentiment Analysis}, booktitle = {Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies}, month = {June}, year = {2011}, address = {Portland, Oregon, USA}, publisher = {Association for Computational Linguistics}, pages = {142--150}, url = {http://www.aclweb.org/anthology/P11-1015} } 


前言

     通过本学期中文信息处理课程的学习,结课作业选择了文本情感分析这个题目,该题目是阿里云天池上的一个竞赛题目,给出训练集和测试集的数据,要求对训练集建立的模型进行训练,对测试集进行分类,在本次作业中,我运用到了数据预处理和特征提取方法HashingVectorizer对数据进行处理,并通过LogisticRegression方法进行逻辑回归,然后利用fit方法对模型进行训练,再用predict方法对测试集进行预测,最后将结果保存在一个result的csv文件里。

一、研究方法

        深度学习是机器学习的一个子集,是一门用于学习和利用“深度”人工神经网络的机器学习技术,主要算法模型包括卷积神经网络 (Convolutional Neural Networks,CNN) 、循环神经网络 (Recurrent Neural Networks,RNN) 和递归神经网络 (Recursive Neural Networks,RNN)  。深度学习的核心思想就是通过数据驱动的方式,采用一系列的非线性变换,能够从原始数据中进行特征提取。

        基于深度学习的情感分析流程一般都是先进行数据预处理,再构建神经网络学习模型,然后对模型进行训练和测试。

二、用python实现具体步骤(sklearn)

1.引入库

代码如下:

import pandas as pd
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.linear_model import LogisticRegression
import csv

2.读入数据

代码如下:

# 读取训练集和测试集
train_data = pd.read_csv('train.csv')        #训练集数据
test_data = pd.read_csv('test_noLabel.csv')  #测试集数据

3.数据预处理和特征提取

采用HashingVectorizer方法对数据进行预处理。

代码如下:

# 数据预处理和特征提取
vectorizer = HashingVectorizer(n_features=25000, alternate_sign=False)
train_txt = vectorizer.transform(train_data['txt'])
test_txt = vectorizer.transform(test_data['TXT'])

HashingVectorizer是一个文本特征提取器,将文本转换为稀疏矩阵表示,‘n_features = 25000’表示设置特征维度为25000,‘alternate_sign = False’表示不使用交替符号哈希。

4.训练模型

采用LogisticRegression方法建立模型

代码如下:

# 训练模型
model = LogisticRegression()
model.fit(train_txt, train_data['Label'])

LogisticRegression创建了一个逻辑回归模型的实例,并存储在‘model’变量中。

model.fit()方法是用训练集的特征矩阵和标签集进行训练。

5.进行情感分析

代码如下:

# 进行情感分析
pred_labels = model.predict(test_txt)
result_fenlei = ["1" if label == 1 else "0" for label in pred_labels]

predict是一个预测方法,对测试集的数据进行测试,并把结果存储到pred_labels中。

分类用到了列表推导式,其中‘1’表示积极,‘0’表示消极

6.结果保存到CSV文件里

代码如下:

# 结果存储到CSV文件
results = pd.DataFrame({'ID': test_data['ID'], 'sentiment': result_fenlei})
results.to_csv('results.csv', index=False)

创建一个包含测试集ID和情感结果的DataFrame。

将这个DataFrame存储到一个csv文件里,index = False表示不包含索引。


总体代码

import pandas as pd
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.linear_model import LogisticRegression
import csv

# 读取训练集和测试集
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test_noLabel.csv')

# 数据预处理和特征提取
vectorizer = HashingVectorizer(n_features=25000, alternate_sign=False)
train_txt = vectorizer.transform(train_data['txt'])
test_txt = vectorizer.transform(test_data['TXT'])

# 训练模型
model = LogisticRegression()
model.fit(train_txt, train_data['Label'])

# 进行情感分析
pred_labels = model.predict(test_txt)
result_fenlei = ["1" if label == 1 else "0" for label in pred_labels]

# 结果存储到CSV文件
results = pd.DataFrame({'ID': test_data['ID'], 'sentiment': result_fenlei})
results.to_csv('results.csv', index=False)

总结

本次作业采用的是基于深度学习方法对文本进行情感分析。

优点是:1、高效的特征提取:使用HashingVectorizer进行特征提取,这种方法适用于处理大型文本数据集,并且具有较低的内存消耗。2、快速的训练和预测:采用逻辑回归作为分类算法,逻辑回归在大规模数据集上训练和预测的速度较快,适用于处理大量文本数据。3、存储结果方便:将情感分析的结果存储到CSV文件中,便于后续的分析、可视化或其他处理。

缺点是:1、特征表示的稀疏性:由于使用了哈希函数进行特征提取,特征表示是稀疏的,可能会丢失一些词汇信息。这可能会对模型的性能产生一定的影响。2、特征不可解释性:使用哈希技巧的特征提取方法无法提供直观的特征解释,即无法知道具体哪些词汇对情感分析起到了重要作用。3、对文本预处理的依赖性:代码中没有包括对文本数据的预处理步骤,例如去除停用词、词干化或词形还原等。这些预处理步骤可以对模型的性能和结果产生影响。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值