【大模型基础】P2 Bag-of-Words

目录

  • 词袋模型 概述
  • 词袋模型 实例
    • 第1步 构建语料库
    • 第2步 对句子进行分词
    • 第3步 创建词汇表
    • 第4步 转换词袋表示
    • 第5步 计算余弦相似度
  • 词袋模型的局限性

词袋模型 概述

词袋模型,Bag-of-Words,是一种简单的文本表示方法,也是 NLP 中的一个经典模型。

它将文本中的词看作一个个独立的个体,不考虑它们在句子中的顺序,只关心每个词出现的频次。

e . g . e.g. e.g. 比如我们有两个句子

+ "我喜欢吃苹果"
+ "苹果是我喜欢的水果"

词袋模型会将这两个句子表示成如下向量:

+ {"我": 1, "喜欢": 1, "吃": 1, "苹果": 1}
+ {"苹果": 1, "是": 1, "我": 1, "喜欢": 1, "的": 1, "水果": 1}

而后,词袋模型通过比较两个向量之间的相似度,判断其关联性的强弱


词袋模型 实例

在这里插入图片描述

第1步 构建语料库

# 构建语料库
corpus = ["我特别特别喜欢看电影", 
          "这部电影真的是很好看的电影", 
          "今天天气真好是难得的好天气", 
          "我今天去看了一部电影", 
          "电影院的电影都很好看"]

第2步 对句子进行分词

使用 jieba 包对句子进行分词。

# 对句子进行分词
import jieba

corpus_tokenized = [list(jieba.cut(sentence)) for sentence in corpus]
corpus_tokenized

结果:

[['我', '特别', '特别', '喜欢', '看', '电影'],
 ['这部', '电影', '真的', '是', '很', '好看', '的', '电影'],
 ['今天天气', '真好', '是', '难得', '的', '好', '天气'],
 ['我', '今天', '去', '看', '了', '一部', '电影'],
 ['电影院', '的', '电影', '都', '很', '好看']]

第3步 创建词汇表

根据分词结果,创建该语料库的词汇表,其中每一个词对应一个编号。

# 创建词汇表
word_dict = {}
for sentence in corpus_tokenized:
    for word in sentence:
        if word not in word_dict:
            word_dict[word] = len(word_dict)

word_dict

结果:

{'我': 0,
 '特别': 1,
 '喜欢': 2,
 '看': 3,
 '电影': 4,
 '这部': 5,
 '真的': 6,
 '是': 7,
 '很': 8,
 '好看': 9,
 '的': 10,
 '今天天气': 11,
 '真好': 12,
 '难得': 13,
 '好': 14,
 '天气': 15,
 '今天': 16,
 '去': 17,
 '了': 18,
 '一部': 19,
 '电影院': 20,
 '都': 21}

第4步 转换词袋表示

由第三步可知,该词袋长度为 21,故对该语料库中5句话的每句话转换词袋表示。长度均为21,按照该词在该句中出现的次数表示为句向量。

# 根据词汇表将句子转换为词袋表示
bow_vectors = []
for sentence in corpus_tokenized:
    sentence_vector = [0] * len(word_dict)
    for word in sentence:
        sentence_vector[word_dict[word]] += 1
    bow_vectors.append(sentence_vector)
bow_vectors

结果:

[[1, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]]

第5步 计算余弦相似度

余弦相似度(Cosine Similarity),可以衡量两个文本向量之间的相似性。其值在(-1,1)之间波动,1为最相似。

余弦相似度关注向量之间的角度,而非距离。而角度,能够更好地反映文本向量在概念空间中的相对方向和相似性。

# 计算余弦相似度
import numpy as np

def cosine_similarity(vec1, vec2):
    dot_product = np.dot(vec1, vec2)
    norm_a = np.linalg.norm(vec1)
    norm_b = np.linalg.norm(vec2)

    return dot_product / (norm_a * norm_b)

similarity_matrix = np.zeros((len(corpus), len(corpus)))
for i in range(len(corpus)):
    for j in range(len(corpus)):
        similarity_matrix[i][j] = cosine_similarity(bow_vectors[i], bow_vectors[j])

similarity_matrix

结果:

array([[1.        , 0.2236068 , 0.        , 0.40089186, 0.14433757],
       [0.2236068 , 1.        , 0.23904572, 0.23904572, 0.64549722],
       [0.        , 0.23904572, 1.        , 0.        , 0.15430335],
       [0.40089186, 0.23904572, 0.        , 1.        , 0.15430335],
       [0.14433757, 0.64549722, 0.15430335, 0.15430335, 1.        ]])

词袋模型的局限性

词袋模型逻辑清晰,实现简单,但是存在着一个致命的缺陷,那就是忽略了文本中的上下文信息。词袋模型无法捕捉单词之间的语义关系,因为单词在向量空间中的相对位置没有意义。


2024.09.07

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

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

相关文章

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注…

因MathType导致word复制粘贴失败,显示:运行时错误‘53’

