项目实战:电影评论情感分析系统

news2024/11/15 21:54:11

目录

1.引言

2.数据获取与预处理

3.构建文本分类模型(使用LSTM)

4.结果评估与模型优化

4.2.结果评估

4.2.模型优化

5.总结


1.引言

        在本篇文章中,将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数据获取与预处理,到构建文本分类模型(使用长短期记忆网络LSTM),再到结果评估与模型优化的全过程。以下是详细的步骤和代码实例。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!

2.数据获取与预处理

        首先,我们需要一个标注好的电影评论数据集。这个数据集应该包含电影评论的文本内容以及对应的情感标签(正面或负面)。

        这里假设我们已经有了一个CSV文件movie_reviews.csv,其中包含两列:text(评论内容)和sentiment(情感标签,0代表负面,1代表正面)。

        以下是一个简化的movie_reviews.csv示例数据,其中包含了电影评论的文本内容以及对应的情感标签(0代表负面,1代表正面)

text,sentiment  
"This movie was terrible. I didn't enjoy it at all.",0  
"I loved this movie! It was so exciting and engaging.",1  
"The acting was bad and the plot was boring.",0  
"The storyline was great and the characters were well-developed.",1  
"I wouldn't recommend this movie to anyone.",0  
"This was one of the best movies I've seen this year.",1  
"The special effects were amazing, but the story was weak.",0  
"The movie kept me on the edge of my seat the whole time.",1  
"I found the movie to be quite disappointing.",0  
"The acting and cinematography were both top-notch.",1

        接下来,对数据进行预处理:

  1. 文本清洗:去除标点符号、特殊字符、停用词等。
  2. 文本分词:将句子分割成单词或词组。
  3. 文本向量化:将文本转换为数值型向量,以便模型能够处理。

        其中关于文本预处理的更多方法请看这篇文章:自然语言处理(NLP)基础:文本预处理与词嵌入-CSDN博客文章浏览阅读353次,点赞19次,收藏8次。自然语言处理(Natural Language Processing, NLP)是计算机科学与人工智能领域的重要分支,旨在使计算机理解、生成和处理人类语言。本文将聚焦于NLP的基础环节:文本预处理与词嵌入。首先,详细介绍文本预处理的步骤与常用工具(如NLTK、Spacy),然后解析词嵌入模型(如Word2Vec、GloVe)的概念、特点与应用。https://blog.csdn.net/meijinbo/article/details/137022427        下面是数据预处理的Python代码:

import pandas as pd  
import numpy as np  
from keras.preprocessing.text import Tokenizer  
from keras.preprocessing.sequence import pad_sequences  
from keras.utils import to_categorical  
  
# 加载数据  
data = pd.read_csv('movie_reviews.csv')  
  
# 文本清洗和分词  
def preprocess_text(text):  
    # 这里可以添加更多的文本清洗步骤  
    text = text.lower()  # 转为小写  
    text = text.replace("[^a-zA-Z]", " ")  # 去除标点符号  
    words = text.split()  # 分词  
    return words  
  
# 对所有评论进行预处理  
processed_texts = data['text'].apply(preprocess_text)  
  
# 创建Tokenizer并拟合数据  
tokenizer = Tokenizer()  
tokenizer.fit_on_texts(processed_texts)  
  
# 将文本转换为序列  
sequences = tokenizer.texts_to_sequences(processed_texts)  
  
# 确定最大序列长度,并对序列进行填充或截断  
max_seq_len = max([len(seq) for seq in sequences])  
X = pad_sequences(sequences, maxlen=max_seq_len)  
  
# 将情感标签转换为one-hot编码  
y = to_categorical(data['sentiment'])  
  
# 划分训练集和测试集  
from sklearn.model_selection import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3.构建文本分类模型(使用LSTM)

        现在,我们将使用Keras构建一个简单的LSTM模型来进行情感分析。模型包含嵌入层(Embedding)、LSTM层以及全连接输出层。

from keras.models import Sequential  
from keras.layers import Embedding, LSTM, Dense  
  
# 定义模型结构  
model = Sequential()  
model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=64, input_length=max_seq_len))  
model.add(LSTM(128))  
model.add(Dense(1, activation='sigmoid'))  
  
# 编译模型  
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])  
  
# 训练模型  
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))

4.结果评估与模型优化

