如何利用 Elastic 的矢量数据库得到完美的词汇和 AI 驱动搜索

在此博客中作者:Bernhard Suhm

也许你遇到过 “矢量数据库” 这个术语,并且想知道它是否是数据检索系统领域的新成员。 也许你对矢量数据库的相互矛盾的说法感到困惑。 事实上,矢量数据库使用的方法已经存在了几年。 如果你正在寻找最佳的检索性能,那么将基于关键字的搜索(有时称为词汇搜索)与基于矢量的方法相结合的混合方法代表了最先进的技术。

在 Elasticsearch® 中,你可以充分利用两个领域的优势:词法搜索和矢量搜索。 Elastic® 使词汇柱状检索变得流行,在 Lucene 中实现,并且十多年来一直在完善该方法。 此外,多年来,Elastic 一直在矢量数据库功能方面进行投资,例如使用分层可导航小世界 (HNSW)(在 8.0 及更高版本中提供)本地实现近似最近邻搜索。

Elastic 提供的搜索创新时间表,包括自 2019 年以来建立矢量搜索功能

Elastic 定位为快速发展的矢量数据库市场的领导者:

  • 完全高性能和可扩展的矢量数据库功能,包括存储嵌入和有效搜索最近邻居
  • 专有的稀疏检索模型,可实现开箱即用的语义搜索
  • 所有类型的行业领先相关性 — 关键字、语义和矢量
  • 能够应用生成式人工智能并以专有的、特定于业务的数据作为上下文来丰富大型语言模型 (LLM)
  • 单一平台中的所有功能:执行矢量搜索、将非结构化数据嵌入到应用现成模型和自定义模型的矢量表示中,以及在生产中实现搜索应用程序,并提供可观测性和安全性解决方案

在此博客中,详细了解与矢量数据库相关的概念、它们的工作原理、它们适用于哪些用例,以及如何通过矢量搜索实现卓越的搜索相关性。

矢量数据库的基础知识


为什么矢量数据库如此受关注?

矢量数据库是能够执行矢量搜索的系统的术语。 因此,为了了解矢量数据库,让我们从矢量搜索开始,以及为什么它最近引起了如此多的关注。

在最近有关人工智能如何改变从业务工作流程到教育的几乎所有事物的讨论中,矢量搜索发挥着重要作用。 为什么矢量搜索在这个主题上发挥如此重要的作用? 首先,矢量搜索可以对非结构化数据进行快速、准确的语义搜索,而无需对元数据、关键字和同义词进行大量管理。 其次,矢量搜索为最近围绕生成人工智能的热点做出了贡献,因为它可以从 LLM“ 知道”(即在模型训练期间看到的)之外的专有来源提供准确的背景信息。

矢量数据库有什么用?

大多数标准数据库允许你通过匹配结构化字段来检索相关信息,包括匹配描述中的关键字和数字字段中的值。 相比之下,矢量数据库捕获非结构化文本的含义,并找到 “你的意思”,而不是匹配文本 - 也称为语义搜索。

此外,矢量数据库允许你:

  • 搜索文本以外的非结构化数据,包括图像或音频。 涉及不止一种数据类型的搜索被称为 “多模式搜索(multimodal search)” —— 就像使用文本描述搜索图像一样。
  • 通过在统计(矢量)模型中对用户特征或行为进行建模并将其他模型与其他模型进行匹配,从而个性化用户体验
  • 创建 “生成(generative)” 体验,系统不仅返回与用户发出的查询相关的文档列表,还让用户参与对话,解释多步骤流程,并生成远远超出阅读相关信息范围的交互。

什么是矢量数据库,它是如何工作的?

矢量数据库由两个主要组件组成:

  1. 索引和存储嵌入(embeddings),这就是通常所说的非结构化数据的多维数字表示。 嵌入是由深度神经网络生成的,这些网络经过训练,可以对此类非结构化数据进行分类,并捕获 “密集(dense)” 矢量中非结构化数据的含义、上下文和关联,该矢量通常有数百到数千维深度 —— 这是矢量量搜索的秘密武器。
  2. 一种搜索算法,可以有效地在高维 “嵌入空间” 中找到最近的邻居,其中矢量接近意味着含义相似。 存在不同的搜索索引的方法,也称为近似最近邻 (ANN) 搜索,HNSW 是矢量数据库提供商最常用的算法之一。
执行矢量搜索的关键组件

一些矢量数据库仅提供存储和搜索嵌入的功能,如上图中的 A 所示。 然而,这种方法给开发人员带来了如何生成这些嵌入的挑战。 通常,这需要访问嵌入模型(显示为 C)和 API 以将其应用到你的数据和查询 (B)。 而且你可能只能存储非常有限的元数据以及嵌入,这使得在用户应用程序中提供全面的信息变得更加复杂。

