NLP_Bag-Of-Words(词袋模型)

文章目录

  • 词袋模型
  • 用词袋模型计算文本相似度
    • 1.构建实验语料库
    • 2.给句子分词
    • 3.创建词汇表
    • 4.生成词袋表示
    • 5.计算余弦相似度
    • 6.可视化余弦相似度
  • 词袋模型小结


词袋模型

词袋模型是一种简单的文本表示方法,也是自然语言处理的一个经典模型。它将文本中的词看作一个个独立的个体,不考虑它们在句子中的顺序,只关心每个词出现的频次,如下图所示
在这里插入图片描述

用词袋模型计算文本相似度

在这里插入图片描述

1.构建实验语料库

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

2.给句子分词

# 对句子进行分词
import jieba # 导入 jieba 包
# 使用 jieba.cut 进行分词,并将结果转换为列表,存储在 corpus_tokenized 中
corpus_tokenized = [list(jieba.cut(sentence)) for sentence in corpus]

3.创建词汇表

# 创建词汇表
word_dict = {} # 初始化词汇表
# 遍历分词后的语料库
for sentence in corpus_tokenized:for word in sentence:# 如果词汇表中没有该词,则将其添加到词汇表中if word not in word_dict:word_dict[word] = len(word_dict) # 分配当前词汇表索引
print(" 词汇表:", word_dict) # 打印词汇表

在这里插入图片描述

4.生成词袋表示

# 根据词汇表将句子转换为词袋表示
bow_vectors = [] # 初始化词袋表示
# 遍历分词后的语料库
for sentence in corpus_tokenized:# 初始化一个全 0 向量,其长度等于词汇表大小sentence_vector = [0] * len(word_dict)for word in sentence:# 将对应词的索引位置加 1,表示该词在当前句子中出现了一次sentence_vector[word_dict[word]] += 1# 将当前句子的词袋向量添加到向量列表中bow_vectors.append(sentence_vector)
print(" 词袋表示:", bow_vectors) # 打印词袋表示

在这里插入图片描述

5.计算余弦相似度

计算余弦相似度(Cosine Similarity),衡量两个文本向量的相似性。

余弦相似度可用来衡量两个向量的相似程度。它的值在-1到1之间,值越接近1,表示两个向量越相似;值越接近-1,表示两个向量越不相似;当值接近0时,表示两个向量之间没有明显的相似性。

在这里插入图片描述

余弦相似度和向量距离(Vector Distance)都可以衡量两个向量之间的相似性。余弦相似度关注向量之间的角度,而不是它们之间的距离,其取值范围在-1(完全相反)到1(完全相同)之间。向量距离关注向量之间的实际距离,通常使用欧几里得距离(Euclidean Distance)来计算。两个向量越接近,它们的距离越小。

如果要衡量两个向量的相似性,而不关心它们的大小,那么余弦相似度会更合适。因此,余弦相似度通常用于衡量文本、图像等高维数据的相似性,因为在这些场景下,关注向量的方向关系通常比关注距离更有意义。而在一些需要计算实际距离的应用场景,如聚类分析、推荐系统等,向量距离会更合适。

# 导入 numpy 库,用于计算余弦相似度
import numpy as np 
# 定义余弦相似度函数
def cosine_similarity(vec1, vec2):dot_product = np.dot(vec1, vec2) # 计算向量 vec1 和 vec2 的点积norm_a = np.linalg.norm(vec1) # 计算向量 vec1 的范数norm_b = np.linalg.norm(vec2) # 计算向量 vec2 的范数  return dot_product / (norm_a * norm_b) # 返回余弦相似度
# 初始化一个全 0 矩阵,用于存储余弦相似度
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])

6.可视化余弦相似度

# 导入 matplotlib 库,用于可视化余弦相似度矩阵
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='SimHei.ttf', size = 15)plt.rcParams["font.family"]=['SimHei'] # 用来设定字体样式
plt.rcParams['font.sans-serif']=['SimHei'] # 用来设定无衬线字体样式
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
fig, ax = plt.subplots() # 创建一个绘图对象
# 使用 matshow 函数绘制余弦相似度矩阵,颜色使用蓝色调
cax = ax.matshow(similarity_matrix, cmap=plt.cm.Blues)
fig.colorbar(cax) # 条形图颜色映射
ax.set_xticks(range(len(corpus))) # x 轴刻度
ax.set_yticks(range(len(corpus))) # y 轴刻度
ax.set_xticklabels(corpus, rotation=45, ha='left', FontProperties = font) # 刻度标签 
ax.set_yticklabels(corpus, FontProperties = font) # 刻度标签为原始句子
plt.show() # 显示图形

在这里插入图片描述

词袋模型小结

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

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

学习的参考资料:
(1)书籍
利用Python进行数据分析
西瓜书
百面机器学习
机器学习实战
阿里云天池大赛赛题解析(机器学习篇)
白话机器学习中的数学
零基础学机器学习
图解机器学习算法

动手学深度学习(pytorch)

(2)机构
光环大数据
开课吧
极客时间
七月在线
深度之眼
贪心学院
拉勾教育
博学谷
慕课网
海贼宝藏

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

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

相关文章

Java Collection 集合体系的使用