4.2.结果评估

        通过观察训练过程中的损失和准确率曲线,以及在测试集上的性能指标,评估模型的泛化能力。

        Python代码:        

import matplotlib.pyplot as plt

def plot_history(history):
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    plt.plot(history.history['accuracy'], label='Training Accuracy')
    plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
    plt.xlabel('Epoch')
    plt.ylabel('Accuracy')
    plt.legend()

    plt.subplot(1, 2, 2)
    plt.plot(history.history['loss'], label='Training Loss')
    plt.plot(history.history['val_loss'], label='Validation Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.legend()

    plt.show()

plot_history(history)  # 显示训练过程中的准确率与损失曲线

# 测试集性能
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'Test Loss: {test_loss:.4f}')
print(f'Test Accuracy: {test_acc:.4f}')

4.3.模型优化

根据评估结果,可以尝试以下优化策略:

  • 调整超参数:如改变嵌入维度、LSTM单元数、学习率、Dropout比例等。
  • 增加数据增强:如引入文本反转、随机删除等技术增加训练集多样性。
  • 使用预训练词向量:如Word2Vec、GloVe等,以利用大规模无监督语料的潜在语义信息。
  • 集成学习:如使用多个模型投票或平均预测结果提高整体性能。
  • 尝试其他模型结构:如GRU、Transformer等。

5.总结

        总结,本篇文章通过实际代码演示了如何使用Python从数据获取与预处理开始,构建一个基于LSTM的电影评论情感分析系统,并对其结果进行了评估与模型优化。这一流程不仅适用于电影评论情感分析,还可扩展到其他文本分类任务,如新闻分类、产品评论分析等。通过不断迭代优化,可以进一步提升模型的性能和泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1551611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

激光焊接机性价比高的品牌推荐

激光焊接机性价比高的品牌推荐,博特激光作为一个激光焊接机品牌,在市场上也享有一定的声誉。其激光焊接机产品在性价比方面表现不错,受到了部分用户的认可。以下是关于博特激光焊接机的一些优势特点: 1. **性能稳定**:…

Mybatis细节详解

上一篇分享了一个Mybatis的快速入门案例&#xff0c;本贴再详细说明几个细节点~ 一.Mapper代理开发 1.定义接口 定义一个接口&#xff0c;并在resources中定义mapper文件夹&#xff0c;文件夹中存放同名的xml配置文件。 2.设置namespace属性 <?xml version"1.0&qu…

ChatGLM2本地部署方法

chatglm2部署在本地时&#xff0c;需要从huggingface上下载模型的权重文件&#xff08;需要科学上网&#xff09;。下载后权重文件会自动保存在本地用户的文件夹上。但这样不利于分享&#xff0c;下面介绍如何将chatglm2模型打包部署。 一、克隆chatglm2部署 这个项目是chatgl…

Go singleflight 第三方库在防止缓存击穿中的重要作用

参考&#xff1a; Go并发——singleflight - 知乎十一. Go并发编程–singleflight - failymao - 博客园 一、背景 介绍&#xff1a;Go的singleflight库提供了一个重复的函数调用抑制机制。 场景&#xff1a;适用于并发读请求量较大的后台服务&#xff0c;以降低存储层的压力…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一&#xff0c; linux 下的网络功能非常强大&#xff0c;嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动&#xff0c;本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…

Linux(3)软件安装-Centos 8.1安装-硬盘分区方案对比-linux上运行jar包-File上传下载

四、软件安装 1、Centos 8.1安装 1.1 安装过程 1、下载 CentOS 8.1 ISO 镜像文件 访问 CentOS 官方网站的下载页面。选择适当的版本&#xff0c;例如 CentOS Linux 8.1 (Linux Kernel 5.10.0-36)。根据您的硬件架构下载对应的 ISO 镜像文件&#xff08;如 CentOS-8.1-x86_6…

MySQL:十二类查询汇总(源码+解析 超全超详解!!!)

目录 一、全列查询 二、指定列查询 三、查询的字段为表达式 四、别名查询 五、去重查询&#xff1a;DISTINCT 六、排序查询&#xff1a;ORDER BY 七、条件查询&#xff1a;WHERE 注意&#xff1a; 范例&#xff1a; 1、基本查询 2、AND 与 OR 3、BETWEEN … AND ……