问题:运行时错误‘53’:文件未找到:MathPage.WLL 解决方法:打开MathType所在文件夹 右击MathType图标->点击“打开文件所在位置”->找到MathPage.WLL文件。 然后,把这个文件复制到该目录下:C:\Progr…

jenkins工具的介绍和gitlab安装

使用方式 替代手动,自动化拉取、集成、构建、测试;是CI/CD持续集成、持续部署主流开发模式中重要工具;必须组件 jenkins-gitlab,代码公共仓库服务器(至少6G内存);jenkins-server,需…

论文解读:利用大模型进行基于上下文的OCR校正

论文地址:https://arxiv.org/pdf/2408.17428 背景概述 研究问题:这篇文章要解决的问题是如何利用预训练的语言模型(LMs)来改进光学字符识别(OCR)的质量,特别是针对报纸和期刊等复杂布局的文档。…

Jmeter_循环获取请求接口的字段,并写入文件

通过JSON提取器、计数器、beanshell,循环读取邮箱接口的返回字段,筛选出flag为3的收件人,并写入csv文件。 1、调用接口,获取所有的邮件$.data.total.count; 2、beanshell后置处理total转换成页码,这里是227…

纵切车床和走心机的区别

纵切车床和走心机在机床加工领域中各自扮演着重要的角色,它们在多个方面存在显著的差异。下面,我将从基本概念、工作原理、应用领域以及加工能力等方面来详细阐述这两者的区别。 一.基本概念 ‌纵切车床‌:纵切车床,也被称为自动纵…

NFTScan | 09.02~09.08 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.09.02~ 2024.09.08 NFT Hot News 01/ 数据:NFT 8 月销售额跌破 4 亿美元,创年内新低 9 月 2 日,数据显示,8 月 NFT 的月销售额仅为 …

ozon免费选品工具,OZON免费选品神器

在跨境电商的浩瀚海洋中,寻找那片属于自己的盈利蓝海,是每个商家梦寐以求的目标。随着俄罗斯电商市场的迅速崛起,Ozon平台以其庞大的用户基数和不断增长的市场份额,成为了众多跨境卖家眼中的“香饽饽”。然而,面对琳琅…

vue-router + el-menu

1. el-menu的router属性 在el-menu中有一属性:router,默认是false 1.1 使用默认配置,即false 这时候需要自己在点击子菜单的时候进行导航,在el-menu添加方法,里边有三个参数 index: 选中菜单项的 index,indexPath…

jmeter之ForEach控制器使用

ForEach控制器作用: 一般和用户自定义变量或者正则表达式提取器配合使用,读取返回结果中一系列相关的变量值,该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值(类似python当中的for语句,用来遍历操作) 本节代码已上…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

Spring Cloud Sleuth+Zipkin服务链路追踪

前言&#xff1a;为什么要用链路追踪 微服务架构是一个分布式架构&#xff0c;按照规则划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。服务单元数量多&#xff0c;业务复杂&#xff0c;出现错误和异常往往很难定位问题。主要体现在&#xff0c;一个请求可能需要…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面&#xff1a;本报告所有代码公开在附带资源中&#xff0c;无法下载代码资源的伙伴私信留下邮箱&#xff0c;小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM&#xff08;Support Vector Machine&#xff09;算法思想&#xff0c;利用MATLAB的特定工具箱和库函…

springboot房屋租赁系统-计算机毕业设计源码32524

目 录 摘要 1 绪论 1.1 研究背景与意义 1.2开发现状 1.3论文结构与章节安排 2 房屋租赁管理系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 …

解决浏览器自动将http网址转https

删除浏览器自动使用https的方式 在浏览器地址栏输入&#xff1a;chrome://net-internals/#hsts PS:如果是edge浏览器可输入&#xff1a;edge://net-internals/#hsts 在Delete domain security policies搜索框下&#xff0c;输入要删除的域名,然后点击delete 解决方法&#…

[网络]TCP/IP协议 之 TCP协议的核心机制(2)

文章目录 TCP核心机制1. 确认应答2. 超时重传3. 连接管理三次握手四次挥手 4. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 粘包问题10. 异常情况 TCP核心机制 1. 确认应答 (上篇) 2. 超时重传 (上篇) 3. 连接管理 建立连接的流程: 三次握手 断开连接的流程…

相亲交友程序系统开发产品分析

相亲交友系统是一种专门为单身人士设计的社交平台&#xff0c;旨在帮助他们找到合适的伴侣。这类系统通常包括了线上和线下的多种互动方式&#xff0c;能够让参与者在舒适的环境中相识、相知。编辑&#xff1a;qawsed2466。以下是相亲交友系统的一些关键特点和优势&#xff1a;…

细数H.264 H.265 H.266区别

H.264、H.265&#xff08;HEVC&#xff09;和H.266&#xff08;VVC&#xff09;是三种不同的视频编码标准&#xff0c;它们在压缩效率、图像质量、支持的分辨率以及技术特性等方面存在显著差异。以下是对这三种编码标准的详细比较&#xff1a; 概述 H.264&#xff1a;也称为AV…

基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及…

基于Python的可视化在线学习系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的可…