AI大模型开发原理篇-2:语言模型雏形之词袋模型

基本概念

词袋模型(Bag of Words,简称 BOW)是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法,它将文本看作是一组单词的集合,并忽略文本中的语法、词序等信息,仅关注每个词的出现频率。

  • 文本表示:词袋模型将每篇文本(如句子或文档)转换为一个固定长度的向量,其中每个元素表示词汇表中某个特定词在该文本中出现的次数。
  • 忽略顺序:词袋模型不考虑词语出现的顺序,只关注哪些词出现以及每个词的频率。

比如下面这2句话:

  •  "沐雪喜欢吃葡萄"
  •  "葡萄是沐雪喜欢的水果"

词袋模型会将这两个句子表示成如下的向量。
{"沐雪": 1, "喜欢": 1, "吃": 1, "葡萄": 1}
{"葡萄": 1, "是": 1, "沐雪": 1, "喜欢": 1, "的": 1, "水果": 1}
通过比较这两个向量之间的相似度,我们就可以判断出它们之间关联性的强弱。

构建词袋模型的步骤

1、文本预处理

  • 分词:将文本划分为独立的词(对于英文,通常是按空格和标点符号分词;对于中文,可能需要分词工具如jieba)。
  • 去除停用词(可选):如“的”、“是”、“和”等无实际意义的高频词。
  • 大小写标准化(可选):统一大小写,如将所有字母转换为小写。
  • 去除标点符号(可选):去掉文本中的标点符号,以避免干扰。

2、构建词汇表

例如,假设我们有以下两个句子:

词汇表为:["我", "爱", "自然语言", "学习"]

  • 词袋模型会构建一个文本数据集中的所有不同词汇组成的词汇表。这个词汇表的每个词都会成为向量的一个维度。
  • “我 爱 自然语言”
  • “我 学习 自然语言”

3、构建词频向量

例如,句子“我 爱 自然语言”在词汇表["我", "爱", "自然语言", "学习"]中出现的次数为:

因此,文本“我 爱 自然语言”可以表示为向量:[1, 1, 1, 0]。

对于第二个句子“我 学习 自然语言”,它在同样的词汇表中的表示为:

对应的词袋向量为:[1, 0, 1, 1]。

  • 对每篇文本,统计词汇表中每个词在文本中出现的次数。文本中的每个词都会映射到一个数字,表示该词在该文本中的出现次数。
  • "我":1次
  • "爱":1次
  • "自然语言":1次
  • "学习":0次
  • "我":1次
  • "爱":0次
  • "自然语言":1次
  • "学习":1次

4、构建特征矩阵

假设有两个文档,分别为“我 爱 自然语言”和“我 学习 自然语言”,其特征矩阵为:

文档自然语言学习
文档11110
文档21011
  • 如果我们有多个句子或文档,最终的结果就是一个特征矩阵,其中每一行表示一个文档,每一列表示词汇表中的一个词。矩阵的元素表示词汇表中相应词在该文档中出现的次数。

5、计算余弦相似度

计算余弦相似度(Cosine Similarity),衡量两个文本向量的相似性。余弦相似度可用来衡量两个向量的相似程度。它的值在-1到1之间,值越接近1,表示两个向量越相似;值越接近-1,表示两个向量越不相似;当值接近0时,表示两个向量之间没有明显的相似性。在文本处理中,我们通常使用余弦相似度来衡量两个文本在语义上的相似程度。对于词袋表示的文本向量,使用余弦相似度计算文本之间的相似程度可以减少句子长度差异带来的影响。

补充:

余弦相似度和向量距离(Vector Distance)都可以衡量两个向量之间的相似性。余弦相似度关注向量之间的角度,而不是它们之间的距离,其取值范围在-1(完全相反)到1(完全相同)之间。向量距离关注向量之间的实际距离,通常使用欧几里得距离(Euclidean Distance)来计算。两个向量越接近,它们的距离越小。
如果要衡量两个向量的相似性,而不关心它们的大小,那么余弦相似度会更合适。因此,余弦相似度通常用于衡量文本、图像等高维数据的相似性,因为在这些场景下,关注向量的方向关系通常比关注距离更有意义。而在一些需要计算实际距离的应用场景,如聚类分析、推荐系统等,向量距离会更合适。


