Qdrant 中的向量搜索如何工作?

如果您仍在努力弄清楚向量搜索的工作原理,请继续阅读。本文档描述了向量搜索的用途,涵盖了 Qdrant 在整个生态系统中的地位,并概述了如何使用 Qdrant 增强您现有项目。

对于那些想立即开始编写代码的人,请访问我们的完整新手教程,在 5-15 分钟内构建一个搜索引擎。

人类的记忆是不可靠的。因此,只要我们试图以书面形式收集“知识”,我们就必须弄清楚如何搜索相关内容而无需反复重读相同的书籍。这就是为什么一些聪明人引入了倒排索引。以最简单的形式,它是一本书的附录,通常放在书的末尾,列出重要的术语以及它们出现的页码链接。术语按字母顺序排列。在过去,这是一个需要大量努力才能准备的手工制作列表。一旦数字化开始,它变得容易得多,但我们仍然保留了相同的基本原则。这奏效了,而且现在仍然奏效。

如果您正在特定书籍中查找特定主题,您可以尝试查找相关短语并快速找到正确的页面。当然,前提是您知道正确的术语。如果您不知道,您必须多次尝试失败,或者找其他人帮助您形成正确的查询。

A simplified version of the inverted index.

倒排索引的简化版本。

时间流逝,很长一段时间以来,这个领域并没有太多变化。但我们的文本数据收集开始以更快的速度增长。因此,我们也开始围绕这些倒排索引构建许多流程。例如,我们允许用户提供许多单词,并开始将它们分解。这使得可以找到不一定包含所有查询词,但可能包含部分查询词的文档。我们还开始将单词转换为它们的词根形式以覆盖更多情况,删除停用词等。实际上,我们变得越来越用户友好。尽管如此,整个过程背后的思想源于自中世纪以来已知最直接的基于关键字的搜索,并进行了一些调整。

The process of tokenization with an additional stopwords removal and converstion to root form of a word.

令牌化过程,附加了停用词删除和词形转换。

从技术上讲,我们将文档和查询编码为所谓的稀疏向量,其中每个位置都有一个来自整个词典的对应单词。如果输入文本包含特定单词,则在该位置获得非零值。但实际上,没有任何文本会包含数百个不同的单词。因此,大多数向量将有数千个零和几个非零值。这就是为什么我们称它们为稀疏的。它们可能已经被用来通过查找具有最大重叠的文档来计算一些基于单词的相似度。

An example of a query vectorized to sparse format.

查询向量化为稀疏格式的示例。

稀疏向量具有相对高维度;等于词典的大小。词典是自动从输入数据中获取的。所以如果我们有一个向量,我们能够部分地重建用于创建该向量的文本中的单词。

巴别塔

每当我们发现倒排索引的新问题时,我们就会提出一种新的启发式方法来解决它,至少在某种程度上。一旦我们意识到人们可能用不同的词描述相同的概念,我们便开始构建同义词列表以将查询转换为规范化形式。但这对于我们没有预见到的情况将不起作用。我们仍然需要手动制作和维护我们的词典,以便它们能够支持随着时间变化的语言。多语言场景中出现了另一个难题。旧方法需要设置独立的管道并让人工参与以保持质量。

The Tower of Babel, Pieter Bruegel.

巴别塔,彼得·布鲁盖尔。

表征革命

自然语言处理机器学习的最新研究主要集中在训练深度语言模型。在这个过程中,神经网络将大量文本语料库作为输入,并以向量的形式创建单词的数学表示。这些向量的创建方式使得含义相似且出现在相似上下文中的单词被分组在一起并由相似的向量表示。我们还可以,例如,取所有词向量的平均值来创建整个文本(例如查询、句子或段落)的向量。

deep neural

我们可以获取网络生成的这些密集向量,并将其用作不同的数据表示。它们是密集的,因为神经网络很少在任何位置产生零。与稀疏向量相反,它们具有相对较低的维度——只有几百或几千。不幸的是,如果我们想通过查看向量来查看和理解文档的内容,这已不再可能。维度不再表示特定单词的存在。

密集向量可以捕捉含义,而不是文本中使用的单词。也就是说,大型语言模型可以自动处理同义词。更重要的是,由于这些神经网络可能已经用多语言语料库进行训练,它们会将用不同语言编写的相同句子翻译成相似的向量表示,也称为嵌入。我们可以通过计算与数据库中其他向量的距离来比较它们,以找到相似的文本片段。

Input queries contain different words, but they are still converted into similar vector representations, because the neural encoder can capture the meaning of the sentences. That feature can capture synonyms but also different languages..

输入查询包含不同的单词,但它们仍然被转换为相似的向量表示,因为神经编码器可以捕捉句子的含义。此功能可以捕捉同义词,也可以捕捉不同语言。

向量搜索是根据其嵌入相似性查找相似对象的过程。好处是,您无需自己设计和训练神经网络。许多预训练模型都可用,无论是通过 HuggingFace 还是使用 SentenceTransformers 等库。但是,如果您不想亲自处理神经网络模型,您也可以使用 SaaS 工具创建嵌入,例如 co.embed API

为什么选择 Qdrant?

当我们需要在大量对象中查找相似文档时,向量搜索就出现了挑战。如果我们要查找最接近的示例,朴素的方法需要计算与每个文档的距离。这可能适用于几十甚至几百个示例,但如果数量更多,则可能成为瓶颈。当我们处理关系数据时,我们设置数据库索引以加快速度并避免全表扫描。对于向量搜索也是如此。Qdrant 是一个功能齐全的向量数据库,它通过使用图状结构以亚线性时间查找最接近的对象来加速搜索过程。因此,您无需计算与数据库中每个对象的距离,而只需计算与一些候选对象的距离。

Vector search with Qdrant. Thanks to HNSW graph we are able to compare the distance to some of the objects from the database, not to all of them.

使用 Qdrant 进行向量搜索。借助 HNSW 图,我们能够比较与数据库中部分对象的距离,而不是全部对象。

在大规模执行语义搜索时,因为这就是我们有时所说的对文本进行的向量搜索,我们需要一个专门的工具来有效地完成它——一个像 Qdrant 这样的工具。

后续步骤

向量搜索是稀疏方法的一种令人兴奋的替代方案。它解决了我们基于关键字搜索所遇到的问题,而无需手动维护大量启发式规则。它需要一个额外的组件,一个神经编码器,将文本转换为向量。

教程 1 - Qdrant 完整新手教程 尽管背景复杂,向量搜索却异常简单易设。使用 Qdrant,您可以在五分钟内启动并运行一个搜索引擎。我们的完整新手教程将向您展示如何操作。

教程 2 - 问答系统 但是,您也可以选择 SaaS 工具来生成它们,避免构建自己的模型。如果您遵循问答系统教程,使用 Qdrant Cloud 和 Cohere co.embed API 设置向量搜索项目是相当容易的。

向量搜索还有另一个令人兴奋的地方。只要有神经网络可以将您的数据类型向量化,您就可以搜索任何类型的数据。您是否考虑过反向图像搜索?这也可以通过向量嵌入实现。

此页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个消息。😔 您可以在 GitHub 上编辑此页面,或者创建一个 GitHub 问题。