向量相似度:释放超越传统搜索的数据洞察
在使用非结构化数据时,有一些开发者熟知的传统首选解决方案
- 全文搜索:当你需要查找包含特定词语或短语的文档时。
- 向量搜索:当你需要查找与给定查询在语义上相似的文档时。
有时人们会将这两种方法混淆,认为向量相似度只是全文搜索的延伸。然而,在本文中,我们将探讨一些有前景的新技术,这些技术可以用于扩展非结构化数据的用例,并证明向量相似度创建了其自身的数据探索工具栈。
什么是向量相似度搜索?
向量相似度提供了多种强大的功能,远远超出了传统全文搜索引擎中可用的功能。从不相似度搜索到多样性和推荐,这些方法可以扩展向量的用例。
向量数据库旨在存储和处理海量向量,它们是实现这些新技术的首选,并允许用户充分利用他们的数据。
向量相似度搜索 vs. 全文搜索
虽然这两种方法在功能上存在交叉,但也有大量功能是各自独有的。例如,精确短语匹配和结果计数是全文搜索的固有功能,而向量相似度对此类操作的支持有限。另一方面,向量相似度可以轻松实现通过文本检索图像或反之亦然的跨模态检索,这是全文搜索无法做到的。
这种期望上的不匹配有时可能导致混淆。尝试将向量相似度用作全文搜索可能会带来一系列挫折,包括响应时间慢、搜索结果差以及功能受限。结果是,他们只获得了向量相似度好处的一小部分。

全文搜索和向量相似度功能重叠
下面我们将探讨为什么向量相似度栈值得拥有新的接口和设计模式,这将释放这项技术的全部潜力,并且这项技术仍然可以与全文搜索结合使用。
与相似度交互的新方式
拥有非结构化数据的向量表示,开启了与之交互的新方式。例如,它可以用于测量词语之间的语义相似度,根据含义对词语或文档进行聚类,查找相关图像,甚至生成新文本。然而,这些交互可以超越寻找它们的最近邻 (kNN)。
除了传统的 kNN 搜索之外,向量表示还可以利用其他几种技术。这些技术包括不相似度搜索、多样性搜索、推荐和发现功能。
不相似度搜索
不相似度(或最远)搜索是最近邻搜索之后最直接的概念,这在传统全文搜索中无法重现。它旨在在集合中找到最不相似或最远的文档。

不相似度搜索
与全文匹配不同,向量相似度可以比较任意一对文档(或点)并分配一个相似度分数。它不依赖于关键词或其他元数据。利用向量相似度,我们可以通过将搜索目标从最大化相似度反转为最小化来轻松实现不相似度搜索。
不相似度搜索可以在以前无法使用其他搜索的领域找到项目。让我们看几个例子。
案例:错误标签检测
例如,我们有一个家具数据集,其中我们将项目分类为各种家具:桌子、椅子、灯具等。为了确保我们的目录准确无误,我们可以使用不相似度搜索来突出显示最有可能被错误标记的项目。
为此,我们只需要使用类别标题本身的嵌入作为查询来搜索最不相似的项目。这可能范围太广,因此,通过将其与过滤器结合——Qdrant 的一项超能力——我们可以将搜索范围缩小到特定类别。

错误标签检测
此搜索的输出可以通过更复杂的模型或人工监督进一步处理,以检测实际的错误标签。
案例:异常值检测
在某些情况下,我们甚至可能没有标签,但仍然可以尝试检测数据集中的异常。不相似度搜索也可用于此目的。

异常检测
我们唯一需要的是一些我们认为“正常”的参考点。然后,我们可以搜索与该参考集最不相似的点,并将它们用作进一步分析的候选对象。
多样性搜索
即使没有提供输入向量,(不)相似度也可以改善从数据集中选择项目的整体效果。
朴素的方法是进行随机抽样。然而,除非我们的数据集是均匀分布的,否则此类抽样的结果可能会偏向更频繁出现的项目类型。

随机抽样示例
相似度信息可以增加这些结果的多样性,并使初次概览更有趣。这对于用户尚不清楚他们在寻找什么并想要探索数据集时特别有用。

