【漫话机器学习系列】009.词袋模型(Bag of Words)

词袋模型(Bag of Words, 简称 BoW)

词袋模型是一种常见的文本表示方法,主要用于自然语言处理(NLP)和信息检索领域。它将文本数据转换为特征向量,忽略语序,仅考虑词的出现与否或出现频率。


1. 基本思想

  • 把文本看作一个词的集合(袋子),忽略语序和句法结构。
  • 对文本中的所有独立词汇建立一个词汇表(Vocabulary)。
  • 每个文本用一个固定大小的向量表示,向量的每一维对应词汇表中的一个词。
  • 向量值可以是:
    • 词频(Term Frequency, TF)。
    • 二进制值(出现记为 1,不出现记为 0)。
    • 权重(如 TF-IDF)。

2. 特征表示步骤

(1) 词汇提取
  • 文本预处理
    • 分词:将句子切分成单独的词。
    • 去停用词:去掉“的”、“是”、“了”等无意义的高频词。
    • 小写化:统一词的大小写。
    • 去除标点符号。
  • 建立词汇表
    • 根据所有文本中出现的词,生成一个词汇表。
(2) 文本向量化
  • 对于每个文本:
    • 按词汇表的顺序统计每个词的出现次数。
    • 将统计结果填入对应的特征向量位置。

3. 示例

示例文本:
文档1: 我喜欢机器学习。
文档2: 我喜欢深度学习和机器学习。
(1) 建立词汇表

所有词汇(去重后):['我', '喜欢', '机器', '学习', '深度', '和']

(2) 向量化
  • 文档1的向量表示:[1, 1, 1, 1, 0, 0]
  • 文档2的向量表示:[1, 1, 1, 1, 1, 1]

4. Python 示例

(1) 使用 Scikit-learn
from sklearn.feature_extraction.text import CountVectorizer# 示例数据
documents = ["我喜欢机器学习","我喜欢深度学习和机器学习"
]# 创建词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)# 输出特征词汇表
print("词汇表:", vectorizer.get_feature_names_out())# 输出向量化表示
print("向量化表示:\n", X.toarray())

输出结果 

词汇表: ['和' '喜欢' '学习' '机器' '深度' '我']
向量化表示:[[0 1 1 1 0 1][1 1 1 1 1 1]]
(2) 使用 TF-IDF 权重
from sklearn.feature_extraction.text import TfidfVectorizer# 示例数据
documents = ["我喜欢机器学习","我喜欢深度学习和机器学习"
]# 创建 TF-IDF 模型
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)# 输出 TF-IDF 特征
print("TF-IDF 向量化表示:\n", X.toarray())

输出结果 

TF-IDF 向量化表示:[[1. 0.][0. 1.]]

5. 优点

  • 简单易用:实现和计算简单。
  • 通用性强:适用于多种文本分析任务。
  • 高效:适合小规模文本数据。

6. 缺点

  • 忽略词序:丢失了上下文信息,无法捕捉词间的语义关系。
  • 维度较高:如果词汇表很大,特征向量的维度会非常高。
  • 稀疏性问题:大多数特征值为零,导致稀疏矩阵,影响计算效率。
  • 不考虑词重要性:词频高的常用词(如“的”、“是”)可能掩盖关键词的作用。

7. 改进方法

  • TF-IDF:引入词的重要性,降低高频词的权重。
  • Word2Vec / GloVe:通过分布式表示,将词转化为低维稠密向量,保留语义关系。
  • N-grams:考虑词组(如“机器学习”)而非单个词。

8. 应用场景

  • 文本分类:如垃圾邮件检测、情感分析。
  • 信息检索:如搜索引擎中的文档相似性计算。
  • 文档聚类:将相似的文本分为一类。

词袋模型是文本表示的重要基础,它虽然简单但功能强大,在许多任务中依然有效。

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

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

相关文章

分治算法(单选题)

2-1 分数 2 下列多少种排序算法用了分治法? 堆排序插入排序归并排序快速排序选择排序希尔排序 A.2 B.3 C.4 D.5 正确答案 A 2-2 分数 2 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决问题,最后将子…

UNIX简史

从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…

C# OpenCV机器视觉:畸变矫正

在一个阳光明媚的早晨,阿强决定去拍照。他拿起相机,穿上他最喜欢的羊毛大衣,准备记录下生活中的美好瞬间。可是,当他兴奋地查看照片时,发现自己拍的每一张都像是被外星人用变形金刚的力量扭曲过一样!“这是…

tryhackme——Defensive Security Intro(防御安全简介)

任务一:Introduction to Defensive Security防御安全简介 此room的两个要点: Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…

使用rust语言创建python模块(pyo3+maturin)

1. 首先使用conda创建python虚拟环境(已创建的可省略) >conda create --prefixE:\python_envs\rust_python python3.11 2. 激活python虚拟环境 conda activate rust_python 3. 安装maturin pip install maturin 4. 创建rust项目 >cd E:\py…

