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

目录

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的电影评论情感分析系统,并对其结果进行了评估与模型优化。这一流程不仅适用于电影评论情感分析,还可扩展到其他文本分类任务,如新闻分类、产品评论分析等。通过不断迭代优化,可以进一步提升模型的性能和泛化能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

二分图

数据结构、算法总述:数据结构/算法 C/C-CSDN博客 二分图:节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 染色法 目的:验证给定的二分图是否可…

房间采光不好怎么改造?这里有6个实用的解决方案!福州中宅装饰,福州装修

当装修中遇到房间采光不好的问题,可以从以下几个方面来解决: ①引入自然光源 尽可能减少光线阻碍物,例如可以考虑打通一些非承重墙,扩大窗户的面积,让阳光直接穿过阳台照射到室内。同时,也可以考虑在某些没…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后,创建对象trainer时,需要从默认配置中获取类DetectionTrainer初始化所需的参数args,如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

17.注释和关键字

文章目录 一、 注释二、关键字class关键字 我们之前写的HelloWorld案例写的比较简单,但随着课程渐渐深入,当我们写一些比较难的代码时,在刚开始写完时,你知道这段代码是什么意思,但是等过了几天,再次看这段…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点,对于整个图片为底图的画布,需要支持缩放、拖拽,并且无论画布位置在哪里,大小如何,所有绘制的点、线、面的坐标都是相对于图片左上角的,并且,拖拽、缩放,…

从零开始学习在VUE3中使用canvas(六):线条样式(线条宽度lineWidth,线条端点样式lineCap)

一、线条宽度lineWidth 1.1简介 值为一个数字 const ctx canvas.getContext("2d"); ctx.lineWidth 6; 1.2效果展示 1.3全部代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" r…

图像处理与视觉感知---期末复习重点(5)

文章目录 一、膨胀与腐蚀1.1 膨胀1.2 腐蚀 二、开操作与闭操作 一、膨胀与腐蚀 1.1 膨胀 1. 集合 A A A 被集合 B B B 膨胀&#xff0c;定义式如下。其中集合 B B B 也称为结构元素&#xff1b; ( B ^ ) z (\hat{B})z (B^)z 表示 B B B 的反射平移 z z z 后得到的新集合。…

冥想打坐睡觉功法

睡觉把手机放远一点&#xff0c;有电磁辐射&#xff0c;我把睡觉功法交给你&#xff0c;这样就可以睡好了。

55、Qt/事件机制相关学习20240326

一、代码实现设置闹钟&#xff0c;到时间后语音提醒用户。示意图如下&#xff1a; 代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speecher(new QTextToSpeech(t…

C++超市商品管理系统

一、简要介绍 1.本项目为面向对象程序设计的大作业&#xff0c;基于Qt creator进行开发&#xff0c;Qt框架版本6.4.1&#xff0c;编译环境MINGW 11.2.0。 2.项目结构简介&#xff1a;关于系统逻辑部分的代码的头文件在head文件夹中&#xff0c;源文件在s文件夹中。与图形界面…

权限提升-Win系统权限提升篇AD内网域控NetLogonADCSPACKDCCVE漏洞

知识点 1、WIN-域内用户到AD域控-CVE-2014-6324 2、WIN-域内用户到AD域控-CVE-2020-1472 3、WIN-域内用户到AD域控-CVE-2021-42287 4、WIN-域内用户到AD域控-CVE-2022-26923 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权…

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

指针数组的有趣程序【C语言】

文章目录 指针数组的有趣程序指针数组是什么&#xff1f;指针数组的魅力指针数组的应用示例&#xff1a;命令行计算器有趣的颜色打印 结语 指针数组的有趣程序 在C语言的世界里&#xff0c;指针是一种强大的工具&#xff0c;它不仅能够指向变量&#xff0c;还能指向数组&#…

如何利用OpenCV4.9离散傅里叶变换

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:如何利用OpenCV4.9 更改图像的对比度和亮度 下一篇:OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出 目标 我们将寻求以下问题的答案&#xff1a; 什么是傅里叶变换&#xff0c;为什…

《数据结构学习笔记---第五篇》---链表OJ练习下

step1:思路分析 1.实现复制&#xff0c;且是两个独立的复制&#xff0c;我们必须要理清指针之间的逻辑&#xff0c;注意random的新指针要链接到复制体的后面。 2.我们先完成对于结点的复制&#xff0c;并将复制后的结点放在原节点的后面&#xff0c;并链接。 3.完成random结点…

黑马鸿蒙笔记1

这里与前端类似。

斜率优化dp 笔记

任务安排1 有 N 个任务排成一个序列在一台机器上等待执行&#xff0c;它们的顺序不得改变。 机器会把这 N 个任务分成若干批&#xff0c;每一批包含连续的若干个任务。 从时刻 00 开始&#xff0c;任务被分批加工&#xff0c;执行第 i 个任务所需的时间是 Ti。 另外&#x…

PHP开发全新29网课交单平台源码修复全开源版本,支持聚合登陆易支付

这是一套最新版本的PHP开发的网课交单平台源代码&#xff0c;已进行全开源修复&#xff0c;支持聚合登录和易支付功能。 项目 地 址 &#xff1a; runruncode.com/php/19721.html 以下是对该套代码的主要更新和修复&#xff1a; 1. 移除了论文编辑功能。 2. 移除了强国接码…

linux之进程

一、背景 冯.诺依曼体系结构 输入设备键盘、鼠标、摄像头、话筒、磁盘、网卡...输出设备显示器、声卡、磁盘、网卡...CPU运算器、控制器存储器一般就是内存 数据在计算机的体系结构进行流动&#xff0c;流动过程中&#xff0c;进行数据的加工处理&#xff0c;从一个设备到另一…