【AI知识点】词袋模型(Bag-of-Words,BOW)

词袋模型(Bag-of-Words,简称BOW)是一种用于文本表示的简单且常用的方法,尤其在自然语言处理(NLP)和信息检索领域中广泛应用。词袋模型的核心思想是将文本表示为一个词频统计的集合,而不考虑词的顺序和语法结构。每个词在文本中出现的频率被用来表示文本的特征。

1. 词袋模型的基本思想

词袋模型的核心假设是词语的出现频率能够反映文本的内容,因此文本可以通过其包含的词语及其频率来描述。在词袋模型中,文本被表示为一组词语的无序集合,词的顺序、句法结构、以及语法关系都会被忽略。

例子:

假设我们有两段文本:

  • 文本1:“猫在沙发上睡觉。”
  • 文本2:“沙发上的猫在睡觉。”

在词袋模型中,这两段文本会被认为是相同的,因为它们包含的词汇是相同的,尽管词的顺序不同。

词袋模型会将这些文本表示为一个词汇表,然后计算每个词在文本中出现的频率。例如:

词汇表沙发睡觉
文本111111
文本211111

这表示了两个文本都包含相同的词,且每个词的频率都相同。因此,在词袋模型中,它们的表示是完全一样的。


2. 词袋模型的构建过程

构建词袋模型的基本步骤如下:

  1. 创建词汇表:将所有文档中的所有词语收集起来,去掉重复项,生成一个词汇表(vocabulary)。词汇表中的每个词对应一个特定的位置或索引。

  2. 词频统计:对每个文档,统计其中每个词在词汇表中的出现次数。生成一个向量,每个维度对应词汇表中的一个词,向量的值表示该词在该文档中出现的次数。

  3. 文档表示:将每个文档转换为一个词频向量,向量的长度等于词汇表的大小,每个位置上的值是该词在文档中出现的次数。

示例:

假设我们有如下三个句子:

  • 句子1:“我喜欢吃苹果。”
  • 句子2:“苹果很好吃。”
  • 句子3:“我不喜欢苹果。”

第一步:创建词汇表(去掉重复词):

词汇表喜欢苹果很好
索引123456

第二步:根据词汇表统计每个句子的词频:

  • 句子1向量: ( 1 , 1 , 1 , 1 , 0 , 0 ) (1, 1, 1, 1, 0, 0) (1,1,1,1,0,0)
  • 句子2向量: ( 0 , 0 , 1 , 1 , 1 , 0 ) (0, 0, 1, 1, 1, 0) (0,0,1,1,1,0)
  • 句子3向量: ( 1 , 1 , 0 , 1 , 0 , 1 ) (1, 1, 0, 1, 0, 1) (1,1,0,1,0,1)

最终,我们通过词袋模型将这些句子表示为固定长度的向量,其中每个值对应于词汇表中某个词的出现次数。


3. 词袋模型的优缺点

优点:

  1. 简单且高效:词袋模型的概念非常简单,构建过程只涉及词频统计,计算成本低,非常适合在大规模文档集上使用。
  2. 无需复杂的语言处理:不需要考虑词语的顺序、语法结构等复杂的语言处理步骤,方便快速建模。

缺点:

  1. 忽略词序和语法:词袋模型完全忽略了文本中的词序和语法结构。例如,“我爱你” 和 “你爱我” 在词袋模型中是完全相同的表示,但它们的含义是完全不同的。
  2. 稀疏表示:对于大规模词汇表,词袋模型往往会产生非常高维和稀疏的向量表示。因为每个文档只会包含词汇表中的一小部分词,导致大部分向量维度的值为0。
  3. 无法捕捉语义信息:词袋模型无法识别词语的语义相似性。例如,“苹果”和“橘子”语义上相关,但在词袋模型中它们是完全独立的。

4. 词袋模型的变种

为了克服词袋模型的一些缺点,研究者们提出了一些变种和改进方法,最常见的包括:

a. TF-IDF(词频-逆文档频率)