Java Collection 集合体系的使用 package com.zhong.collection;import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet;public class CollectionDemo {public static void main(String[] args) {// ArrayList 有序 可…

C语言贪吃蛇详解

个人简介:双非大二学生 个人博客:Monodye 今日鸡汤:人生就像一盒巧克力,你永远不知道下一块是什么味的 C语言基础刷题:牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

###C语言程序设计-----C语言学习(9)#函数基础

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 基础知识的学习 1.函数的定义 函数是一个完成特定工作的独立程序模块&…

GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读

目录 1 ChatGPT概述1.1 what is chatGPT1.2 How does ChatGPT work1.3 The applications of ChatGPT1.3 The limitations of ChatGPT 2 算法原理2.1 GPT-12.1.1 Unsupervised pre-training2.1.2 Supervised fine-tuning2.1.3 语料2.1.4 分析 2.2 GPT-22.3 GPT-32.4 InstructGPT…

如何使用MCSM搭建我的世界Java版服务器并实现远程联机游戏

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

面试题:SpringBoot 在打包部署的时候打包成 jar 和 war 有什么不同?

文章目录 前言jar包和war包的区别一、打包成jar二、打包成war包形式 前言 首先给大家来讲一个我们遇到的一个奇怪的问题: 我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行,没…

Unable to access SFTP sub-system, operation failed

解决方法: 1. 编辑 /etc/ssh/sshd_config 配置文件 2. 重启SSHD服务 service sshd restart 还有一种特殊情况,也是本文重点要介绍的: 当启用sftp-server后,使用FlashFXP等工具传输文件的时候,仍然失败,…

『运维备忘录』之 Vim 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

MySQL进阶45讲【10】MySQL为什么有时候会选错索引?

1 前言 前面我们介绍过索引,在MySQL中一张表其实是可以支持多个索引的。但是,写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。 大家有没有碰到过这种情况,一条本来可以执行得…

vue2 自定义指令 v-highlight 文本高亮显示分享

简单分享一个文本高亮显示的自定义指令,主要分两部分: 1、代码实现:在 main.js 文件中添加一个自定义指令,实现搜索时文本高亮显示,代码如下: const highlightText (el, searchText) > {const textCo…

Linux--- vim详解

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 “学如逆水行舟&#xff0…

大数据企业应用场景分析

目录 一、企业分析 1.1 企业领域维度分析 1.2 技术服务型维度分析 1.3 细分领域维度分析 二、大数据应用场景 2.1 数据分析 2.2 智能推荐 2.3 产品/流程优化 2.4 异常监测 2.5 智能管理 2.6 人工智能和机器学习 三、总结 前言:想讲清楚大数据应用对企业…

响应式开发如何设置断点,小屏幕界面该如何显示(有动图)

Hi,我是贝格前端工场,本期分享响应式开发,如何设置屏幕断点,pc页面布局到了移动端之后该如何布局的问题,微软也提供了设置屏幕断点的动图演示,非常直观。 一、什么是响应式开发,为何要设置屏幕断…

常用存储器

目录 一、存储器的种类 二、易失性存储器(RAM) 1. DRAM (1)SDRAM (2)DDR SDRAM 2. SRAM 3. DRAM与SRAM的应用场合 三、非易失性存储器 1. ROM (1)MASK ROM (2…

YoloV8改进策略:Neck改进:HAM混合注意力机制改进YoloV8|多种改进,多种姿势涨点|代码注释详解

摘要 HAM通过快速一维卷积来缓解通道注意机制的负担,并引入通道分离技术自适应强调重要特征。HAM作为通用模块,在CIFAR-10、CIFAR-100和STL-10数据集上实现了SOTA级别的分类性能。 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320322002667?vi…

2024年【天津市安全员B证】考试报名及天津市安全员B证最新解析

题库来源:安全生产模拟考试一点通公众号小程序 天津市安全员B证考试报名根据新天津市安全员B证考试大纲要求,安全生产模拟考试一点通将天津市安全员B证模拟考试试题进行汇编,组成一套天津市安全员B证全真模拟考试试题,学员可通过…

【产品升级】SmartPipe升级到版本2.0

在近一个月的攻关和测试下,SmartPipe软件轴线自动识别算法的性能大幅提升,鲁棒性和稳定性进一步增强。近一年来客户累计反馈的多种复杂管路(包括带有支管管路、带有压瘪段管路、推弯管、装配管、带有复杂孔洞管路等)现在均能够正确…

PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程

目录 PySpark SQL 基础 SparkSession对象 DataFrame入门 DataFrame构建 DataFrame代码风格 DSL SQL SparkSQL Shuffle 分区数目 DataFrame数据写出 Spark UDF Catalyst优化器 Spark SQL的执行流程 PySpark SQL 基础 PySpark SQL与Hive的异同 Hive和Spark 均是:“分…

数据挖掘实战-基于决策树算法构建北京市空气质量预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

ChatGPT Plus如何升级?信用卡付款失败怎么办?如何使用信用卡升级 ChatGPT Plus?

ChatGPT Plus是OpenAI提供的一种高级服务,它相较于标准版本,提供了更快的响应速度、更强大的功能,并且用户可以优先体验到新推出的功能。 尽管许多用户愿意支付 20 美元的月费来订阅 GPT-4,但在实际支付过程中,特别是…