华为OD机试 - 考古问题 - 回溯、全排列问题(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

外包干了4年,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入上海某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

Github万星项目lobe-chat,连接GPT4GPTs,平替chatgpt-plus

简介 Lobe Chat - 一个开源、高性能的聊天机器人框架&#xff0c;支持语音合成、多模态和可扩展的函数调用插件系统。支持一键免费部署您的私人 ChatGPT/LLM Web 应用程序。 项目地址&#xff1a; GitHub - lobehub/lobe-chat: &#x1f92f; Lobe Chat - an open-source, mo…

【学习】企业为什么要做性能测试?性能测试有何优势?

性能测试是一种软件测试&#xff0c;可确保应用程序在工作负载下运行良好。性能测试的目标不是发现错误&#xff0c;而是消除性能瓶颈&#xff0c;同时度量系统关键指标。 一、为什么要做性能测试 1.性能测试向利益相关者告知其应用程序的速度、可扩展性和稳定性。 2.它揭示了…

第5章.零、单例与小样本提示词的编写之道

零提示、单个提示和小样本提示是用于从ChatGPT中生成文本的技术。在数据匮乏或任务全新、定义模糊之时&#xff0c;我们用微妙的提示&#xff0c;让ChatGPT从无到有&#xff0c;生成文本。 面对任务&#xff0c;空无一例&#xff1a;模型凭借对任务的广泛理解&#xff0c;独辟…

【MongoDB】一问带你深入理解什么是MongDB,MongoDB超超详细保姆级教程

目录 1、MongoDB概述2、MongoDB 主要特点2.1、文档2.2、集合2.3、数据库2.4、数据模型 3、Windows安装MongoDB3.1、下载MongoDB3.2、安装MongoDB3.3、配置MongoDB 4、Linux安装MongoDB4.1、下载MongoDB4.2、解压安装4.3、安装一个可视化工具 5、MongoDB基本操作及增删改查5.1、…

数据结构进阶篇 之 【二叉树链序存储】的整体实现讲解

封建迷信我嗤之以鼻&#xff0c;财神殿前我长跪不起 一、二叉树链式结构的实现 1.二叉树的创建 1.1 手动创建 1.2 前序递归创建 2.二叉树的遍历 2.1 前序&#xff0c;中序以及后序遍历概念 2.2 层序遍历概念 2.3 前序打印实现 2.4 中序打印实现 2.4 后序打印实现 2.…

YOLOv9改进策略 :neck优化 | 路径融合GFPN,小目标到大目标一网打尽 | 轻骨干重Neck的轻量级目标检测器GiraffeDet

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;设计了一种新的路径融合GFPN&#xff1a;包含跳层与跨尺度连接&#xff0c;改进思路来自ICLR2022 GiraffeDet的核心思想。 &#x1f4a1;&#x1f4a1;&#x1f4a1;GFPN和六个检测头结合&#xff0c;这种跳层…

Git命令及GUI基本操作

不习惯使用Git命令的可移步下面Git GUI基本操作 Git 常用命令 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看本地所有分支 git commit -am "init" 提交并且加注释 git remote add orig…

20个超实用Python魔法方法

大家好&#xff01;今天我们要一起探索Python世界的神秘角落——那些被称为“魔法方法”的特殊成员方法。它们就像是编程中的魔法咒语&#xff0c;赋予你的类各种神奇特性&#xff0c;让你的代码更加简洁、强大且有趣味&#xff01; __init__&#xff1a;这是每个对象出生时都要…

Python爬虫实战—探索某网站电影排名

文章目录 Python爬虫实战—探索某网站电影排名准备工作编写爬虫代码代码解析运行情况截图进一步优化和说明完整代码总结 说明&#xff1a;本案例以XXX网站为例&#xff0c;已隐去具体网站名称与地址。 Python爬虫实战—探索某网站电影排名 网络爬虫是一种自动化程序&#xff0…

多线程的学习1

多线程 线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 进程&#xff1a;是程序的基本执行实体。 并发&#xff1a;在同一个时刻&#xff0c;有多个指令在单个CPU上交替执行。 并行&#xff1a;在同一时刻&#xff0c…

js改变图片曝光度(高亮度)

方法一&#xff1a; 原理&#xff1a; 使用canvas进行滤镜操作&#xff0c;通过改变图片数据每个像素点的RGB值来提高图片亮度。 缺点 当前项目使用的是svg&#xff0c;而不是canvas 调整出来的效果不是很好&#xff0c;图片不是高亮&#xff0c;而是有些发白 效果 代码 …