自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本
大家好,我是微学AI,今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本向量和欧氏距离相似度。将待匹配的文本和查询语句都转换为向量表示。可以使用词袋模型、tf-idf等方法将文本转换为向量。词袋模型将文本表示为每个词汇在文本中的出现次数,tf-idf则考虑了词汇在整个语料库中的重要性。 计算文本向量之间的欧氏距离。欧氏距离是一种常用的衡量向量相似度的方法,它表示两个向量之间的几何距离。 选择与查询语句具有最小欧氏距离的文本作为匹配结果。距离越小,表示两个文本越相似。
项目背景
基于文本向量和欧氏距离相似度进行文本匹配。通过将文本表示为向量,可以计算两个文本之间的欧氏距离相似度来衡量它们的语义相似程度。这种相似度匹配方法可以应用于各种文本相关的任务,如信息检索、句子匹配、推荐系统等。
该项目解决了文本匹配中的一个痛点,即如何找到与查询语句最相似的文本。在大规模的文本数据中,快速准确地找到与用户输入查询语句相关的文本对于提供高效的信息检索和推荐非常重要。传统的基于关键词匹配的方法往往无法处理语义相似度,而基于文本向量和欧氏距离相似度的方法可以更好地捕捉文本之间的语义关系,提高匹配的准确性。
通过该项目,可以实现快速地搜索和匹配与查询语句最相关的文本,从而提供更准确的搜索结果和个性化推荐,大大提高用户体验。同时,该方法还可以应用于其他领域,如自然语言处理、文本挖掘等,有着广泛的应用前景。
数学原理
基于文本向量和欧式距离相似度的文本相似度匹配是通过计算文本之间的向量表示之间的欧式距离来确定它们的相似程度。下面是相关的数学原理:
-
文本向量表示:将文本转化为向量表示通常使用词袋模型(Bag-of-Words)或者词嵌入(Word Embedding)、TF-IDF技术。在词袋模型中,文本被表示为一个向量,其中每个维度对应于一个单词或特征。词嵌入则通过将每个单词映射到一个低维连续向量空间中的向量来表示文本。
-
欧式距离:欧式距离是用来衡量两个向量直接的距离。对于两个向量x和y,其欧式距离可以通过以下公式计算:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} d(x,y)=i=1∑n(xi−yi)2
其中, n n n是向量的维度, x i x_i xi 和 y i y_i yi 分别表示向量 x x x 和 y y y 在第 i i i个维度上的取值。
-
相似度计算:根据欧式距离,我们可以计算文本之间的相似度得分。相似度计算方法通常是将欧式距离映射到一个相似度范围内,例如使用归一化公式:
s i m i l a r i t y = 1 1 + d similarity = \frac{1}{1 + d} similarity=1+d1
其中, d d d是欧式距离。
通过计算查询语句与其他文本之间的欧式距离,并根据相似度计算公式计算相似度得分,可以找到与查询语句最相似的文本。相似度得分越高,表示两个文本越相似。
实现步骤:
1.将样例数据存储在documents列表中,每个元素代表一个文本。
2.使用分词工具jieba对文本进行分词处理,生成分词后的文本列表documents_tokenized。
3.构建词汇表,使用TfidfVectorizer类来计算TF-IDF矩阵。TF-IDF是一种文本特征表示方法,它考虑了词频和逆文档频率,可以反映出词在文本中的重要程度。
4.将TF-IDF矩阵转换为DataFrame,其中行代表每个文本,列代表每个词汇。
5.定义查询语句并将其分词处理得到查询向量。
6.计算查询向量与库中各文本向量的余弦相似度,得到一个相似度矩阵。
7.找到相似度矩阵中相似度最高的文本索引,即为与查询语句最相似的文本。
8.最后,输出查询语句和最相似文本。
实现代码
现在用最清晰的代码实现文本相似度查找的功能:
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import jieba# 样例数据
documents = ['北京的天气挺好','我要去北京玩','我来自中国',"北京是比较好玩的地方","北京有故宫这个景点","这个假期去福州玩,感觉不错",'上海的天气很热','我打算去上海旅游','上海是一个现代化城市','上海有很多高楼大厦','上海的夜景非常美丽','这个周末我要去上海参加活动','广州的气温很高','我喜欢广州的美食','广州是一个繁华的城市','广州有很多著名的旅游景点']# 分词处理
tokenizer = lambda x: jieba.cut(x)# 将文本进行分解
documents_tokenized = [" ".join(tokenizer(doc)) for doc in documents]# 构建词汇表
vectorizer = TfidfVectorizer()
vectorizer.fit(documents_tokenized)
vocabulary = vectorizer.get_feature_names_out()# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.transform(documents_tokenized)# 存储文本向量
df = pd.DataFrame(tfidf_matrix.toarray(), columns=vocabulary)if __name__ == "__main__":# 查询相似度query = "你知道假期去福州,有什么景点推荐的"query_tokenized = " ".join(tokenizer(query))query_vector = vectorizer.transform([query_tokenized])# 计算查询向量与库中向量的相似度similarity_scores = cosine_similarity(query_vector, tfidf_matrix)print(similarity_scores)# 找到相似度最高的文本most_similar_index = similarity_scores.argmax()most_similar_text = documents[most_similar_index]print("查询语句:", query)print("最相似文本:", most_similar_text)
运行结果:
[[0. 0. 0. 0. 0.3319871 0.5341931]]
查询语句: 你知道假期去福州,有什么景点推荐的
最相似文本: 这个假期去福州玩,感觉不错
总结
本文介绍了一种基于文本向量和欧氏距离相似度的文本匹配方法,用于找到与查询语句最相似的文本。首先,通过将文本和查询语句转换为向量表示,使用词袋模型或tf-idf等方法进行向量化。然后,计算文本向量之间的欧氏距离,衡量它们之间的相似度。最后,选择具有最小欧氏距离的文本作为匹配结果。该方法强调了文本的语义信息,但忽略了上下文信息。在实际应用中,可以结合其他技术和算法以提高准确性。
相关文章:

自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本
大家好,我是微学AI,今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本…...

iOS开发-聊天emoji表情与自定义动图表情左右滑动控件
iOS开发-聊天emoji表情与自定义动图表情左右滑动控件 之前开发中遇到需要实现聊天emoji表情与自定义动图表情左右滑动控件。使用UICollectionView实现。 一、效果图 二、实现代码 UICollectionView是一种类似于UITableView但又比UITableView功能更强大、更灵活的视图&#x…...
Mybatis plus 存储 List、Map
目录 一、前提概要1.1 支持环境1.2 需求场景 二、需求实现2.1 非自定义数据类型,List、Map2.2 自定义类型数据类型 一、前提概要 1.1 支持环境 数据库支持:MySql版本要求 5.7 1.2 需求场景 使用MySQL数据库存储时,由于业务要求实体类中特…...

Electron 系统通知 Notification 实践指南
系统通知是桌面应用的常见功能,用于给用户发送提醒(刷下存在感 🙂),还能帮定点击事件以便后续的操作。 Electron 自带通知模块,下方代码是一个简单的示例 const { Notification } require(electron)cons…...

配置代理——解决跨域问题(详解)
之前写项目的时候总会遇到配置代理的问题,可是配置了之后有时有用,有时就没有用,自己之前学的也是懵懵懂懂,于是专门花了一个小时去了解了如何配置代理跨域,然后在此记录一下,方便自己以后查阅。 一、 常用…...
VScode 避免逗号、括号时自动补全
设置项 控制是否应在遇到提交字符时接受建议。例如,在JavaScript中,半角分号(;)可以为提交字符,能够在接受建议的同时键入该字符。 "editor.acceptSuggestionOnCommitCharacter": false起因 比如打伪代码的时候输入一些缺少上下…...

【数学建模】时间序列分析
文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大,反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…...