TF-IDF(Term Frequency-Inverse Document Frequency)是对词袋模型的一种改进方法,它不仅考虑词在文档中的出现频率(TF),还考虑了该词在整个文档集中出现的频率(IDF)。这样可以减少那些在所有文档中频繁出现的常见词(如“的”、“是”等)的影响,同时突出那些在特定文档中重要但在整体文档集中不常见的词。

TF-IDF公式为:

TF-IDF ( t , d , D ) = TF ( t , d ) × IDF ( t , D ) \text{TF-IDF}(t,d,D) = \text{TF}(t,d) \times \text{IDF}(t,D) TF-IDF(t,d,D)=TF(t,d)×IDF(t,D)

其中:

  • TF ( t , d ) \text{TF}(t,d) TF(t,d) 是词 t t t 在文档 d d d 中的词频。
  • IDF ( t , D ) \text{IDF}(t,D) IDF(t,D) 是逆文档频率,表示词 t t t 在文档集 D D D 中的常见程度,计算公式为:

IDF ( t , D ) = log ⁡ N 1 + ∣ { d ∈ D : t ∈ d } ∣ \text{IDF}(t,D) = \log \frac{N}{1 + | \{ d \in D : t \in d \} |} IDF(t,D)=log1+{dD:td}N

其中 N N N 是文档集中的文档总数, ∣ { d ∈ D : t ∈ d } ∣ |\{ d \in D : t \in d \}| {dD:td} 表示包含词 t t t 的文档数。

b. N-gram模型

N-gram模型是一种改进,它不仅考虑单个词的频率,还考虑连续 n n n 个词的组合。通过将多个连续词视为一个整体,N-gram 模型部分解决了词袋模型忽略词序的问题。

  • Unigram(1-gram):只考虑单个词。
  • Bigram(2-gram):考虑连续两个词的组合,例如 “我 喜欢” 和 “喜欢 吃”。
  • Trigram(3-gram):考虑连续三个词的组合。

N-gram 模型能够捕捉一定的词序信息,从而在一定程度上改善词袋模型对文本语义的捕捉能力。

c. 词嵌入(Word Embedding)

相比词袋模型,词嵌入是一种通过深度学习技术生成的稠密向量表示方法,如 Word2Vec、GloVe 等。词嵌入能够捕捉词与词之间的语义关系,并将语义相似的词表示为相近的向量,克服了词袋模型无法捕捉语义相似性的缺点。


5. 词袋模型的应用场景

尽管存在局限性,词袋模型在很多实际应用中仍然广泛使用,尤其在处理大规模文本时。以下是一些典型的应用场景:

a. 文本分类

词袋模型常用于文本分类任务中,例如垃圾邮件过滤、情感分析、新闻分类等。每个文档被表示为词频向量,作为分类模型的输入。

b. 信息检索

在搜索引擎中,词袋模型可以用于对文档和查询进行向量化表示,然后通过计算查询与文档之间的相似度(如余弦相似度)来检索相关文档。

c. 推荐系统

词袋模型可以用来对用户行为进行特征化,并通过分析用户行为中的词汇分布,提供个性化推荐。


6. 词袋模型的计算方法:余弦相似度

在信息检索中,词袋模型常常与余弦相似度结合使用。余弦相似度通过计算两个向量之间的夹角来衡量它们的相似性,其计算公式为:

cos ⁡ θ = A ⋅ B ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ B ∣ ∣ \cos \theta = \frac{\mathbf{A} \cdot \mathbf{B}}{||\mathbf{A}|| \cdot ||\mathbf{B}||} cosθ=∣∣A∣∣∣∣B∣∣AB

其中:

  • A \mathbf{A} A B \mathbf{B} B 是两个文本的词频向量。
  • A ⋅ B \mathbf{A} \cdot \mathbf{B} AB 表示两个向量的点积
  • ∣ ∣ A ∣ ∣ ||\mathbf{A}|| ∣∣A∣∣ ∣ ∣ B ∣ ∣ ||\mathbf{B}|| ∣∣B∣∣ 分别是向量 A \mathbf{A} A B \mathbf{B} B(也称为向量的长度,计算方式为向量分量的平方和开根号)。