关于Postgresql旧版本安装

抛出问题 局点项目现场,要求对如下三类资产做安全加固,需要在公司侧搭建测试验证环境,故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代,老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…

使用echarts实现3d柱状图+折线图

以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度&#xff0c;不然图不显示,然后echarts版本不要太低&#xff0c;不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…

2024.1212-02-虚拟私人网(VPN) 虚拟局域网 及隧道技术(四)--GRE47 Etherip97 原理及应用

虚拟局域网 及隧道技术&#xff08;四&#xff09;-GRE47 & Etherip97原理及应用 概述原理及应用EOIP/Etherip概念区别 隧道协议标准EtherIP &#xff08;IP protocol number 97&#xff09;GRE 开源工具katlogic-eoip 验证环境GRE&#xff08;EOIP&#xff09;演示验证Eth…

【从零开始入门unity游戏开发之——C#篇01】理论开篇,理解什么是编程

文章目录 前言前置条件进制什么是十进制、二进制二进制有什么用&#xff1f;为什么计算机用二进制而不用十进制&#xff1f;二进制转十进制十进制转二进制二进制运算 计算机中的数据存储单位什么是编程&#xff1f;什么是代码&#xff1f;什么是编程语言&#xff1f;常见的编程…

黑盒白盒测试

任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例&#xff1a;某报表处理系统要求用户输入处理报表的日期&#xff0c;日期限制在2003年1月至2008年12月&#xff0c;即系统只能对该段期间内的报表进行处理&#xff0c;如日期不在此范围内&#xff0c;则显示输入错误信息…

CSS学习记录11

CSS布局 - display属性 display属性是用于控制布局的最终要的CSS属性。display 属性规定是否/如何显示元素。每个HTML元素都有一个默认的display值&#xff0c;具体取决于它的元素类型。大多数元素的默认display值为block 或 inline。 块级元素&#xff08;block element&…

ByteCTF2024

wp参考&#xff1a; 2024 ByteCTF wp 2024 ByteCTF WP- Nepnep ByteCTF 2024 writeup by Arr3stY0u 五冠王&#xff01;ByteCTF 2024 初赛WriteUp By W&M ByteCTF 2024 By W&M - W&M Team ByteCTF Re WP - 吾爱破解 - 52pojie.cn 2024 ByteCTF - BediveRe_R…

C#,在 C# 语言中将 LaTeX 转换为 PNG 或 JPG 图像

在 C 语言中将 LaTeX 转换为 PNG 或 JPG 图像# 12月 28&#xff0c; 2021 2 分钟 法尔汉拉扎 在 C 语言中将 TeX 转换为 PNG JPG 图像# TeX 格式用于处理技术和科学文件。它通常用于交流或发布此类文档。在某些情况下&#xff0c;您可能需要将 TeX 文件渲染为 PNG 或 JPG 等图像…

AI监控赋能健身馆与游泳馆全方位守护,提升安全效率

一、AI视频监控技术的崛起 随着人工智能技术的不断发展&#xff0c;AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统&#xff0c;AI技术赋予监控系统实时分析、智能识别和精准预警的能力&#xff0c;让“被动监视”转变为“主动防控”。 二、AI监控应用…

搭建Tomcat(一)---SocketServerSocket

目录 引入1 引入2--socket 流程 Socket&#xff08;应用程序之间的通讯保障&#xff09; 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1&#xff1a;ServerSocket和Socket有什么关系&#xff1f; ServerSocket Soc…

爬虫学习案例5

爬取b站一个视频 罗翔老师某一个视频很刑 单个完整代码&#xff1a; 安装依赖库 pip install lxml requests import osimport requests import re from lxml import etree import json # 格式化展开输出 from pprint import pprint # 导入进程模块 import subprocess head…

【深度学习】 零基础介绍卷积神经网络(CNN)

零基础介绍 卷积神经网络&#xff08;CNN&#xff0c;Convolutional Neural Network&#xff09;是深度学习中的一种神经网络&#xff0c;特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务&#xff0c;比如判断一张照片中是猫还是狗。下面用一…

【计算机组成原理】实验二:通用寄存器单元实验

实验二&#xff1a;通用寄存器单元实验 一、实验目的 了解通用寄存器的组成和硬件电路&#xff0c;利用通用寄存器实现数据的置数、左移、右移等功能。 二、实验内容 数据输入通用寄存器 寄存器内容无进位位左移实验 寄存器内容无进位位右移实验 三、实验步骤和结果 实…

4G模块详解

在之前的教程中&#xff0c;无线通信技术我们学习了蓝牙和 WiFi&#xff0c;今天我们要来学习 4G。 4G 模块在距离上有个突破&#xff0c;它不像蓝牙短距离&#xff0c;也不像 WiFi 只能在局域网&#xff0c;4G 模块可使用户无论在哪&#xff0c;只要有 4G 网络信号覆盖&#…

Visual Studio 使用 GitHub Copilot 聊天

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…