基于相似度的抽样示例
向量相似度的强大之处在于能够比较任意两点,这使得在无需任何标记工作的情况下也能对集合进行多样化选择成为可能。通过最大化响应中所有点之间的距离,我们可以拥有一个算法,该算法将按顺序输出不相似的结果。

多样性搜索
行业中已经使用了一些形式的多样性抽样,它们被称为最大边际相关性(MMR)。像这样的技术被开发出来是为了增强通用搜索 API 中的相似度。然而,仍然有新的想法空间,特别是在多样性检索方面。通过利用更先进的向量原生引擎,可以将用例提升到新的水平,并取得更好的结果。
向量相似度推荐
向量相似度可以超越单个查询向量。它可以结合多个正例和负例,以实现更准确的检索。在向量数据库中构建推荐 API 可以利用已存储的向量作为查询的一部分,通过指定点的 ID。这样做,我们可以跳过查询时的神经网络推理,使推荐搜索更快。
有多种方法可以使用向量来实现推荐。
基于向量特征的推荐
第一种方法是将所有正例和负例进行平均,创建一个单一的查询向量。在这种技术中,正向量中更重要的分量被负向量抵消,最终的向量是正例中存在但负例中不存在的所有特征的组合。

基于向量特征的推荐
这种方法已经在 Qdrant 中实现,当假设向量的每个维度代表数据的某种特征时,它工作得很好,但有时距离是判断正负例的更好工具。
基于相对距离的推荐
另一种方法是使用负例到候选对象之间的距离,帮助它们创建排除区域。在这种技术中,我们在正例附近执行搜索,同时排除那些比正例更靠近负例的点。

基于相对距离的推荐
这两种方法的主要用例——当然——是获取用户的交互历史,并基于此推荐新项目。
发现
在许多探索场景中,预先不知道期望的目的地。在这种情况下,搜索过程可以包括多个步骤,其中每个步骤都会提供更多信息,以指导搜索朝正确的方向进行。
为了更好地理解实现这种方法的可能方式,让我们首先看看相似度模型是如何训练的
用于训练相似度模型的最知名的损失函数是三重态损失 (triplet-loss)。在这种损失函数中,通过拟合 3 个对象的相对相似度信息来训练模型:锚点、正例和负例。

三重态损失
使用相同的机制,我们可以从另一角度看待训练过程。给定一个训练好的模型,用户可以提供正例和负例,然后发现过程的目标是在存储的向量集合中找到合适的锚点。

反向三重态损失
可以提供多个正负对,使发现过程更准确。值得一提的是,与神经网络训练一样,数据集可能包含噪声和部分矛盾信息,因此发现过程应该容忍此类数据缺陷。

样本对
这种方法与推荐方法的重要区别在于,发现方法中的正负对不假设最终结果必须接近正例,它只假设最终结果应该比负例更接近。

发现 vs 推荐
结合过滤或相似度搜索,发现对提供的额外上下文信息可以用作重排序的因素。
向量数据库的新 API 栈
当你在文本搜索引擎中引入向量相似度能力时,你就扩展了它的功能。然而,反过来则不然,因为向量相似度作为一个概念比某些针对特定任务的全文搜索实现要宽泛得多。
向量数据库,如果引入内置全文功能,必须做出一些权衡
- 选择特定的全文搜索变体。
- 要么牺牲 API 一致性,要么将向量相似度功能限制为仅基础的 kNN 搜索。
- 增加系统的额外复杂性。
Qdrant 则相反,将向量相似度置于其 API 和架构的核心,从而使我们能够朝着一个新的向量原生操作栈迈进。我们相信这是向量数据库的未来,我们很高兴看到这些技术将解锁哪些新的用例。
要点总结
- 向量相似度提供了超越传统全文搜索的高级数据探索工具,包括不相似度搜索、多样性抽样和推荐系统。
- 向量相似度的实际应用包括通过错误标签检测和异常识别来提高数据质量。
- 通过利用高级搜索技术,为用户提供直观的数据探索,并改进决策过程,从而提升用户体验。
准备好释放您数据的全部潜力了吗?试用免费演示,了解向量相似度如何彻底改变您的数据洞察并推动更明智的决策。