余弦相似度的取值范围是 [ − 1 , 1 ] [-1, 1] [1,1],其中:

  • 1 表示两个向量完全相似(夹角为0度),即两个文档包含的词汇及其频率分布完全相同。
  • 0 表示两个向量正交(夹角为90度),即两个文档没有任何相似性。
  • -1 表示两个向量完全相反(夹角为180度),在词袋模型的上下文中,这种情况非常少见。

示例:余弦相似度的计算

假设有两个文档:

  • 文档1:“我喜欢苹果。”
  • 文档2:“苹果很好吃。”

词汇表:[“我”, “喜欢”, “苹果”, “很好”, “吃”]

词袋向量:

  • 文档1向量: ( 1 , 1 , 1 , 0 , 0 ) (1, 1, 1, 0, 0) (1,1,1,0,0)
  • 文档2向量: ( 0 , 0 , 1 , 1 , 1 ) (0, 0, 1, 1, 1) (0,0,1,1,1)

计算它们的余弦相似度:

  1. 计算点积: 1 × 0 + 1 × 0 + 1 × 1 + 0 × 1 + 0 × 1 = 1 1 \times 0 + 1 \times 0 + 1 \times 1 + 0 \times 1 + 0 \times 1 = 1 1×0+1×0+1×1+0×1+0×1=1

  2. 计算两个向量的模:

    • ∣ ∣ A ∣ ∣ = 1 2 + 1 2 + 1 2 + 0 2 + 0 2 = 3 ||\mathbf{A}|| = \sqrt{1^2 + 1^2 + 1^2 + 0^2 + 0^2} = \sqrt{3} ∣∣A∣∣=12+12+12+02+02 =3
    • ∣ ∣ B ∣ ∣ = 0 2 + 0 2 + 1 2 + 1 2 + 1 2 = 3 ||\mathbf{B}|| = \sqrt{0^2 + 0^2 + 1^2 + 1^2 + 1^2} = \sqrt{3} ∣∣B∣∣=02+02+12+12+12 =3
  3. 计算余弦相似度:

cos ⁡ θ = 1 3 ⋅ 3 = 1 3 ≈ 0.33 \cos \theta = \frac{1}{\sqrt{3} \cdot \sqrt{3}} = \frac{1}{3} \approx 0.33 cosθ=3 3 1=310.33

因此,这两个文档的相似度为0.33,表示它们有一定的相似性,但不完全相同。


7. 总结

词袋模型(Bag-of-Words,BOW)是一种简单且高效的文本表示方法,它通过统计词语的出现频率来表示文档,并忽略了词序、句法结构和语义关系。尽管词袋模型易于实现,并且在许多任务中表现良好,但它有一定的局限性,无法捕捉文本中的词序和语义信息。

为了克服这些缺点,研究者们提出了多种改进方法,如TF-IDF(通过平衡词频和文档频率来增强效果)、N-gram模型(通过考虑词语的组合来捕捉词序信息)和词嵌入(通过深度学习生成稠密的语义表示)。

词袋模型的优势在于其计算简单,特别适用于大规模文本数据集,常用于文本分类、信息检索和推荐系统中。结合余弦相似度等相似性度量,词袋模型可以有效地计算文档之间的相似性,并应用于多种文本分析任务。

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

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

相关文章

Draw a triangle

Problem - E - Codeforces 题意:给定两个点的坐标求第三个点并且使得三个点围成的三角形面积最小; 这道题涉及了很多知识点: 1.在二维空间中,两个向量a,b叉乘,|a*b|在数值上等于以向量a和向量b为邻边构成的平行四边形的面积&am…

【Java】异常的处理-方式【主线学习笔记】

文章目录 前言1、处理概述2、Java异常处理机制(方式)方式一(抓抛模型):try-catch-finally方式二:throws 异常类型总结 前言 Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)

