当前位置: 首页 > news >正文

NLP中的嵌入和距离度量

本文将深入研究嵌入、矢量数据库和各种距离度量的概念,并提供示例和演示代码。

NLP中的嵌入

嵌入是连续向量空间中对象、单词或实体的数值表示。在NLP中,词嵌入捕获词之间的语义关系,使算法能够更好地理解文本的上下文和含义。

让我们试着用一个例子和一些可视化的方法来理解它:假设有6个句子,想要创建嵌入

 from sentence_transformers import SentenceTransformer# Sample text embedding modelmodel = SentenceTransformer('paraphrase-MiniLM-L6-v2')#Sentences we want to encode. Example:sentence = ['The team enjoyed the hike through the meadow','The team enjoyed the hike through the mountains','The team has not enjoyed the hike through the meadows','The national park had great views','There were lot of rare animals in national park','Olive oil drizzled over pizza tastes delicious']#Sentences are encoded by calling model.encode()embedding = model.encode(sentence)#Preview the embeddingsprint(embedding)# As we can see embeddings are nothing but # numerical representation of sentences in a vector form[[ 0.37061948  0.26414198  0.21265635 ...  0.14994518 -0.25794953-0.23970771][-0.07645706  0.27122658 -0.04530133 ... -0.27319074 -0.60025024-0.302555  ][ 0.35693657 -0.2331443   0.418002   ... -0.37369558 -0.10241977-0.03282997][ 0.66933334  0.40094966 -0.48208416 ...  0.10645878 -1.5067163-0.01547382][ 0.4339616   0.2323563   0.21751338 ... -0.5746389  -0.264384540.492655  ][-0.2655593   0.11172348 -0.1473308  ...  0.42197517  0.883945760.10763898]]

可以看到我们获得了一个384维度的嵌入

 embedding.shape(6, 384)

然后我们使用PCA进行降维并使用matplot可视化

 from sklearn.decomposition import PCA# Perform PCA for 2D visualizationPCA_model = PCA(n_components = 2)PCA_model.fit(embedding)new_embeddings = PCA_model.transform(embedding)# As we can see now the shape has changed from (6,384)->(6,2)Shape: (6, 2)[[-2.7454064  -1.628386  ][-2.7024133  -2.0113547 ][-2.6084075  -2.5289955 ][ 0.62488586  3.9073005 ][ 0.09110744  4.9031897 ][ 7.3402357  -2.6417546 ]]

PCA将其维度降维2 这样可以显示在2D的散点图上

 import matplotlib.pyplot as pltimport mplcursorsdef plot2d(x_values, y_values, text_labels):"""Create a 2D plot with annotations.Parameters:- x_values (array): X-axis values.- y_values (array): Y-axis values.- text_labels (list): List of text labels for each point."""fig, ax = plt.subplots()scatter = ax.scatter(x_values, y_values, label='Data Points')# Annotate points with text labelsfor i, label in enumerate(text_labels):ax.annotate(label, (x_values[i], y_values[i]))mplcursors.cursor(hover=True)ax.set_xlabel('X-axis')ax.set_ylabel('Y-axis')ax.set_title('2D Plot with Annotations')plt.show()

调用这个函数,结果如下

 import matplotlib.pyplot as pltimport mplcursors# pass the embeddings and original sentence to create labelsplot2d(new_embeddings[:,0], new_embeddings[:,1], sentence)

现在你可以看到,彼此相似的句子被投影到彼此附近,这实际很有意义。例如,提到“National Park”的句子彼此靠得更近,谈论“hiking”的句子彼此靠得更近。

如何度量这些句子嵌入之间的距离?

有很多方法可以计算两个向量之间的距离,我们将介绍矢量数据库中常用的4种距离度量

1、欧氏距离

两个向量之间最短路径的长度

欧几里得距离很容易理解,因为它测量空间中两点之间的直线距离。它适用于矢量元素之间的大小和绝对差异很重要的情况。

但是欧氏距离对数据的尺度很敏感。如果特征具有不同的尺度,则距离计算可能被尺度较大的特征所主导。并且在高维空间中,欧几里得距离可能变得不那么有意义,因为由于“维度诅咒”,距离趋于收敛。

考虑二维空间中的两点:A(1,2)和B (4,6), A和B之间的欧氏距离计算为:

2、余弦距离

测量矢量之间的方向性差异

余弦距离不受向量大小的影响,使其对尺度差异具有鲁棒性,非常适合高维空间。

