机器学习 - 词袋模型(Bag of Words)实现文本情感分类的详细示例

 为了简单直观的理解模型训练,我这里搜集了两个简单的实现文本情感分类的例子,第一个例子基于朴素贝叶斯分类器,第二个例子基于逻辑回归,通过这两个例子,掌握词袋模型(Bag of Words)实现文本情感分类的基本原理,加深对机器学习的理解。

示例一

一、任务目标

使用词袋模型(BoW),将文本转化为数值向量,训练一个情感分类模型,判断句子是“积极”还是“消极”。

二、示例数据集

假设我们有以下4条标注好的训练数据:

1. "这个电影太棒了!"           → 积极
2. "剧情糟糕,浪费时间。"        → 消极
3. "演员演技非常好,推荐!"     → 积极
4. "特效差,不建议观看。"       → 消极

三、实现原理

词袋模型的核心思想
将文本看作一个“装满单词的袋子”,忽略词序和语法,只统计每个单词出现的次数。

四、实现步骤

1. 文本预处理
  • 分词:将句子拆分为单词(中文需分词工具,英文按空格拆分)。

  • 去除停用词:过滤无意义的词(如“的”、“了”、“,”)。

  • 统一小写:英文需统一为小写,中文无需此步骤。

1. ["电影", "太棒"]
2. ["剧情", "糟糕", "浪费", "时间"]
3. ["演员", "演技", "非常", "好", "推荐"]
4. ["特效", "差", "建议", "观看"]

2. 构建词袋(词汇表)

收集所有训练数据中的唯一单词,构建词汇表:

词汇表 = ["电影", "太棒", "剧情", "糟糕", "浪费", "时间", 
        "演员", "演技", "非常", "好", "推荐", "特效", "差", "建议", "观看"]

3. 文本向量化

将每个句子转换为一个向量,表示词汇表中每个单词的出现次数。

示例向量化结果