3 网络及IP规划 3.1 容器连接网络初步规划 规划所有容器与虚拟机的三张网卡以macvlan的方式进行连接(以后根据应用可以更改),在docker下创建nat、wifi、nei、wai四张网卡,他们和虚拟机及宿主机上NIC的相关连接参数如下表所示&am…

Linux防火墙-案例(二)snatdnat

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

脑机接口技术的未来与现状:Neuralink、机械手臂与视觉假体的突破

近年来,脑机接口(BCI)技术发展迅速,不仅限于科幻小说和电影,已经逐步进入现实应用。特别是马斯克的Neuralink公司推出的“盲视(Blindsight)”设备,最近获得了FDA的突破性设备认定&am…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言,Spring Boot框…

动态规划算法题目练习——62.不同路径

1.题目解析 题目来源:62.不同路径——力扣 测试用例 2.算法原理 1.状态表示 这时由于避免越界初始化所以将左上角置为虚拟位置,创建一个二维dp表用来存储到当前为止的所有路径 2.状态转移方程 以dp[i,j]为例,起点到该位置的路径是起点到其上…

费曼学习法没有输出对象怎么办?

‌费曼学习法并不需要输出对象。‌费曼学习法的核心在于通过将所学知识以简明易懂的方式解释给自己听,从而加深对知识的理解和记忆。这种方法强调的是理解和反思的过程,而不是简单地通过输出(如向他人解释)来检验学习效果。费曼学…

YOLO 二元分类器

YOLO 二元分类器 在评估二元分类器性能时,TP、FP、TN和FN是四个核心指标,它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义: 定义 TP(真阳性):模型正…

找不到concrt140.dll如何修复,快来试试这6种解决方法

concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件,它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施,帮助用户更好地理解和应对这一问题。 一、什么是…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

算法知识点————贪心

贪心:只考虑局部最优解,不考虑全部最优解。有时候得不到最优解。 DP:考虑全局最优解。DP的特点:无后效性(正在求解的时候不关心前面的解是怎么求的); 二者都是在求最优解的,都有最优…

WPF下使用FreeRedis操作RedisStream实现简单的消息队列

Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。 阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据…

Springboot 整合 durid

文章目录 Springboot 整合 druiddruid的优势配置参数使用整合 Druid配置数据源配置参数绑定配置参数配置监控页面配置拦截器 Springboot 整合 druid druid的优势 可以很好的监控 DB 池连接 和 SQL 的执行情况可以给数据库密码加密可以很方便的编写JDBC插件 配置参数 使用 整…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值6.岛屿的最大面积3.最大数4.会议室5.最长连续序列6.寻找两个正序数组的中位数 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请…

.NET CORE程序发布IIS后报错误 500.19

发布IIS后浏览时报错误500.19,同时配置文件web.config的路径中也存在问号“?”。 可能原因:没有安装运行时

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架,带有多模态的特性,对于不同类型的输入数据,不管是文本还是图像均可进行处理,而ViT则是对于Transformer中的视觉方面(也就是输入数据为图像)的衍生物(因Trans…

MATLAB - 浮动基座机器人的逆运动学

系列文章目录 前言 本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转,具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用,即使用安装在浮动和致动基座上的机械臂在空间操纵物体&#xff0…

ubuntu添加 SSH 密钥到 GitHub

好的,以下是详细的步骤,帮助你在 Ubuntu 上生成并添加 SSH 密钥到 GitHub: 1. 检查是否已有 SSH 密钥 首先,检查你是否已经有 SSH 密钥: ls -al ~/.ssh如果看到 id_rsa 或 id_ed25519 文件,则表示你已有…

kubernetes笔记(七)

一、service管理 1.clusterIP 1)创建服务 # 资源对象模板 [rootmaster ~]# kubectl create service clusterip mysvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim mysvc.yaml --- kind: Service apiVersion: v1 metadata:name: mysvc spec:type: Cl…