Elasticsearch:什么是余弦相似度?

余弦相似度是数据科学、文本分析和机器学习领域的基本概念。 如果你想知道什么是余弦相似度或者它如何在现实世界的应用程序中使用,那么你来对地方了。

本指南旨在让你深入了解相似性是什么、其数学基础、优点及其在不同领域的各种应用。读完本指南后,你将能够充分理解、实施并充分利用你的项目或研究中的相似性。

Cosine similarity 是在我们在 Elasticsearch 向量搜索配置 dense vector 相似性其中的一个选项。具体可以详细参阅 dense vector。

余弦相似度的意义

余弦相似度是一种衡量两组信息相似程度的数学方法。 用最简单的术语来说,它可以帮助我们通过查看两个元素所指向的 “方向” 来理解它们之间的关系,而不是仅仅根据它们各自的值进行比较。

想象一下,你是一名书籍爱好者,并且你对三本书进行了评分:《月球之谜》、《海洋的秘密》和《凤凰飞翔》。 你已按照 1 到 5 的等级对它们进行评分。你的朋友也按照相同的等级对这些相同的书进行了评分:

你们两个评分都可以表示为列表,或者用数学术语表示为 “向量”,表示为 [5, 3, 4] 和 [4, 2, 4]。

你和你的朋友有类似的评分吗? 你可以查看列表并得出定性的 “是的,它们非常接近”,或者你可以使用余弦相似度来达到定量测量! 我们将回到这个例子,但余弦相似度是一个在搜索引擎、自然语言处理和推荐系统等领域有着深远应用的概念。

余弦相似度提供了一种理解数据如何相互关联的方法,而不会陷入每个数据点所代表的具体细节的困境。 它还允许我们快速将信息与数十、数百甚至数千个元素进行比较。

余弦相似度广泛应用于自然语言处理 (NLP)、搜索算法和推荐系统等应用中。 它提供了一种强大的方法来理解文档、数据集或图像之间的语义相似性。 例如,向量搜索引擎中经常使用相似度来查找与给定查询最相关的记录,从而使搜索过程更加高效和精确。 (有关向量搜索的更多信息,你可以参考这篇文章!)

余弦相似度的定义

余弦相似度是衡量多维空间中两个非零向量之间角度余弦的度量。 稍后我们将了解其确切含义,但现在只需理解该值越接近 1,向量就越相似。 余弦相似度是有效的,因为它捕获向量的方向(或“方向”)而不是它们的大小,这使得它对数据模式的相似性敏感,而对向量的大小不敏感。

在数学上,它计算余弦相似度。 请注意,执行余弦相似度的最有效方法是将所有向量标准化为单位长度,并改为使用 dot_product。 仅当需要保留原始向量且无法提前对其进行标准化时,才应使用余弦。 文档 _score 的计算方式为 (1 + cosine(query, vector)) / 2。余弦相似度不允许向量具有零幅度,因为在这种情况下未定义余弦。

从余弦的曲线我们可以看到,当向量的角度为 0 时,余弦的值为最大 1。但凡有一些偏差,那么它的值就会变小 (0-1)。

一个例子

让我们回顾一下我们的图书评级示例。 我们有两个向量:

你的评分:[5, 3, 4]

你朋友的评分:[4, 2, 4]

使用余弦相似度,我们可以量化这些向量的相似程度。 余弦相似度将返回 -1 到 1 之间的值; 值越接近 1 表示相似度越高。 在我们的示例中,计算余弦相似度得到的值为 0.9899,这表明你和你的朋友对书籍的品味非常相似。 如果你有另一个朋友的评分为 [1, 5, 2],则余弦相似度将为 0.7230,表明品味不太相似。

math3d.org 网站可以提供一种可视化二维和三维向量的有用方法。 通过我们简单的示例向量,我们可以看到 [5, 3, 4] 和 [4, 2, 4] 之间的角度小于 [5, 3, 4] 和 [1, 5, 2] 之间的角度:

如果你想知道 “如果较小的角度意味着两个向量更相似,为什么我们不只使用角度 - 为什么所有这些复杂的数学?”,我们稍后会回答!

数据分析和 NLP 的重要性

余弦相似度在数据分析和自然语言处理等领域非常宝贵。 在 NLP 中,它经常用于文本挖掘、情感分析和文档聚类等任务。 该指标有助于比较两段文本以了解它们的语义相似性,这对于做出准确的推荐或分类至关重要。

余弦相似度与其他相似度度量有何不同

有多种方法可以测量数据集之间的相似性,欧几里得距离是另一种常用的度量标准。 欧几里德距离关注的是空间中两点之间的直线距离,而余弦相似度关注的是两个向量之间的角度。 这使得余弦相似性在捕获两组数据之间的模式相似性方面更加稳健,即使它们的大小不同。

如果我们想得到欧几里得的直线距离,我们可以在 dense vector 数据类型里设置 similarity: l2_norm。

例如,如果两个文档具有相同的单词但频率不同,则欧几里得距离可能会由于幅度(频率)的差异而认为它们完全不同。 然而,余弦相似度会更有效地捕获它们的相似度,因为它对单词的频率不太敏感,而更关注它们在文档中的存在或不存在。