余弦距离只考虑向量的方向,而不是它们的大小。如果两个矢量方向相似,但长度相差很大,那么它们的余弦相似度可能接近于0。

3、Jaccard

Jaccard系数度量有限样本集之间的相似性,定义为交集的大小除以样本集并集的大小:

在处理集合或二元数据时,Jaccard特别有用,使其适用于文本文档比较等场景。像余弦相似度一样,Jaccard对大小不敏感。

但是它主要是为二元数据设计的,它可能不适合连续数据或大小信息至关重要的情况。当两个集合都为空时,Jaccard相似度是未定义的。

4、曼哈顿距离

曼哈顿距离,也称为L1距离或出租车距离,它测量基于网格的系统中两点之间的距离,只考虑水平和垂直运动。

曼哈顿距离直观且易于解释。它对应于出租车在网格状道路系统上行驶的距离,在水平和垂直方向上行驶以到达目的地。这种简单性使得它在可解释性至关重要的场景中特别有用。

曼哈顿距离在处理以表格形式表示的基于网格的系统或数据集时非常适用。它非常适合沿网格线移动的场景,例如在物流、运输和图像处理中。

但是曼哈顿距离的一个重大缺点是它对数据规模的敏感性。如果特征具有不同的尺度,则距离计算可能被尺度较大的特征所主导。在处理特征大小不同的数据集时,这可能导致次优结果。

并且曼哈顿距离本质上受限于沿水平和垂直轴的网格运动。在特征之间的对角线移动或非线性关系至关重要的情况下,曼哈顿距离可能无法准确捕获数据中的潜在模式。

余弦相似度vs正弦相似度

还有一个更有趣的问题是为什么我们用余弦而不是正弦相似度来测量矢量距离。

余弦相似度比正弦相似度更常用于测量向量之间的相似度。余弦和正弦相似度之间的选择取决于数据的性质和任务的具体要求。让我们来探讨一下为什么余弦相似度是首选:

余弦相似度度量的是矢量之间的夹角余弦值,而正弦相似度度量的是夹角的正弦值。余弦相似度更直接地表示矢量指向的相似度,而正弦相似度则在一些情况下可能不如余弦相似度直观。

余弦相似度的计算中包含了矢量的内积,而正弦相似度则涉及到矢量的外积。在高维空间中,矢量之间的内积更容易计算,而外积可能涉及到复杂的计算。因此余弦相似度的计算在实际应用中更为高效。

余弦相似度与向量之间的角度直接相关。余弦相似度为1表示向量指向相同的方向,而相似度为-1表示它们指向相反的方向。相似度为0表示正交性。这种直观的解释与许多应用程序非常吻合。

正弦相似度在实践中不太常见是它测量向量间夹角的正弦值,强调相似度的垂直分量。虽然正弦相似度可能有特定的用例,例如垂直度至关重要的场景,但余弦相似度由于其在规范化、定向解释和效率方面的优势而被更广泛地采用。

总结

本文探讨了嵌入和距离度量的概念,理解和利用这些概念对于在各个领域构建高级NLP模型和应用程序至关重要。因为在实际应用中需要考虑尝试不同的模型、数据库和指标,并针对特定用例进行优化性能。

https://avoid.overfit.cn/post/8c9ee01acff64699bdc8a194c0e1247b

相关文章:

NLP中的嵌入和距离度量

本文将深入研究嵌入、矢量数据库和各种距离度量的概念,并提供示例和演示代码。 NLP中的嵌入 嵌入是连续向量空间中对象、单词或实体的数值表示。在NLP中,词嵌入捕获词之间的语义关系,使算法能够更好地理解文本的上下文和含义。 让我们试着用…...

jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教务管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式,包括:OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置,Modbus需要调用功能块。默认支持的是上位链路命令,实际是一条条以回车换行结束的ASCII…...

【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)

一定要点击文末的卡片,进入后,获取完整论文!! B 题整体模型构建 1. 潜水器动力系统失效:模型需要考虑潜水器在无推进力情况下的行为。 2. 失去与主船通信:考虑无法从主船接收指令或发送位置信息的情况。…...

apache_exporter安装说明

Apache Exporter 问题描述 需要监控apache服务,部署了apache_exporter,对过程进行一下记录。 源码参见apache_exporter ①下载 https://github.com/Lusitaniae/apache_exporter/releases②解压缩 tar -xzvf apache_exporter-0.7.0.linux-amd64.tar…...

代码随想录算法训练营29期Day42|卡码网46,LeetCode 416