矩阵图中每个单元格表示两个句子之间的余弦相似度,颜色越深,句子在语义上越相似。例如,“这部电影真的是很好看的电影”和“电影院句子在语义上越相似。例如,“这部电影真的是很好看的电影”和“电影院的电影都很好看”交叉处的单元格颜色相对较深,说明它们具有较高的余弦相似度,这意味着它们在语义上较为相似。

词袋模型的优缺点

优点

  • 简单易懂:词袋模型非常直观,理解和实现都比较简单。
  • 不依赖语法:能够处理没有语法结构的文本,适用于许多实际应用。
  • 容易计算:由于不考虑词序列,可以直接进行计算,且非常适合机器学习中的特征提取。

缺点

  • 忽略词序:词袋模型无法捕捉到词语之间的顺序关系,因此不能处理像“我爱自然语言”和“自然语言我爱”这种顺序不同但含义相同的情况。
  • 稀疏性:对于大型语料库,词汇表的大小会非常庞大,这可能导致特征矩阵非常稀疏,大量的零值会降低计算效率。
  • 语义信息丢失:仅关注词频而忽略了语法和上下文信息,导致词袋模型在处理词义和上下文依赖时的能力较弱。

词袋模型的应用场景

  • 文本分类:如垃圾邮件识别、情感分析、主题分类等。
  • 信息检索:将文档表示为词袋模型,计算文档与查询的相似度。
  • 推荐系统:利用文本特征进行推荐,例如根据用户的评论进行商品推荐。

One-Hot编码

One-Hot编码也可以看作一种特殊的词袋表示。在One-Hot编码中,每个词都对应一个只包含一个1,其他元素全为0的向量,1的位置与该词在词汇表中的索引对应。在单词独立成句的情况下,词袋表示就成了One-Hot编码。比如上面的语料库中,“我”这个单词如果独立成句,则该句子的词袋表示为[1, 0, 0, 0],这完全等价于“我”在当前词汇表中的One-Hot编码。

词袋模型与N-Gram模型的区别

N-Gram和Bag-of-Words是两种非常基础但是仍然十分常用的自然语言处理技术,它们都用于表示文本数据,但具有不同的特点和适用场景。


N-Gram是一种用于语言建模的技术,它用来估计文本中词序列的概率分布。N-Gram模型将文本看作一个由词序列构成的随机过程,根据已有的文本数据,计算出词序列出现的概率。因此,N-Gram主要用于语言建模、文本生成、语音识别等自然语言处理任务中。


(1)N-Gram是一种基于连续词序列的文本表示方法。它将文本分割成由连续的N
个词组成的片段,从而捕捉局部语序信息。
(2)N-Gram可以根据不同的N
值捕捉不同程度的上下文信息。例如,1-Gram(Unigram)仅关注单个词,而2-Gram(Bigram)关注相邻的两个词的组合,以此类推。
(3)随着N的增加,模型可能会遇到数据稀疏性问题,导致模型性能下降。


Bag-of-Words则是一种用于文本表示的技术,它将文本看作由单词构成的无序集合,通过统计单词在文本中出现的频次来表示文本。因此,Bag-of-Words主要用于文本分类、情感分析、信息检索等自然语言处理任务中。


(1)Bag-of-Words是基于词频将文本表示为一个向量,其中每个维度对应词汇表中的一个单词,其值为该单词在文本中出现的次数。
(2)Bag-of-Words忽略了文本中的词序信息,只关注词频。这使得词袋模型在某些任务中表现出色,如主题建模和文本分类,但在需要捕捉词序信息的任务中表现较差,如机器翻译和命名实体识别。
(3)Bag-of-Words可能会导致高维稀疏表示,因为文本向量的长度取决于词汇表的大小。为解决这个问题,可以使用降维技术,如主成分分析(Principal Component Analysis,PCA)或潜在语义分析(LatentSemantic Analysis,LSA)。

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

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

相关文章

创作三载·福启新章2025

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言机缘收获日常憧憬 总结 前言 在2022年01月26日,我踏上了技术创作的征…

论文阅读(十四):贝叶斯网络在全基因组DNA甲基化研究中的应用

1.论文链接:Bayesian Networks in the Study of Genome-wide DNA Methylation 摘要: 本章探讨了贝叶斯网络在基因组规模的脱氧核糖核酸(DNA)甲基化研究中的应用。它首先描述了DNA甲基化的基因组规模注释的不同实验方法。详细介绍…