余弦相似度的 “近亲” 是点积相似度。 它通常在矢量已经归一化(其大小为 1)时使用,从而避免除以其大小的乘积(始终为 1!)的计算步骤。 许多向量嵌入模型输出归一化向量,使点积相似度计算更快。

如果我们想得到点击 (dot product) 相似度,我们可以在 dense vector 里设置 simliarity: dot_product

通过 Elasticsearch 上的向量搜索将余弦相似度付诸实践

综上所述,余弦相似度提供了一种稳健、有效的相似度测量方法,具有广泛的应用,特别是在 NLP 和数据分析领域。 它关注向量的方向而不是大小,这使其与欧几里得距离等其他相似性度量区分开来。 无论你是在分析文本数据、提出建议还是进行复杂的数据分析,了解余弦相似度的细微差别都会非常有益。

准备好将余弦相似度付诸实践了吗? 请详细阅读文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。对于之前的评分向量例子,我们可以参考文章 “Elasticsearch:基于 Vector 的打分”。

余弦相似度的优点

余弦相似度是一种广泛使用的度量,在各种应用中具有多种优势,例如文本分析、推荐系统等。 以下是一些使其成为测量向量之间相似性的首选的主要优点。

不依赖于规模而变化

余弦相似度是不依赖于规模而变化,这意味着它不受向量大小的影响。 这在你只想关注向量的方向性而不是它们的长度的情况下特别有用。 无论向量中的值是数千万还是数百万,余弦相似度都将保持不变,从而使其在不同尺度上具有通用性。

降维

使用余弦相似度的另一个优点是它与主成分分析 (PCA) 和 t 分布随机邻域嵌入 (t-SNE) 等技术的兼容性。 由于它以角度而不是距离来衡量相似性,因此你可以减少向量的维度,而不会显着影响余弦相似性度量。

简单高效

计算余弦相似度的公式很简单,只需要向量及其大小的点积。 这种简单性带来了高效的计算,使其适合实时应用程序和大型数据集。

角度测量

与其他基于距离的相似性度量不同,余弦相似性考虑了向量之间的角度,提供了更直观的相似性感觉。 角度越小表示相似度越高,并且度量范围在 -1 和 1 之间,使解释更容易。

广泛应用于文本分析

余弦相似度在文本分析领域特别流行。 当文档转换为嵌入向量时,余弦相似度有效地捕获了不同文档之间的 “角度”,突出了内容的相关程度。

通过考虑这些优势,就可以清楚为什么余弦相似度是各种机器学习和数据科学应用中的流行选择。

揭示余弦相似度的力量

在结束时,让我们花点时间总结一下我们在这篇关于相似性的广泛指南中讨论的内容。 我们深入研究了这个令人着迷的指标的核心原理,向你展示了它的数学基础。 不要忘记它的众多优点,包括其规模不变性以及与降维技术的兼容性,这使其成为机器学习和数据科学领域的重要工具。

如果你想了解更关于 Elasticsearch 在向量搜索领域里的应用,请详细阅读 “Elastic:开发者上手指南” 中的 “NLP - 自然语言处理及向量搜索” 章节。\

更多阅读:Elasticsearch:如何使用 Elasticsearch 和 Python 构建面部识别系统

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

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

相关文章

PHP 变量

变量 变量的声明、使用、释放 变量定义 形式 $ 变量名;严格区分大小写 $name; $Name; $NAME //三个变量不是同一个变量字母、数字、下划线组成,不能以数字开头,不能包含其他字符(空白字符、特殊字符) 驼峰式命名法、下划线式命名法 $first_name; $fi…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下: 打开 Visual Studio Code。 在顶部菜单栏中,点击 "File"(文件) > "Preferences"(首选项) > "Settings…

IP协议(上)