文档讲解:背包问题二维 背包问题一维 分割等和子集 46.整数拆分 题目链接:https://kamacoder.com/problempage.php?pid1046 思路: 在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为d…...

java的excel列行合并模版

1.效果 2.模版 <tableborder"1"cellpadding"0"cellspacing"0"class"tablebor"id"TABLE"><tr align"center" class"bg217"><td style"background-color: #008000; color: #ffffff;p…...

【ES数据可视化】kibana实现数据大屏

目录 1.概述 2.绘制数据大屏 2.1.准备数据 2.2.绘制大屏 3.嵌入项目中 1.概述 再来重新认识一下kibana&#xff1a; Kibana 是一个用于数据可视化和分析的开源工具&#xff0c;是 Elastic Stack&#xff08;以前称为 ELK Stack&#xff09;中的一部分&#xff0c;由 Ela…...

2024 年十大 Vue.js UI 库

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它在前端开发者中越来越受欢迎&#xff0c;以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具&#xff0c;帮助他们快速高效地构建漂亮…...

使用esp32 cam + SR602人体感应模块制作一个小型的监控

需求&#xff1a; 做一个小型的监控&#xff0c;类似电子猫眼&#xff0c;监测到人之后&#xff0c;取一张图 然后发送到自己的邮箱。 架构&#xff1a; 1.sr602 传感器监测到人 2. esp32 cam 取图 并通过mqtt协议传到远端服务器 3, 服务器利用python 搭建一个mqtt客户端&…...

vim最简单命令学习

安装vim sudo apt install vim在终端随便打开一个文本文件&#xff0c;或者源文件&#xff0c; vim filepath输入该命令后&#xff0c;从终端进入vim编辑器&#xff0c;此时为普通模式(Normal)。 按i键进入编辑模式(Insert)&#xff0c;按Esc键返回普通模式(Normal)。 在编辑…...

论文阅读-通过云特征增强的深度学习预测云工作负载转折点

论文名称&#xff1a;Cloud Workload Turning Points Prediction via Cloud Feature-Enhanced Deep Learning 摘要 云工作负载转折点要么是代表工作负载压力的局部峰值点&#xff0c;要么是代表资源浪费的局部谷值点。预测这些关键点对于向系统管理者发出警告、采取预防措施以…...

Android Studio从零基础到APP上线(3)

第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…...

springboot Feign方式注入注解详解

一、FeignClient注解详解 FeignClient是Spring Cloud中用于声明Feign客户端的注解&#xff0c;它使得编写HTTP客户端变得更简单。通过Feign的自动化配置机制&#xff0c;可以很容易地编写HTTP API客户端。以下是FeignClient的详解&#xff1a; 作用&#xff1a;FeignClient注解…...

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务&#xff0c;这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室&#xff0c;你需要在以下网站上创建账号&#xff1a…...

C++俄罗斯方块 -- 菜单展示和选择 -- 方法

short Menu() //选中开始游戏返回1&#xff0c;离开则返回2 {short choice 1;//跟踪用户选中的选项char c; //记录用户按键信息system("cls");SetPos(9, 12); //设置输出坐标&#xff0c;12行9列cout << "┌────────┐";SetPos(9, 13);cou…...

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 &#x1f468;‍&#x1f3eb; 参考题解 >>>&#xff1a;逻辑右移&#xff08;符号位一起移动&#xff0c;高位补零&#xff09; 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…...

php 函数三

一 对称加密 1.1 openssl 1.1.1 openssl_get_cipher_methods(bool $aliases false) 获取可用的加密算法。包含可用加密算法的array。 请注意&#xff1a;在 OpenSSL 1.1.1 版本之前&#xff0c;返回加密算法的拼法大小写都有&#xff1b; 从 OpenSSL 1.1.1 开始&#xff0c…...

Windows下配置多个账号的git ssh

生成密钥 已经有一个密钥的情况下&#xff0c;用下面的命令生成一个新密钥&#xff0c;注意为了防止原始密钥文件被覆盖&#xff0c;需要给一个新名字&#xff1a; ssh-keygen -t rsa -f C:\\Users\\xxx\\.ssh\\id_rsa_xxx -C "xxxemail.com"给GitHub配置SSH Key …...

【漏洞复现】电信网关配置管理系统SQL注入漏洞

Nx01 产品简介 电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远程监控、配置、升级和故障排除等功能&#xff0c;从而确保网络的正常运行和高效性能。 Nx02 漏洞描述 电信网关配置管理系统存在SQL注入漏洞,攻…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...