AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

news2024/12/27 13:57:37

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。

一、概念温习

支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。

它的核心思想是通过在高维空间中寻找一个超平面,将数据分成不同的类别。SVM 通过最大化类间的边界(即间隔)来提高模型的泛化能力,尤其适合处理小样本和高维数据。

SVM 在文本情感分析中的作用尤为突出,因为文本数据通常具有高维特征(例如词汇表的大小),而 SVM 擅长于处理这种维度较高的稀疏数据。

通过将文本转化为数值特征(如 TF-IDF),SVM 能有效地在情感分类任务中学习到情感标签与文本内容之间的关系。尤其在情感分析中,SVM 能够识别出情感倾向的关键特征,从而准确地对文本进行分类(如“积极”或“消极”)。其优越的分类性能和对高维数据的适应性使得 SVM 成为情感分析中常用的算法。

图1. 支持向量机的特点 

二、实现逻辑

一个用Python 和支持向量机(SVM)实现的情感分析主要逻辑是这样的:

  • 首先,脚本加载一个包含文本和标签(“Positive”或“Negative”)的 JSON 数据集,并将标签转换为二元分类(1 为积极,0 为消极)。
  • 接着,使用 TfidfVectorizer 将文本数据转换为数值特征,去除常见的停用词并限制特征维度。
  • 然后,使用 SVM 模型(线性核)对训练集进行训练,评估其在测试集上的表现,输出分类报告。
  • 训练完成后,模型和 TF-IDF 向量化器被保存为文件,以便后续加载使用。
  • 我们还需要一个调用函数 可以命名为:predict_sentiment,用于加载保存的模型并对新输入的文本进行情感预测。整个流程为文本情感分类任务提供了一个标准的解决方案。

我们可以用这样一个流程框图来描述整个过程:(点击放大查看)

图2. 案例实现逻辑 

 三、训练数据准备

在机器学习中,数据是模型训练的基础,直接影响模型的性能和准确性。对于文本情感分析任务,data.json 中的训练数据至关重要。该数据集包含大量标注了情感标签(“Positive”和“Negative”)的文本,能够为模型提供学习情感分类的实例。

通过这些带标签的文本,支持向量机(SVM)可以识别文本中的情感特征,并学会区分不同情感类别。在情感分析中,数据的质量和多样性决定了模型的泛化能力。如果数据集中的文本种类丰富、情感标签明确且分布均匀,模型能够更好地捕捉到情感表达的细微差异。此外,适当的训练数据量能帮助减少过拟合,提升模型在新数据上的表现。因此,data.json 提供的训练素材为模型提供了必要的输入和监督信息,是模型准确预测情感的重要保障。

在案例中,我的素材内包括了50个短句和与之对应的标签,以供模型训练使用,我将这个标签文件放在了素材中,需要的可自行下载。 

SVM 是一种非常适合文本分类的算法,尤其是当文本数据不太多且维度较高时。下面是一个完整的步骤说明,帮助你使用 Python 实现 SVM 来训练和保存一个情感分析模型。

四、实现步骤概述:

  1. 数据预处理:加载数据,进行必要的文本处理(如分词、去除停用词等)。
  2. 特征提取:将文本数据转换为数值形式(通常使用 TF-IDF)。
  3. 训练模型:使用支持向量机(SVM)来训练情感分析模型。
  4. 模型保存:将训练好的模型保存,以便以后使用。
  5. 模型调用:加载保存的模型并进行预测。

1. 安装必要的库

首先,确保你安装了必要的 Python 库。你可以使用以下命令安装:

pip install scikit-learn numpy pandas joblib

2. 数据加载与预处理

假设你已经将数据保存到 data.json 文件中,首先加载数据,并对文本进行预处理。(data.json 我已经放在本文的资源中)

import json
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import classification_report
import joblib

# 加载 JSON 数据
with open('data.json', 'r') as file:
    data = json.load(file)