Spring使用注解进行对象装配(DI)
文章目录 一. 什么是对象装配二. 三种注入方式1. 属性注入2. 构造方法注入3. Setter注入 三. 三种注入方式的优缺点四. 综合练习 通过五大类注解可以更便捷的将对象存储到 Spring 中,同样也可以使用注解将已经储存的对象取出来,直接赋值到注解所在类的一…...

数学建模-蒙特卡洛模拟
%% 蒙特卡罗用于模拟三门问题 clear;clc %% (1)预备知识 % randi([a,b],m,n)函数可在指定区间[a,b]内随机取出大小为m*n的整数矩阵 randi([1,5],5,8) %在区间[1,5]内随机取出大小为5*8的整数矩阵 % 2 5 4 5 3 1 4 2 %…...

Pearson correlation皮尔逊相关性分析
在参数检验的相关性分析方法主要是皮尔逊相关(Pearson correlation)。既然是参数检验方法,肯定是有一些前提条件。皮尔逊相关的前提是必须满足以下几个条件: 变量是连续变量;比较的两个变量必须来源于同一个总体&…...
P1036 [NOIP2002 普及组] 选数
题目描述 已知 �n 个整数 �1,�2,⋯ ,��x1,x2,⋯,xn,以及 11 个整数 �k(�<�k<n)。从 �n 个整数中任选 �k 个…...

css终极方案PostCSS
一见如故 原理 所有的css框架都在一样的事,那就是由一个css生成一个新的css,那么postcss就来做了一个抽离: 1、将原有的css解析成抽象语法树 2、中间经过若干个插件 3、重新文本化,形成新的css postcss.config.js module.expor…...
代码随想录算法训练营第三天|417. 太平洋大西洋水流问题|24. 两两交换链表中的节点|19.删除链表的倒数第N个节点|面试题 02.07. 链表相交|
417. 太平洋大西洋水流问题 水往高处流,先记录两个海祥往高处流所能留到的地址,之后将他们的合并区域进行输出 static const int dirs[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};class Solution { public:vector<vector<int>> heights;v…...

【Java】Spring——创建Spring + 对Spring的存储 /读取对象操作
文章目录 前言一、创建Spring项目二、向Spring容器中存储 Bean 对象三、从Spring容器中读取 Bean 对象得到Spring上下文对象得到 Bean 对象 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互…...

RTPSv2.2(中文版)
实时发布订阅协议 (RTPS) DDS互操作性 有线协议规范 V2.2 (2014-09-01正式发布) https://www.omg.org/spec/DDSI-RTPS/2.2/PDF 目 录 1 范围Scope 9 2 一致性Conformance 9 3 参考文献References 9 4 术语和定义Terms a…...

Django学习笔记-视图(views)的使用
Django中可以使用views进行管理,类似于WPF的MVVM的ViewModel层,也相当于MVC架构的模Controller层。 一、基于函数的视图FBV(Function-Based View) 通过定义一个函数,包含HttpRequest对象作为参数,用来接受…...

四姑娘山三日游
趁着小孩放暑假,从昆明回来之后,直接自驾到四姑娘山。 第一天 成都-四川省阿坝藏族羌族自治州小金县日隆镇(20230711) 大概9:30从成都市郫都区出发,路线如下:郫都—都江堰–映秀—耿达—卧龙—四姑娘山,中途翻过巴朗…...

spinal HDL语法学习
1 赋值语句 用来声明变量 : 用来对变量进行赋值 2 when otherwise前面是否有"."与otherwise是否换行有关系 3 case class 对Bundle进行扩展时,需要case class case class和class主要有两点区别: (1)case class不需…...

GRE TAP的工作原理与5G工业物联网中的应用
随着互联网新技术的发展以及智能化水平的提高,各企业对实时数据传输的需求也在不断提升,企业愈发重视数据中心的建设,以保障企业内网数据安全。 GRE(Generic Routing Encapsulation,通用路由封装)协议属于…...

NFT和数字藏品的安全方案解析
一、NFT和数字藏品 01 NFT是什么? NFT 是Non-Fungible Tokens 的缩写,意思是不可互换的代币,它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。什么是可互换的代币?比如BTC(比特币)、ETH&…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...