目录 一、初步认识IP协议 二、认识IP地址 三、协议报头格式 1.报头和有效载荷分离 2.20字节的固定数据 四、网段划分 1.一个小例子 2.认识IP地址的划分 3.数据的传输过程 4.特殊的IP地址 5.通信运营商 (1)通信运营商的作用 (2&a…

如何利用考培系统进行个性化学习和评估

考培系统作为一种现代化的学习和评估工具,可以为学生提供个性化的学习和评估服务。它利用先进的技术和算法,根据学生的学习情况和需求,为其量身定制学习计划,并提供相应的评估反馈。 1. 个性化学习 考培系统通过分析学生的学习情…

javaEE - 2(11000字详解多线程)

一:多线程带来的的风险-线程安全 线程安全的概念:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 当多个线程同时访问共享资源时,就会产生线程安全的风险&am…

Vue和React的区别

前言: 相信有个三两年经验的前端,在面试过程中都遇到过这个问题吧。如果没有提前思考过,那回答起来就是啊哦额。 作为前端最火的两个框架而言,可以说它们没什么区别,你vue能做的项目我react就不能做了吗&#x…

Spring Cache+Redis缓存数据

Spring Cache缓存组件&#xff0c;提供了类似Transactional注解事务的注解Cache支持&#xff0c;且提供了Cache等抽象&#xff0c;方便切换各种底层Cache(比如Redis) 一、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId…

【AIGC核心技术剖析】扩大富有表现力的人体姿势和形状估计SMPLer-X模型

富有表现力的人体姿势和形状估计 (EHPS) 将身体、手和面部运动捕捉与众多应用结合起来。尽管取得了令人鼓舞的进展,但当前最先进的方法仍然在很大程度上依赖于有限的训练数据集。在这项工作中,我们研究了将 EHPS 扩展到第一个通用基础模型(称为 SMPLer-X),以 ViT-Huge 作为…

【译】快速开始 Compose 跨平台项目

原文&#xff1a; Compose Multiplatform application 作者&#xff1a;JetBrains 注意 Compose Multiplatform 中的 iOS 部分目前处于 Alpha 状态。以后可能会有不兼容的更改&#xff0c;届时也许需要手动进行迁移。 你可以使用这个模板来开发同时支持桌面、安卓和 iOS 的跨平…

GitHub验证的2FA

一、 起因&#xff1a; GitHub需要双重身份验证 (2FA) 是登录网站或应用时使用的额外保护层。启用 2FA 时&#xff0c;必须使用您的用户名和密码登录&#xff0c;并提供另一种只有您知道或可以访问的身份验证形式。 二、解决&#xff1a; 2.1 这里使用chrome的身份验证插件进…

如何在vue中实现图片懒加载

1.什么是图片懒加载 概念当图片还未出现在浏览器的可视区&#xff0c;图片并不加载src所引入的图片资源。只有当图片出现在可视区时&#xff0c;才加载图片资源。 好处&#xff1a;当页面中需要许多图片进行展示。但是&#xff0c;在我们不可视区的图片我们可以进行图片懒加载…

在emacs中,设置latex的主文档

文档&#xff1a; chapter1.tex chapter2.tex main.tex 在chapter1.tex中&#xff0c;先按下 ctrlc ctrln&#xff0c;再按下ctrlc ctrla&#xff0c;在下方的提示框中输入主文档。

支付宝小程序介入人脸识别(金融级--前端部分)

在这里只做前端部分说明: 详情参考文档:如何通过集成支付宝小程序唤起实人认证服务_实人认证-阿里云帮助中心 操作步骤 调用 API 发起认证。 发起认证服务。 调用 startBizService 接口请求认证。 function startAPVerify(options, callback) {my.call(startBizService, {n…

AWS S3加密

Hello大家好&#xff61; 在本课时我们将讨论S3加密相关的内容。 S3加密相关是认证考试的一个重要的主题考点&#xff0c;您需要了解亚马逊S3的几种不同类型的加密方式。| 首先是静态数据的加密&#xff0c;静态数据加密是指数据存储在亚马逊S3 数据中心的磁盘上时&#xff0…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好&#xff1f;midjourney和stable diffusion的区别&#xff1f;那么今天就从这2款软件入手&#xff0c;来探索一下他们的功能的各项区别吧&#xff0c;让你选择更适合你的一款ai软件。 截至目前&#xff0c;我们目睹了生成式人工智能工具的在…

Linux —— 网络基础(一)

目录 一&#xff0c;计算机网络背景 二&#xff0c;网络协议初识 三&#xff0c;网络传输基本流程 四&#xff0c;网络中的地址管理 一&#xff0c;计算机网络背景 网络发展 独立模式&#xff0c;计算机之间相互独立&#xff1b;网络互联&#xff0c;多台计算机连接在一起…

flink1.15 异步维表Join 用于外部数据访问的异步 I/O scala版本

官方文档 Asynchronous I/O for External Data Access 异步 I/O | Apache Flink 核心问题 问什么有官方文档,我还要写个博客,因为scala Future这块有坑. 1 为什么我的算子显示反压100% 2 为什么我的任务不报错,也没有输出 3 Future对象我该怎么构建,有哪些注意事项. pom …

面试算法32:有效的变位词

题目 给定两个字符串s和t&#xff0c;请判断它们是不是一组变位词。在一组变位词中&#xff0c;它们中的字符及每个字符出现的次数都相同&#xff0c;但字符的顺序不能相同。例如&#xff0c;"anagram"和"nagaram"就是一组变位词。 分析 如果只考虑英文…

【OpenCV实现图片以及视频的读取、显示、保存以及绘图函数】

文章目录 图片视频从文件读取视频保存一个视频绘图函数 图片 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个广泛应用于计算机视觉和图像处理领域的开源库。它提供了丰富的图像处理工具和算法&#xff0c;使得开发者能够轻松实现各种图像处理任务。…

科普丨语音芯片烧录流程概述

语音芯片的烧录是将特定的固件或软件加载到芯片中&#xff0c;以使其能够执行特定的语音处理功能。以下是一般的语音芯片烧录过程&#xff1a; 1. 准备固件或软件&#xff1a;开发人员需要编写或获取特定的固件或软件&#xff0c;这些固件或软件包含了语音处理算法和功能的代码…