# 创建 DataFrame
df = pd.DataFrame({
    'text': data['text'],
    'label': data['label']
})

# 将标签转换为数字,'Positive' -> 1, 'Negative' -> 0
df['label'] = df['label'].apply(lambda x: 1 if x == 'Positive' else 0)

# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.3, random_state=42)

# 显示数据分割情况
print(f"训练集大小: {len(X_train)}, 测试集大小: {len(X_test)}")

3. 特征提取(使用 TF-IDF)

我们将使用 TF-IDF 来将文本数据转换为数值特征。TF-IDF 是一种常见的文本特征提取方法,它考虑了词频和逆文档频率。

# 创建 TF-IDF 向量化器
tfidf_vectorizer = TfidfVectorizer(stop_words='english', max_features=5000)

# 训练 TF-IDF 向量化器并转换训练集和测试集
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

4. 训练支持向量机(SVM)模型

现在,我们可以训练一个支持向量机(SVM)模型,进行文本分类。

# 创建 SVM 分类器
svm_classifier = SVC(kernel='linear')  # 使用线性核函数

# 训练模型
svm_classifier.fit(X_train_tfidf, y_train)

# 预测
y_pred = svm_classifier.predict(X_test_tfidf)

# 输出模型性能评估
print(classification_report(y_test, y_pred))

5. 保存模型

训练完成后,我们可以将模型保存为一个文件,以便以后加载并使用。

# 保存 SVM 模型和 TF-IDF 向量化器
joblib.dump(svm_classifier, 'svm_sentiment_model.pkl')
joblib.dump(tfidf_vectorizer, 'tfidf_vectorizer.pkl')

print("模型已保存!")

6. 加载模型并进行预测

按照上面的操作以后,你可以随时加载保存的模型来进行预测。以下是如何加载并使用保存的模型:

# 加载已保存的模型和 TF-IDF 向量化器
svm_model = joblib.load('svm_sentiment_model.pkl')
tfidf_vectorizer = joblib.load('tfidf_vectorizer.pkl')

# 示例预测
def predict_sentiment(text):
    # 将文本转换为 TF-IDF 特征
    text_tfidf = tfidf_vectorizer.transform([text])
    # 使用模型进行预测
    prediction = svm_model.predict(text_tfidf)
    return "Positive" if prediction[0] == 1 else "Negative"

# 测试预测
sample_text = "I am so happy with my new job!"
result = predict_sentiment(sample_text)
print(f"预测情感: {result}")

五、完整代码总结:

import json
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import classification_report
import joblib

# 加载 JSON 数据
with open('data.json', 'r') as file:
    data = json.load(file)

# 创建 DataFrame
df = pd.DataFrame({
    'text': data['text'],
    'label': data['label']
})

# 将标签转换为数字
df['label'] = df['label'].apply(lambda x: 1 if x == 'Positive' else 0)

# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.3, random_state=42)