此外,专用矢量数据库让你能够弄清楚如何将搜索功能集成到你的应用程序中,如上图右侧所示。管理软件架构的组件以解决这些挑战涉及评估不同供应商提供的许多解决方案具有不同的质量水平和支持。

Elastic 作为矢量数据库

Elastic 提供你期望从矢量数据库获得的所有功能以及更多!

与专用矢量数据库相比,Elastic 在单个平台中支持三种功能,这对于实现矢量搜索支持的应用程序至关重要:存储嵌入 (A)、有效搜索最近邻居 (B) 以及将文本嵌入到矢量表示中 (C) 。

与通过 API 访问它们相比,这种方法消除了效率低下和复杂性的问题(这是其他矢量数据库所必需的)。 Elastic 在 Lucene 中使用本机 HNSW 实现近似最近邻搜索,并允许你使用一种算法应用过滤(作为预过滤,以获得准确的结果),该算法适当地在强力和近似最近邻之间切换(即,当预过滤器删除了候选列表的大部分)。

使用我们市场领先的学习稀疏编码器模型或自带你自己的嵌入模型。 在此博客中了解有关将 PyTorch 创建的转换器加载到 Elastic 中的更多信息。

Elastic 将矢量数据库的所有组件组合在一个平台中

如何通过矢量搜索获得最佳检索性能


实施矢量搜索的挑战

对于如何实现高级语义搜索的核心,让我们了解(密集)矢量搜索的挑战:

  • 选择正确的嵌入模型:标准嵌入模型会在域外恶化,就像公共存储库中现成的模型一样 - 例如,如我们之前关于基准矢量搜索的博客的表 2 所示。 如果幸运的话,预训练的模型足以满足你的用例,但通常你必须使用领域数据来调整它们,这需要带注释的数据和训练深度神经网络的专业知识。 你可以在此博客中找到模型适应过程的蓝图。
与 BM25 相比,预训练的嵌入模型在域外恶化
  • 实施有效的过滤:在搜索和推荐系统中,你通常不会仅仅局限于返回相关文档的列表; 用户想要应用过滤器。 使用矢量搜索过滤元数据具有挑战性:如果你在运行矢量搜索后进行过滤,则可能会遇到与过滤条件匹配的结果太少(或没有)的风险(也称为 “后过滤”)。 否则,如果你首先进行过滤,则最近邻搜索效率不高,因为它是在数据的一个小子集上执行的,而矢量搜索期间使用的数据结构(如 HNSW graph)是为整个数据集创建的。 对于许多用例来说,将搜索范围限制为相关矢量对于提供更好的客户体验是绝对必要的
  • 执行混合搜索:为了获得最佳性能,你通常必须将矢量搜索与传统的词法方法结合起来

密集与稀疏矢量检索

检索方法有两大类,通常称为 “密集(dense)” 和 “稀疏(sparse)”。 两者都使用文本的矢量表示形式,对含义和关联进行编码,并且都将搜索紧密匹配作为第二步,如下图所示。 所有基于矢量的检索方法都有一个共同点。

上面我们描述了更具体的 “密集” 矢量搜索,其中使用嵌入模型将非结构化数据转换为数字表示,并且你可以在嵌入空间中找到与查询最近邻的匹配项。 为了提供高相关性结果,密集矢量搜索通常需要域内再训练。 如果没有域内再训练,它们的表现甚至可能不如传统的词汇评分,例如 Elastic 的 BM25。 矢量搜索受到如此多关注的优点和原因是,经过微调后,它可以胜过所有其他方法,并且它允许你搜索文本以外的非结构化数据,例如图像或音频,这已被称为 “多模态搜索”。 该矢量被认为是 “密集” 的,因为它的大部分值都是非零的。

与上述 “密集” 矢量相比,“稀疏” 表示包含很少的非零值。 例如,使 Elasticsearch(BM25)流行起来的词法搜索就是稀疏检索方法的一个例子。 它使用文本的词袋(bag-of-word)表示,并通过针对文档长度等因素修改称为 TF-IDF(术语频率,逆文档频率)的基本相关性评分方法来实现高相关性。

了解密集和稀疏 “矢量” 搜索之间的共性和差异

学习的稀疏检索器:开箱即用的高性能语义搜索