vue-有关于TS与路由器

title: vue(TS)路由器 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端Vue3-第二部分 这里是代码中出现TS的,后面是路由器 现在先上代码,步步分析。 eg1-props的使用 步步分析代码(先理解,再实践) 框架…

docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像…

再见了流氓软件~~

聊一聊 最近一直在测试软件,需要装各种软件和工具配合测试,导致现在电脑都快装满了,需要把不用的软件卸载。电脑自带的卸载只能一个一个卸载,不但麻烦还卸载不干净。 相信很多人也有这方面的需要,电脑装了很多软件&a…

PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践

title: PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践 date: 2025/1/28 updated: 2025/1/28 author: cmdragon excerpt: 在数据库管理中,备份与恢复是确保数据安全和业务连续性的关键措施。PostgreSQL 提供了一系列工具,以便于数据库管理员对数据进行…

go gin配置air

一、依赖下载 安装最新,且在你工作区下进行安装,我的是D:/GO是我的工作区,所有项目都在目录下的src, go install github.com/air-verse/airlatest 如果出现类似报错: 将图中第三行 github.com/air-verse/air 替换最…

QT 通过ODBC连接数据库的好方法:

效果图: PWD使用自己的,我的这是自己的,所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称(DSN&am…

【Rust自学】15.7. 循环引用导致内存泄漏

说句题外话,这篇文章真心很难,有看不懂可以在评论区问,我会尽快作答的。 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω…

免杀国内主流杀软的恶意样本分析

目录下存在愤怒的小鸟.exe和fun.dll文件,最新版火绒,windows defender,腾讯电脑管家,360静态扫描都未发现恶意程序 动态执行,杀软也未拦截 上传到virustotal网站分析恶意程序,只有三个引擎检测出来 die分析…

gesp(C++六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通

gesp(C六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通 题目描述 某公司有 N N N 名员工,编号从 0 0 0 至 N − 1 N-1 N−1。其中,除了 0 0 0 号员工是老板,其余每名员工都有一个直接领导…

16届蓝桥杯寒假刷题营】第2期DAY5IOI赛

3.小蓝小彬的代码挑战 - 蓝桥云课 问题描述 在蓝桥杯大赛中,小蓝和小彤是一对好朋友。他们在比赛中遇到了一个有趣的挑战。这个挑战是给定一个由大写字母组成的代码,他们需要找出这串代码中有多少个子序列LQB。小蓝和小彬都很聪明,他们想到…

【云安全】云原生-K8S-搭建/安装/部署

一、准备3台虚拟机 务必保证3台是同样的操作系统! 1、我这里原有1台centos7,为了节省资源和效率,打算通过“创建链接克隆”2台出来 2、克隆之前,先看一下是否存在k8s相关组件,或者docker相关组件 3、卸载原有的docker …

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…

基于Langchain-Chatchat + ChatGLM 本地部署知识库

一、相关环境 参考链接: Github:https://github.com/chatchat-space/Langchain-Chatchat Langchain-chatchat版本:v0.3.1 安装环境:Ubuntu:22.04,CUDA:12.1 二、搭建过程 2.1 环境配置 2.1.1 创建chatchat虚拟环…

【win11】解决msrdc.exe窗口启动导致周期性失去焦点

msrdc.exe randomly stealing focus 最近写代码时,经常出现周期性失去焦点的情况非常恼人,不确定是否是Q4的微软更新引起?换了输入法也不行,只能借助工具来查看:大神的工具非常好: 可以发现是remote app 启动了一个UI…

危机13小时:追踪一场GitHub投毒事件

事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…

论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策

1.论文链接:Bayesian, Systems-based, Multilevel Analysis of Associations for Complex Phenotypes: from Interpretation to Decision 摘要: 遗传关联研究(GAS)报告的结果相对稀缺,促使许多研究方向。尽管关联概念…

设计模式-建造者模式、原型模式

目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,…

Python GUI 开发 | Qt Designer — 工具介绍

关注这个框架的其他相关笔记:Python GUI 开发 | PySide6 & PyQt6 学习手册-CSDN博客 Qt Designer 即 Qt 设计师,是一个强大、灵活的可视化 GUI 设计工具,可以帮助用户加快开发 PySide6 程序的速度。 Qt Designer 是专门用来制作 PySide6…