自然语言处理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&…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
