也许你偶然看到了“向量数据库”这个术语,并想知道它是否是数据检索系统中的新成员。也许你对关于向量数据库相互矛盾的说法感到困惑。事实是,*向量数据库*使用的方法已经存在了几年了。如果你正在寻找最佳检索性能,那么结合基于关键字的搜索(有时称为词法搜索)和基于向量的方法的混合方法代表了当前技术的先进水平。
在 Elasticsearch 中,你可以同时获得词法搜索和向量搜索的优势:Elastic 使得在 Lucene 中实现的词法列式检索广受欢迎,并且已经完善这种方法超过 10 年了。此外,Elastic 多年来一直在投资向量数据库功能,例如使用分层可导航小世界 (HNSW)(在 8.0 及更高版本中可用)的近似最近邻搜索的原生实现。
Elastic 有望成为快速发展的向量数据库市场的领导者
- 完全高效且可扩展的向量数据库功能,包括存储嵌入向量并高效搜索最近邻
- 一种专有的稀疏检索模型,可开箱即用地实现语义搜索
- 业界领先的各种类型相关性——关键字、语义和向量
- 能够应用生成式 AI 并使用专有的、特定于业务的数据作为上下文来丰富大型语言模型 (LLM)
- 所有功能都在单个平台中:执行向量搜索,将非结构化数据嵌入到向量表示中(应用现成和自定义模型),并在生产环境中实现搜索应用程序,并提供可观察性和安全性解决方案
在本博客中,我们将进一步了解与向量数据库相关的概念、它们的工作原理、适用的用例以及如何通过向量搜索实现卓越的搜索相关性。
理解向量数据库
为什么向量数据库如此受关注?
向量数据库是指能够执行向量搜索的系统。因此,要了解向量数据库,让我们从向量搜索开始,以及为什么它最近受到了如此多的关注。
向量搜索在最近关于 AI 如何从业务流程到教育彻底改变一切的讨论中扮演着重要角色。为什么向量搜索在这个主题中扮演如此重要的角色?首先,向量搜索能够对非结构化数据进行快速准确的语义搜索——无需大量整理元数据、关键字和同义词。其次,向量搜索为最近围绕生成式 AI 的兴奋增添了一份力量,因为它可以从专有来源提供准确的上下文,而这些来源超出了 LLM“已知”(即在其训练期间看到)的内容。
向量数据库有什么用途?
大多数标准数据库允许你通过匹配结构化字段(包括匹配描述中的关键字和数字字段中的值)来检索相关信息。相比之下,向量数据库能够捕捉非结构化文本的含义,并找到你“真正想要的意思”,而不是匹配文本——也称为*语义搜索*。
此外,向量数据库还允许你:
- 搜索文本以外的非结构化数据,包括图像或音频。涉及多种类型数据的搜索被称为“多模态搜索”——例如使用文本描述搜索图像。
- 个性化用户体验,方法是在统计(向量)模型中模拟用户特征或行为,并与其他用户进行匹配。
- 创建“生成式”体验,系统不仅返回与用户发出的查询相关的文档列表,还会与用户进行对话、解释多步骤流程,并生成超越浏览相关信息的交互。
什么是向量数据库,它是如何工作的?
向量数据库由两个主要组件组成:
- 索引和存储嵌入向量,这通常被称为非结构化数据的多维数值表示。嵌入向量是由深度神经网络生成的,这些网络经过训练可以对那种类型的非结构化数据进行分类,并在“密集”向量中捕捉非结构化数据的含义、上下文和关联,通常深度为数百到数千维——这是向量搜索的秘诀。
- 一种搜索算法,可以高效地在高维“嵌入空间”中找到最近邻,其中向量邻近性意味着含义上的相似性。存在不同的搜索索引方法,也称为近似最近邻 (ANN) 搜索,其中 HNSW 是向量数据库提供商最常用的算法之一。
有些向量数据库只提供存储和搜索嵌入向量(如上图 2 中的 A 所示)的功能。但是,这种方法给开发者带来了如何生成这些嵌入向量的挑战。这通常需要访问嵌入模型(如图所示为 C)和一个 API 来将其应用于你的数据和查询(B)。你可能只能与嵌入向量一起存储非常有限的元数据,这使得在你的用户应用程序中提供全面信息变得更加复杂。
此外,专用向量数据库让你自己去弄清楚如何将搜索功能集成到你的应用程序中,这在上图 2 的右侧有所暗示。管理你的软件架构组件以解决这些挑战需要评估来自不同供应商提供的各种质量水平和支持的许多解决方案。
Elastic 作为向量数据库
Elastic 提供了所有你期望从向量数据库中获得的功能,甚至更多!
与专用向量数据库相比,Elastic 在单个平台上支持三种对实现由向量搜索驱动的应用程序至关重要的功能:存储嵌入向量 (A)、高效搜索最近邻 (B) 和将文本嵌入到向量表示中 (C)。
这种方法消除了与通过 API 访问它们(对于其他向量数据库来说是必要的)相比的低效率和复杂性。Elastic 在 Lucene 中原生实现了使用 HNSW 的近似最近邻搜索,并允许你使用在蛮力搜索和近似最近邻之间切换的算法(即在预过滤删除候选列表的大部分内容时回退到蛮力搜索)来应用过滤(作为预过滤,以获得准确的结果)。
使用我们市场领先的 Learned Sparse Encoder 模型或自带嵌入模型。在本博客中了解更多关于将 PyTorch 中创建的 transformers 加载到 Elastic 的信息。
如何通过向量搜索获得最佳检索性能
实施向量搜索的挑战
为了了解如何实现卓越的语义搜索的核心,让我们了解(密集)向量搜索的挑战:
- 选择合适的嵌入模型:标准嵌入模型在领域外会恶化,例如在公共存储库中提供的现成模型——例如,在我们关于向量搜索基准测试的早期博客的表 2 中所示。如果你幸运的话,预训练模型足以满足你的用例,但通常你必须使用领域数据对其进行调整,这需要标注数据和深度神经网络训练方面的专业知识。你可以在本博客中找到模型适配过程的蓝图。
- 高效过滤的实现:在搜索和推荐系统中,返回相关文档列表通常并非最终目标;用户希望应用过滤器。使用向量搜索进行元数据过滤具有挑战性:如果在运行向量搜索后进行过滤,则可能会导致匹配过滤条件的结果太少(或没有)(称为“后期过滤”)。否则,如果先进行过滤,则最近邻搜索效率不高,因为它是在数据集的一个小子集上执行的,而向量搜索期间使用的数据结构(如 HNSW 图)是为整个数据集创建的。将搜索范围限制在相关向量上对于许多用例来说是提供更好客户体验的绝对必要条件。
- 执行混合搜索:为了获得最佳性能,通常必须将向量搜索与传统的词汇方法相结合。
密集向量检索与稀疏向量检索
存在两大类检索方法,通常称为“密集”和“稀疏”。两者都使用文本的向量表示,该表示编码含义和关联,并且两者都将搜索近似匹配作为第二步,如下面的图 5 所示。所有基于向量的方法都有这个共同点。
上面我们描述了更具体地称为“密集”向量搜索的内容,其中非结构化数据使用嵌入模型转换为数字表示,并且您会在嵌入空间中找到查询的最近邻匹配。为了提供高度相关的结果,“密集”向量搜索通常需要领域内重新训练。如果没有领域内重新训练,它们的性能甚至可能低于传统的词汇评分,例如 Elastic 的 BM25。向量搜索之所以受到如此多的关注,其优势在于,经过微调后,它可以胜过所有其他方法,并且它允许您搜索文本以外的非结构化数据,例如图像或音频,这被称为“多模态搜索”。该向量被认为是“密集的”,因为它的值大多非零。
与上面描述的“密集”向量相反,“稀疏”表示包含很少的非零值。例如,使 Elasticsearch 普及的词汇搜索(BM25)是稀疏检索方法的一个示例。它使用文本的词袋表示,并通过修改称为 TF-IDF(词频,逆文档频率)的基本相关性评分方法来实现高相关性,以考虑文档长度等因素。
学习型稀疏检索器:开箱即用的高性能语义搜索
最新的稀疏检索方法使用学习型稀疏表示,这比其他方法具有多重优势。
- 无需任何领域内重新训练即可获得高相关性:它们可以开箱即用,无需在文档的特定领域调整模型。
- 可解释性:您可以跟踪哪些词条匹配,稀疏编码器附加的评分表示词条与查询的相关程度——非常易于解释——而密集向量搜索依赖于通过应用嵌入模型获得的含义的数字表示,这就像许多机器学习方法一样是“黑盒”。
- 速度快:稀疏向量完全适合倒排索引,这使得像 Lucene 和 Elasticsearch 这样的已建立的稀疏检索器如此快速。但是稀疏检索器仅适用于文本数据——不适用于图像或其他类型的非结构化数据。稀疏和基于密集向量的检索之间的关键权衡
稀疏检索 | 基于密集向量的检索 |
无需调优即可获得良好的相关性(学习型稀疏) | 适应领域;可以胜过其他方法 |
可解释的 | 不可解释的 |
快速 | 多模态 |
Elastic 8.8 引入了我们自己的学习型稀疏检索器,包含在 Elasticsearch Relevance Engine 中
TM (ESRETM),它使用相关的词语扩展任何文本。其工作原理如下:创建一个结构来表示文档中找到的词条及其同义词。在一个称为词条扩展的过程中,模型会根据词条与文档的相关性,从包含 30,000 个固定标记、词语和子词单元的静态词汇表中添加词条。
这类似于向量嵌入,因为它会在每个文档中创建和存储辅助数据结构,然后可以将其用于查询中的即时语义匹配。每个词条还具有关联的评分,该评分捕获其在文档中的上下文重要性,因此与嵌入不同,它是可解释的。
我们预训练的稀疏编码器使您可以开箱即用地实现语义搜索,并解决上述基于向量的检索的其他挑战。
- 您无需担心选择嵌入模型——Elastic 的学习型稀疏编码器模型预加载到 Elastic 中,您可以单击一下即可激活它。
- 有多种方法可以实现混合搜索,包括倒数排名融合 (RRF) 和线性组合。
- 通过使用量化(字节大小)向量并利用 Elasticsearch 中所有最近减少数据存储需求的创新来控制内存和存储。
- 在一个可以处理 PB 级规模的强化平台中获得所有这些。
您可以在此博客中了解有关模型架构、我们如何训练它以及它如何胜过替代方法的信息,该博客描述了 Elastic 学习型稀疏编码器。
为什么选择 Elastic 作为您的向量数据库?
Elastic 的向量数据库在快速发展的向量搜索市场中具有强大的优势。它提供:
- 开箱即用的语义搜索
- 一流的检索性能:Elastic 的学习型稀疏编码器与 BM25 相结合的混合搜索优于SPLADE、ColBERT 和 OpenAI 提供的高端嵌入模型。
- 使用我们市场领先的学习型稀疏编码器模型、选择任何现成模型或引入您自己的优化模型的灵活性——因此您可以跟上这个快速发展的领域的创新。
- 使用实际算法对HNSW进行高效预过滤,该算法适当地权衡速度与相关性损失。
- 大多数搜索应用程序中需要的功能,而专用的向量数据库没有提供这些功能,例如聚合、过滤、分面搜索和自动完成。
此外,与大多数其他数据库不同,Elastic 与您的数据存储无关(本地或任何云提供商),并允许您同时使用两者(跨集群搜索)。
使用 Elastic,您可以加入生成式 AI 革命,并使用您专有的、特定领域的资料增强公共大型语言模型。可以快速将其推向市场,因为无需调优、配置、模型选择或领域训练。为了进一步优化性能,Elastic 提供了灵活性,使您可以利用高级方法(例如使用微调的嵌入模型或运行您自己的大型语言模型)在一个成熟且功能丰富的平台上。
不要只听我们说——我们被行业分析师评为领导者,并且被搜索市场大规模采用,并拥有一个充满活力的用户社区。
准备深入了解了吗?
- 了解Elastic Relevance Engine,其中包括Elastic 学习型稀疏编码器,它可以开箱即用地提供语义搜索。
- 观看演示,了解如何在我们在 Microsoft Build 上的演示中将语义搜索与生成式 AI 相结合。
- 注册免费的 Elastic 试用版,并别忘了启用自动缩放。
本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 决定。任何目前不可用的功能或功能可能无法按时或根本无法交付。
在本博文中,我们可能使用了第三方生成式 AI 工具,这些工具由其各自的所有者拥有和运营。Elastic 对第三方工具没有任何控制权,我们对它们的内容、运营或使用不承担任何责任或义务,也不对您使用此类工具可能造成的任何损失或损害承担任何责任。使用 AI 工具处理个人、敏感或机密信息时,请务必谨慎。您提交的任何数据都可能用于 AI 训练或其他目的。我们不能保证您提供的信息将被安全或保密地保存。在使用任何生成式 AI 工具之前,您应该熟悉其隐私惯例和使用条款。
Elastic、Elasticsearch 和相关的标记是 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称是其各自所有者的商标、徽标或注册商标。