1. "电影太棒"        → [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2. "剧情糟糕浪费时间" → [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3. "演员演技非常好推荐" → [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]
4. "特效差建议观看"   → [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]

4. 训练分类模型

使用朴素贝叶斯分类器(适合文本分类)进行训练:

5. 使用模型预测新句子

示例输入"特效很棒但演员差"

步骤

  1. 预处理:分词 → ["特效", "很棒", "演员", "差"]

  2. 向量化:根据词汇表生成向量:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]
(词汇表中"特效"=位置11,"演员"=位置6,"差"=位置12,其他词未出现)

    3.预测

五、通俗解释

  1. 词袋模型:像把句子里的单词倒进一个袋子,只数每个单词出现的次数,不管顺序。

  2. 训练过程:模型通过统计哪些词常出现在“积极”句,哪些词常出现在“消极”句,学习判断规律。

  3. 预测过程:新句子被拆解为单词后,模型根据学到的规律,计算属于“积极”或“消极”的概率。

六、完整代码示例(Python)

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 训练数据
sentences = [
    "这个电影太棒了!",
    "剧情糟糕,浪费时间。",
    "演员演技非常好,推荐!",
    "特效差,不建议观看。"
]
labels = [1, 0, 1, 0]  # 1=积极,0=消极

# 1. 文本向量化(自动处理分词和停用词需中文分词工具,此处简化手动处理)
# 手动定义词袋向量(实际应使用CountVectorizer)
X_train = [
    [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],  # 电影太棒
    [0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],  # 剧情糟糕浪费时间
    [0,0,0,0,0,0,1,1,1,1,1,0,0,0,0],  # 演员演技非常好推荐
    [0,0,0,0,0,0,0,0,0,0,0,1,1,1,1]   # 特效差建议观看
]

# 2. 训练模型
model = MultinomialNB()
model.fit(X_train, labels)

# 3. 预测新句子
new_sentence = "特效很棒但演员差"
# 手动向量化(实际需自动分词和映射)
new_vector = [0,0,0,0,0,0,0,0,0,0,0,1,1,0,0]  # 特效、演员、差
prediction = model.predict([new_vector])
print("预测结果:", "积极" if prediction[0] == 1 else "消极")  # 输出:消极

七、总结

  • 词袋模型优点:简单易实现,适合小规模数据。

  • 缺点:忽略词序和语义(如“好不”和“不好”会被视为相同)。

  • 进阶方向:TF-IDF、N-gram、词嵌入(Word2Vec)等更复杂的文本表示方法。

示例二

词袋模型(BoW)是一种将文本转化为数值表示的常见方法,用于文本分类任务。首先,我们从一组文本中提取词汇,例如,句子“我喜欢读书”和“我讨厌读书”,得到词汇表:“我”、“喜欢”、“读书”、“讨厌”。接着,将每个句子转化为向量,每个维度对应一个词,表示该词在句子中是否出现或出现的频率。接下来,我们可以使用逻辑回归等分类器训练模型,最后用训练好的模型来预测新文本的情感。

一、基本原理

词袋模型的思想:
词袋模型将文本看作一个“词袋”,忽略单词之间的顺序,只关注每个单词出现的频率。这样,每篇文本就可以表示为一个向量,向量的每个维度对应一个词汇表中的词,其值为该词在文本中出现的次数(或经过其他处理后的权重,如TF-IDF)。

情感分类任务:
在情感分类任务中,我们希望根据文本的内容判断其情感倾向(例如正面或负面)。利用词袋模型,将文本转化为数值特征后,可以用常见的监督学习算法(如逻辑回归、朴素贝叶斯、支持向量机等)进行分类。

二、具体例子

假设我们有下面两个简单的训练文本,每个文本都有标注的情感标签:

  1. 文本1:"我 喜欢 读书" —— 正面情感
  2. 文本2:"我 讨厌 读书" —— 负面情感

1. 构建词汇表

首先,从训练数据中提取所有出现的词语。对于这两个文本,提取到的词汇有:

  • "我"
  • "喜欢"
  • "讨厌"
  • "读书"

因此,我们可以构建词汇表(Vocabulary)为:

Vocabulary={"我","喜欢","讨厌","读书"}

2. 文本向量化

接下来,将每个文本转换为向量,每个向量的维度对应词汇表中的一个词,值为该词出现的次数。

  • 文本1:"我 喜欢 读书"

    • “我”出现1次
    • “喜欢”出现1次
    • “讨厌”出现0次
    • “读书”出现1次
      得到向量:
    v1=[1, 1, 0, 1]
  • 文本2:"我 讨厌 读书"

    • “我”出现1次
    • “喜欢”出现0次
    • “讨厌”出现1次
    • “读书”出现1次
      得到向量:
    v2=[1, 0, 1, 1]

这些向量就是文本的数值化表示,它们捕获了文本中各单词的出现情况。

3. 训练分类模型

利用上述向量作为输入特征,并结合相应的情感标签(例如正面情感标记为1,负面情感标记为0),我们可以训练一个简单的分类模型。这里以逻辑回归为例:

训练步骤:
  1. 准备数据:
    将训练样本构建成特征矩阵 X 和标签向量 y:

    其中第一行对应“我 喜欢 读书”(正面),第二行对应“我 讨厌 读书”(负面)。

  2. 模型建立:
    逻辑回归模型假设预测概率为:

    其中,w 是权重向量,b 是偏置项。

  3. 训练过程:
    采用梯度下降等优化方法,调整 w 和 b 使得模型在训练数据上损失函数(例如交叉熵损失)最小。

  4. 模型评估:
    利用训练数据或独立的验证集,计算模型的预测准确率,调整超参数以获得更好的效果。

4. 模型使用

假设训练完成后,我们得到了最优参数 w^* 和 b^*。

如何使用训练好的模型:

  • 新文本的向量化:
    对于一个新文本,如“我 喜欢 电影”,首先根据之前的词汇表进行向量化:

    • 假设词汇表仍为 {"我","喜欢","讨厌","读书"}
    • “我”出现1次,“喜欢”出现1次,“讨厌”出现0次,“读书”出现0次,因此向量为:

    注意:新文本中的“电影”不在词汇表中,因此在简单词袋模型中会被忽略(这也是词袋模型的一个局限)。

  • 预测:
    将新文本的向量 vnew 代入逻辑回归模型,计算:

    然后通过 sigmoid 函数转换为概率:

    如果该概率大于某个阈值(例如0.5),则模型预测文本为正面情感;否则预测为负面情感。

总结

  1. 原理
    词袋模型将文本转换为不考虑词序的词频向量,通过这些向量来捕捉文本的内容信息。

  2. 过程

    • 构建词汇表
    • 将文本向量化
    • 利用标注数据训练分类模型(例如逻辑回归)
    • 评估和调整模型
  3. 使用
    训练好的模型可用于对新文本进行向量化和情感预测,进而进行分类任务。

这种方法虽然简单,但能有效展示如何从原始文本到数值表示,再到利用机器学习模型进行情感分类的全过程。

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

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

相关文章

评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法

评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…

服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程

0. 部署前的准备 首先我们需要足够算力的机器,这里我在vultr中租了有一张A16显卡一共16GB显存的服务器作为演示。部署的模型参数为14b的。如果需要部署满血版本671b的,需要更大的算力支持,这里由于是个人资金有限,就演示14b的部署…

chrome://version/

浏览器输入: chrome://version/ Google浏览器版本号以及安装路径 Google Chrome131.0.6778.205 (正式版本) (64 位) (cohort: Stable) 修订版本81b36b9535e3e3b610a52df3da48cd81362ec860-refs/branch-heads/6778_155{#8}操作系统Windows…

web集群(LVS-DR)

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是 www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前,使用LVS时必须要重新编…

Python+appium实现自动化测试

目录 一、工具与环境准备 二、开始测试 1、插上手机,打开usb调试,选中文件传输,我这里用华为手机为例 2、启动Appium Server GUI​编辑 3、启动 Inspector Session 4、录制脚本 使用Python和Appium进行自动化测试是一种常见的移动应用…

光谱相机在天文学领域的应用

天体成分分析 恒星成分研究:恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线,天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现,太阳大气中氢元素占比约 71%&#xff0…

Java 设计模式之桥接模式

文章目录 Java 设计模式之桥接模式概述UML代码实现 Java 设计模式之桥接模式 概述 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过桥接模式,可以避免类爆炸问题,并提高系统的可扩展性。 UML 核心…

Git | 相关命令

相关资料 官网Git 学习教程Git 入门指南Git 的奇技淫巧Git Extras git 命令行扩展工具配置 Git 处理行结束符Git 配置多个 SSH-Key下载相关 Windows 版下载镜像使用 jsdelivr 加速 Github 仓库资源 commit 常用的 type 常用 Git 命令 [xxx] 均为可选参数 git clone # 拷贝一…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC,翻阅手册的时候,发现了一个有意思的功能 混杂模式 H743的MAC控制器,可以设置为混杂模式,这就意味着它可以做一些网络监控的应用,譬如连接具备端口镜像功能的交换机,然后直接代替PC实现网络数据…

【Spring AI】基于SpringAI+Vue3+ElementPlus的QA系统实现(后端)

整理不易,请不要吝啬你的赞和收藏。 1. 前言 这篇文章将介绍如何基于 RAG 技术,使用 SpringAI Vue3 ElementPlus 实现一个 Q&A 系统。本文使用 deepseek 的 DeepSeek-V3 作为聊天模型,使用阿里百炼的 text-embedding-v3 作为向量模型&…

AI法理学与责任归属:技术演进下的法律重构与伦理挑战

文章目录 引言:智能时代的新型法律困境一、AI技术特性对传统法理的冲击1.1 算法黑箱与可解释性悖论1.2 动态学习系统的责任漂移1.3 多智能体协作的责任稀释二、AI法理学的核心争议点2.1 法律主体资格认定2.2 因果关系的技术解构2.3 过错标准的重新定义三、责任归属的实践案例分…

数值积分:通过复合梯形法计算

在物理学和工程学中,很多问题都可以通过数值积分来求解,特别是当我们无法得到解析解时。数值积分是通过计算积分区间内离散点的函数值来近似积分的结果。在这篇博客中,我将讨论如何使用 复合梯形法 来进行数值积分,并以一个简单的…

mybatis-plus逆向code generator pgsql实践

mybatis-plus逆向code generator pgsql实践 环境准备重要工具的版本供参考pom依赖待逆向的SQL 配置文件CodeGenerator配置类配置类说明 环境准备 重要工具的版本 jdk1.8.0_131springboot 2.7.6mybatis-plus 3.5.7pgsql 14.15 供参考pom依赖 <?xml version"1.0&quo…

RedHat8安装postgresql15和 postgis3.4.4记录及遇到的问题总结

安装包对照版本参考 UsersWikiPostgreSQLPostGIS – PostGIS 如果Red Hat系统上有旧版本的PostgreSQL需要卸载 在较新的Red Hat版本&#xff0c;使用dnf包管理器卸载&#xff1a;sudo dnf remove postgresql-server postgresql 旧版本&#xff0c;使用yum包管理器卸载 sudo y…

2024BaseCTF_week4_web上

继续&#xff01;冲冲冲 目录 圣钥之战1.0 nodejs 原型 原型链 原型链污染 回到题目 flag直接读取不就行了&#xff1f; 圣钥之战1.0 from flask import Flask,request import jsonapp Flask(__name__)def merge(src, dst):for k, v in src.items():if hasattr(dst, __geti…

leetcode:627. 变更性别(SQL解法)

难度&#xff1a;简单 SQL Schema > Pandas Schema > Salary 表&#xff1a; ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int …

【免费送书活动】《MySQL 9从入门到性能优化(视频教学版)》

本博主免费赠送读者3本书&#xff0c;书名为《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》。 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 这本书已经公开…

STM32、GD32驱动TM1640原理图、源码分享

一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…

ElementUI 的组件 Switch(开关)如何让文字显示在按钮上

效果图&#xff1a; 一、引入switch组件 给组件自定义一个类&#xff1a;tableScopeSwitch&#xff0c;设置开关的值和对应展示的文字&#xff08;开为 1&#xff0c;并展示启用&#xff1b;关为 0&#xff0c;并展示禁用&#xff09;。 <div class"tableScopeSwitch…

我的新书《青少年Python趣学编程(微课视频版)》出版了!

&#x1f389; 激动人心的时刻来临啦&#xff01; &#x1f389; 小伙伴们久等了&#xff0c;我的第一本新书 《青少年Python趣学编程&#xff08;微课视频版&#xff09;》 正式出版啦&#xff01; &#x1f4da;✨ 在这个AI时代&#xff0c;市面上的Python书籍常常过于枯燥&…