# TF-IDF 向量化
tfidf_vectorizer = TfidfVectorizer(stop_words='english', max_features=5000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# 训练 SVM 模型
svm_classifier = SVC(kernel='linear')
svm_classifier.fit(X_train_tfidf, y_train)

# 预测
y_pred = svm_classifier.predict(X_test_tfidf)
print(classification_report(y_test, y_pred))

# 保存模型
joblib.dump(svm_classifier, 'svm_sentiment_model.pkl')
joblib.dump(tfidf_vectorizer, 'tfidf_vectorizer.pkl')

# 加载模型并进行预测
def predict_sentiment(text):
    text_tfidf = tfidf_vectorizer.transform([text])
    prediction = svm_classifier.predict(text_tfidf)
    return "Positive" if prediction[0] == 1 else "Negative"

sample_text = "I am so happy with my new job!"
result = predict_sentiment(sample_text)
print(f"预测情感: {result}")

这样我们就可以用训练好的 SVM 模型来进行文本情感分析了!

六、测似结果

负面文本测试结果:

正面文本测试结果:

 

需要注意的是:实际上,训练数据中的50条样本,远远不足以训练出一个可以真实应用的模型,因此才测试的时候,你可以将数据中的原文短句进行测试,这样准确率会很高。

七、应用场景 

虽然这个模型看起来很简单,能处理的情感维度也比较低,但是在实践中,是有很多这样的应用场景的,以下是一些适用场景:

1. 小型文本数据集

当训练数据集相对较小且标注数据有限时,SVM 模型能够有效工作。它通过最大化类别间的间隔,能够在样本较少的情况下提供较好的泛化能力。因此,对于一些规模较小的情感分析任务,这种简单模型非常适用。

2. 情感分类任务

适用于较为简单的情感分类任务,比如判断用户评价、评论或社交媒体帖子中的情感倾向(如正面或负面)。如果文本内容较短,特征维度不高,SVM 能够较好地学习文本的情感模式。

3. 低资源环境

在硬件或计算资源受限的环境下,SVM 由于其相对较小的内存需求和计算复杂度,适合在资源有限的设备上运行,比如移动端或边缘计算设备。

4. 不需要深度语义理解的应用

当任务的文本情感较为直接和明显时,简单的 SVM 模型能够有效分类。例如,用户评论中的情感一般较为直接(如“这款产品太好用了” vs “这个产品太差了”)。这类场景不需要复杂的深度学习模型,SVM 可以提供足够的准确性。

5. 需要快速部署和预测的场景

在需要快速部署并进行情感分类的场景中,简单的 SVM 模型可以快速训练并进行预测。由于模型较小,训练和推理速度较快,非常适合实时情感分析系统(如实时监测社交媒体评论或产品评价)。

6. 应用于情感标签较少的任务

如果情感分类任务中的标签较少(比如只有正面和负面两个情感类别),SVM 模型非常适用。其线性核函数能够快速找到最佳分隔超平面,并且能较好地处理二分类问题。

这次的模型训练主要是为了讲解如何实现的方法。有问题可以留言我们一起讨论!

谢谢观看本文!感谢点赞关注!

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

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

相关文章

Linux-----进程处理(子进程创建)

【尚硅谷嵌入式Linux应用层开发,linux网络编程,linux进程线程,linux文件io】https://www.bilibili.com/video/BV1DJ4m1M77z?p35&vd_source342079de7c07f82982956aad8662b467 main函数 fork创建进程 fork()参数 /*** brief 创建一个子进…

一种寻路的应用

应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节: 全国的长途车车站的数据的更新: …

2. FPGA基础了解--全局网络

前言 引入扇出的概念介绍FPGA中的全局网络为后续时序优化埋下伏笔 扇出 在FPGA设计中扇出是一个重要的概念,所谓的扇出就是一个控制信号所能控制的数据信号的总个数,比如ctrl信号的扇出就是16 reg ctrl 0; reg [15:0] out 0; always (posedge c…

Excel中一次查询返回多列

使用Excel或wps的时候,有时候需要一次查询返回多列内容,这种情况可以选择多次vlookup或者多次xlookup,但是这种做法费时费力不说,效率还有些低下,特别是要查询的列数过多时。我放了3种查询方法,效果图&…

智能化军事【五】精确制导武器智能化实现

文章目录 前言精确制导武器智能化实现基于深度学习实现的智能化功能基于强化学习实现的智能化功能强化学习深度强化学习 网络模型轻量化网络剪枝(通道剪枝)技术层剪枝权值量化技术低秩近似技术知识蒸馏技术强化学习联合训练 解决有效训练样本不足或获取困…

解锁高效密码:适当休息,让学习状态满格

一、“肝帝” 的困境 在当今竞争激烈的职场中,“肝帝” 现象屡见不鲜。超长工时仿佛成为了许多行业的 “标配”,从互联网企业的 “996”“007”,到传统制造业的轮班倒、无休无止的加班,员工们的工作时间被不断拉长。清晨&#xff…

asp.net 高校学生勤工俭学系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…

RTMW:实时多人2D和3D 全人体姿态估计

单位:上海AI实验室 代码:mmpose/tree/main/projects/rtmpose 系列文章目录 RTMO: 面向高性能单阶段的实时多人姿态估计 目录 系列文章目录摘要一、背景二、相关工作2.1 自上而下的方法。2.2 坐标分类。2.3 3D Pose 3 实验方法3.1.1 任务限制3.1.3训练技…

AI智能养站神器-SEO助理原创文章批量生成发布工具

很多站长最头疼的就是网站每天的内容更新,因为不知道写什么,采集被人的文章又会被定义为抄袭,而且现在伪原创已经没有多大的效果了,所以今天给大家分享的就是一款AI智能养战神器-SEO助理原创文章批量生成发布工具。 这款工具支持…

用Python开启人工智能之旅(三)常用的机器学习算法与实现

第三部分:常用的机器学习算法与实现 用Python开启人工智能之旅(一)Python简介与安装 用Python开启人工智能之旅(二)Python基础 用Python开启人工智能之旅(三)常用的机器学习算法与实现 用Pyt…

FD(File Descriptor)泄漏

File Descriptor是Linux下概念,fd 是 int类型非负数! 进程打开File,Socket,Pipe后生成一个File Descriptor,它是打开这个系统资源的标识符。 Linux每个进程fd最大1024个,超过之后进程 crash,c…

英语单词拼读小程序开发制作介绍

英语单词拼读小程序开发制作介绍本英语单词拼读小程序系统开发的主要功能有: 1、按年级分类展示每个年级阶段的英语单词信息。 2、点击选择的单词进入单词拼读页面,展示英语单词的拼读音标、中文意思、单词发音、拆分词汇发音、用户通过朗读发音对比。通…

TCP客户端模拟链接websocket服务端发送消息(二)

兄弟们,我来填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前几天写了个tcp模拟websocket客户端的以为完成,后面需要发送消息给服务端,以为简单不就是一个发送消息么,这不是一…

Docker 镜像加速访问方案

在数字化时代,Docker以其轻量级和便捷性成为开发者和运维人员的首选容器技术。然而自2023年5月中旬起,Docker Hub 的访问速度较慢或不稳定,这对依赖Docker Hub拉取镜像的用户来说无疑是一个挑战。本文将提供 Docker Hub 访问的一系列替代方案…

牛客网刷题 ——C语言初阶——BC112小乐乐求和

1.牛客网刷题 ——C语言初阶 牛客网:BC112小乐乐求和 小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一个值,为求和结果。 示例1 输…

Eclipse常用快捷键详解

文章目录 Eclipse常用快捷键详解一、引言二、编辑快捷键三、选择和移动快捷键四、行操作快捷键五、搜索和导航快捷键六、调试快捷键七、重构快捷键八、其他快捷键九、使用案例场景一:代码编写代码示例 场景二:代码调试场景三:代码重构代码示例…

clickhouse测试报告

​一、背景 针对当前实施的项目,面临着两个主要挑战:一是需要存储更详细的原始数据和中间数据,二是现有基于MySQL的数据存储解决方案在数据量增长时性能受限,特别是在进行跨年历史数据的即时分析时。为了解决这些问题&#xf…

windows和mac共享文件夹访问教程

mac共享文件夹,windows访问: mac上开启文件夹共享,并添加文件夹和用户,然后windows 上 在windows上快捷键 win r 打开运行,按如下格式输入mac设备的IP地址: 就可以访问了: windows共享文件夹…

FPGA自学之路:到底有多崎岖?

FPGA,即现场可编程门阵列,被誉为硬件世界的“瑞士军刀”,其灵活性和可编程性让无数开发者为之倾倒。但谈及FPGA的学习难度,不少人望而却步。那么,FPGA自学之路到底有多崎岖呢? 几座大山那么高?…