当前位置:   article > 正文

Elasticsearch:向量相似度技术和评分_elasticsearch script score l2距离

elasticsearch script score l2距离

作者:来自 Elastic Valentin Crettaz

当需要搜索自由文本并且 Ctrl+F / Cmd+F 不再有效时,使用词法搜索引擎通常是你想到的下一个合理选择。 词汇搜索引擎擅长分析要搜索的文本并将其标记为可在搜索时匹配的术语,但在理解和理解被索引和搜索的文本的真正含义时通常会表现不佳。

这正是向量搜索引擎的闪光点。 他们可以对同一文本进行索引,以便可以根据它所代表的含义及其与具有相似或相关含义的其他概念的关系来搜索该文本。

在本博客中,我们将简要介绍向量如何成为传达文本含义的重要数学概念。 然后,我们将深入研究 Elasticsearch 在搜索邻近向量时支持的不同相似性技术,即搜索具有相似含义的向量,以及如何对它们进行评分。

什么是向量嵌入?

本文不会深入探讨向量嵌入的复杂性。 如果你想进一步探索此主题或在继续之前需要入门知识,我们建议你查看以下指南

简而言之,向量嵌入是通过机器学习过程(例如深度学习神经网络)获得的,该过程将任何类型的非结构化输入数据(例如原始文本、图像、视频、声音等)转换为带有其含义的数值数据和关系。 不同类型的非结构化数据需要不同类型的机器学习模型,这些模型经过训练可以 “理解” 每种类型的数据。

每个向量将特定的数据块定位为多维空间中的一个点,并且该位置表示模型用来表征数据的一组特征。 维度的数量取决于机器学习模型,但通常在几百到几千之间。 例如,OpenAI Embeddings 模型拥有 1536 个维度,而 Cohere Embeddings 模型的维度范围为 382 到 4096 个。 截至最新版本,Elasticsearch 的 dense_vector 字段类型最多支持 4096 个维度。

向量嵌入的真正壮举是具有相似含义的数据点在空间中靠近在一起。 另一个有趣的方面是向量嵌入还有助于捕获数据点之间的关系。

我们如何比较向量?

知道非结构化数据被机器学习模型分割成向量嵌入,从而捕获数据在多个维度上的相似性,我们现在需要了解这些向量的匹配是如何工作的。 事实证明,答案非常简单。

彼此接近的向量嵌入表示语义相似的数据片段。 因此,当我们查询向量数据库时,首先使用与索引所有非结构化数据相同的机器学习模型将搜索输入(图像、文本等)转换为向量嵌入,最终目标是找到与该查询向量最近的相邻向量。 因此,我们需要做的就是弄清楚如何测量查询向量与数据库中索引的所有现有向量之间的 “距离” 或 “相似度” - 就是这么简单。

距离、相似度和评分

幸运的是,由于向量算术,测量两个向量之间的距离或相似度是一个很容易解决的问题。 那么,让我们看看 Elasticsearch 支持的最流行的距离和相似度函数。 警告,有数学公式

在我们深入讨论之前,让我们快速浏览一下得分。 事实上,Lucene 只允许分数为正。 我们将很快介绍的所有距离和相似度函数都会产生两个向量的接近或相似程度的度量,但这些原始数字很少适合用作分数,因为它们可能是负数。 因此,最终得分需要从距离或相似度值中得出,以确保得分为正,并且较大的得分对应于较高的排名(即更接近的向量)。

L1 距离

两个向量的 L1 距离,也称为曼哈顿距离,是指两个向量 \vec{A} 及 \vec{B} 通过将所有元素的成对绝对差相加来测量。显然 \delta _{L1} 距离越小,两个向量越接近。 L1 距离公式(1)非常简单,如下所示

从视觉上看,L1 距离可以如下图所示(红色):

计算以下两个向量的 L1 距离 \vec{A}=\binom{1}{2} 及 \vec{B}=\binom{2}{0.5} 将生成 ∣1–2∣+∣2–0.5∣=2.5。

重要提示:值得注意的是,L1 距离函数仅支持使用 script_score DSL 查询的精确向量搜索(也称为强力搜索),而不支持使用knn 搜索选项knn DSL 查询的近似 kNN 搜索

L2 距离

两个向量的 L2 距离,也称为欧几里德距离, 向量 \vec{A} 和向量 \vec{B} 之间的距离通过首先将所有元素的成对差值的平方相加。然后对结果求平方根来测量。 它基本上是两点之间的最短路径。 与L1类似,\delta_{L2 } 距离越小,两个向量越接近:

L2 距离如下图红色所示:

让我们重用相同的两个样本向量 \vec{A} 及 \vec{B},正如我们所使用的  \delta _{L1} 距离。我们现在可以计算 \delta_{L2 } 距离为:\sqrt{(1-2)^{2}+(2-0.5)^{2}}  =  \sqrt{3.25}  \cong 1.803。

就评分而言,两个向量之间的距离越小,它们就越接近(即越相似)。 因此,为了得出分数,我们需要反转距离度量,以便最小的距离产生最高的分数。 使用 L2 距离计算分数的方式如下式(3)所示:

重用前面示例中的样本向量,它们的分数将是 \frac{1}{4.25}\cong 0.2352 。彼此非常接近的两个向量的分数将接近 1,而彼此相距很远的两个向量的分数将趋向于 0。

总结 L1 和 L2 距离函数,比较它们的一个很好的类比是将 A 和 B 视为纽约曼哈顿的两座建筑物。 从 A 到 B 的出租车必须沿着 L1 路径(街道和大道)行驶,而鸟可能会使用 L2 路径(直线)。

余弦相似度

与 L1 和 L2 相比,余弦相似度并不衡量两个向量 \vec{A} 和 \vec{B}之间的距离,而是它们的相对角度,即它们是否都指向大致相同的方向。 相似度 s_{cos} 越高 , 两个向量之间的角度

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/613536
推荐阅读
相关标签