最新的稀疏检索方法使用学习的稀疏表示(learned sparse representation),与其他方法相比具有多种优势:

  • 高相关性,无需任何域内再训练:它们可以开箱即用,无需在文档的特定域上调整模型。
  • 可解释性:你可以跟踪哪些术语被匹配,稀疏编码器附加的分数表明术语与查询的相关程度 - 非常可解释 - 而密集矢量搜索依赖于通过应用嵌入模型导出的含义的数字表示,就像许多机器学习方法一样,这是 “黑匣子”。
  • 快速:稀疏矢量正好适合倒排索引,这使得 Lucene 和 Elasticsearch 等已建立的稀疏检索器速度如此之快。 但稀疏检索器仅适用于文本数据,不适用于图像或其他类型的非结构化数据。

基于稀疏和密集矢量的检索之间的关键权衡

 稀疏检索 基于矢量的密集检索
无需调整即可获得良好的相关性(learned sparse) 对相关领域进行适配; 可以击败其他方法
可解释的 不可解释的
快速 多模态搜索

Elastic 8.8 引入了我们自己的学习稀疏检索器,包含在 Elasticsearch Relevance EngineTM (ESRE​​TM) 中,它可以使用相关的相关单词扩展任何文本。 它的工作原理如下:创建一个结构来表示文档中找到的术语及其同义词。 在称为术语扩展的过程中,模型根据术语与文档的相关性从 30K 固定分词、单词和子单词单元的静态词汇表中添加术语。

这与矢量嵌入类似,因为在每个文档中创建并存储辅助数据结构,然后可以将其用于查询中的即时语义匹配。 每个术语还有一个关联的分数,它捕获了其在文档中的上下文重要性,因此是可解释的 —— 与嵌入不同。

我们预先训练的稀疏编码器可让你实现开箱即用的语义搜索,并解决上述基于矢量的检索的其他挑战:

  • 你无需担心选择嵌入模型 - Elastic 的学习稀疏编码器模型已预先加载到 Elastic 中,你只需单击一下即可激活它。
  • 实现混合搜索的方法有多种,包括倒数排序融合(RRF)和线性组合。
  • 通过使用量化(字节大小)矢量并利用 Elasticsearch 中降低数据存储需求的所有最新创新,控制内存和存储。
  • 在可处理 PB 级规模的强化平台中获取所有这些。

你可以在这篇描述 Elastic Learned Sparse Encoder 的博客中了解该模型的架构、我们如何训练它以及它如何优于其他方法。

为什么选择 Elastic 作为矢量数据库?

Elastic 的矢量数据库是快速发展的矢量搜索市场中的强大产品。 它提供:

  • 开箱即用的语义搜索
  • 一流的检索性能:使用 Elastic 的学习稀疏编码器与 BM25 相结合的混合搜索优于 SPLADE、ColBERT 和 OpenAI 提供的高端嵌入模型。
Elastic 的稀疏检索模型优于其他流行的矢量数据库,使用 NDCG@10 在公共 BEIR 基准的子集上进行评估
  • 使用我们市场领先的学习稀疏编码器模型、选择任何现成模型或引入你自己的优化模型的灵活性 - 这样你就可以跟上这个快速发展的领域的创新
  • 使用实用算法对 HNSW 进行高效预过滤,适当权衡速度与相关性损失
  • 大多数搜索应用程序所需的功能是专用矢量数据库所不提供的,例如聚合、过滤、分面搜索和自动完成

此外,与大多数其他产品不同,Elastic 与你的数据存储(本地或任何云提供商)无关,并允许你将两者结合起来(跨集群搜索)。

借助 Elastic,你可以加入生成式 AI 革命,并利用你专有的特定领域数据增加公共 LLM。 快速将其推向市场,因为不需要调整、配置、模型选择或领域培训。 为了进一步优化性能,Elastic 使你能够在成熟且功能丰富的平台上灵活地利用先进方法,例如使用微调的嵌入模型或运行你自己的 LLM。

不要只相信我们的话 —— 我们被行业分析师公认为领导者,并被搜索市场大规模采用,并且拥有充满活力的用户社区。

准备好涉足了吗?

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

在这篇博文中,我们可能使用了第三方生成式人工智能工具,这些工具由其各自所有者拥有和运营。 Elastic 对第三方工具没有任何控制权,我们对其内容、操作或使用不承担任何责任,也不对你使用此类工具可能产生的任何损失或损害负责。 使用人工智能工具处理个人、敏感或机密信息时请务必谨慎。 你提交的任何数据都可能用于人工智能培训或其他目的。 无法保证你提供的信息将得到安全或保密。 在使用之前,你应该熟悉任何生成式人工智能工具的隐私惯例和使用条款。

Elastic、Elasticsearch 和相关标志是 Elasticsearch N.V. 的商标、徽标或注册商标。 在美国和其他国家。 所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。

猜你喜欢

转载自blog.csdn.net/UbuntuTouch/article/details/131567621