向量数据库:RAG应用的推进器(上)
数据库领域的发展日新月异,已涵盖众多细分市场和应用场景。如今,一个全新的数据库类别 —— 向量数据库,正在迅速崛起。这一创新得益于生成式人工智能技术的飞速进步,以及大语言模型在各行各业的广泛应用。向量数据库的出现,无疑将引领数据处理的变革,为我们带来前所未有的可能性。本文将围绕向量数据库,详细介绍向量存储的高级分类,并尝试从在企业规模上构建生成式人工智能应用程序的角度来审视这个新市场。
RAG 是什么
现状
大模型为我们带来很多惊喜,但是随着应用的逐步深入,其弊端越来越不容忽视。这些大模型被它们训练时的数据所束缚,无法反映现代企业动态和广阔的数据宇宙。
RAG(Retrieval-Augmented Generation),检索增强生成,是一个由 Meta AI 研究团队开发的大规模自然语言处理模型。RAG 是一个将检索和生成结合在一起的模型,它能够从大量文本中检索相关信息,并用这些信息来生成答案或进行文本补全。
大多数搜索和检索的数据通常涉及非结构化和结构化数据。对于大多数非结构化数据,通常使用基于语义或含义的搜索,传统上也是一种搜索图像和发现数据异常以及在一定程度上对数据进行分类的技术。
现在不同的是,引入 LLM 后,大模型可以将数据转换为向量的嵌入模型,通过计算相似数据之间的距离来编码它们的含义,现在可以用于构建所有需要上下文数据的 LLM 应用程序。RAG 在大量的私人数据语料库中搜索,并检索与最相似的查询结果,以便将其作为上下文传递给 LLM。
RAG 时代是一种依靠基于语义搜索能力的软件模式,通过将原始数据转换为向量来实现。这就是向量数据库闪闪发光的地方,将数据转化为 AI 应用可以掌握的格式。
RAG 语义搜索
1. 使用模型创建嵌入或向量
在语义搜索领域,嵌入(Embedding)是基础。嵌入表示数据的高维向量,可以是文本、图像或其他类型的数据,以计算机可处理的格式呈现。这些嵌入反映了数据的本质,包括其语义和语境细微差别,这对于语义搜索等任务至关重要,其中理解单词或图像背后的含义是关键。
Transformer 模型的出现彻底改变了嵌入的创建方式,特别是在自然语言处理(NLP)领域。像 BERT(双向编码器的 Transformer)和GPT(生成式预训练 Transformer)这样的模型已经在理解语言的上下文和语义方面树立了新的标准。这些模型处理文本数据,创建嵌入不仅包含单词的字面意义,还包括它们的隐含和上下文的重要性。
在生成嵌入时,有以下几种选择:
- 预训练模型:利用像 BERT 或 GPT 这样的现有大模型,这些模型已经在大量数据上进行了训练,可以提供适用于各种应用的适配嵌入。向量可以使用免费和开源的模型创建,也可以通过调用由 OpenAI 等公司提供的 API 接口来创建。
- 在特定数据集上进行微调:对于特定场景的需求,这些模型可以在指定数据集上进一步微调,从而使嵌入能够体现行业或场景的细微差别。微调嵌入模型对于拥有特定于该公司和行业的实体数据的行业和公司来说更为重要。
- 自定义模型训练:在需要高度专业化的嵌入时,从头开始训练自定义模型可能是最佳方法,但是这需要大量的数据和计算资源作为支持。
2. 向量的存储
这就是向量数据库发挥作用的地方。向量是一组用 ,
分隔的数字,可以使用内存中的向量数据库或能够以高效方式存储这些数字的数据库进行存储。数据库可以将向量存储为不同的索引类型,以便更快地存储和检索可能具有超过一千个维度的数百万个向量。
向量使用效率的关键是它在数据库中的存储方式,有几种用于将向量聚集在一起的索引算法,这些算法在速度、准确性和资源使用方面取得平衡,组织和检索向量:
- 倒排索引:传统上在搜索引擎中使用的倒排索引同样也适用于向量搜索。这种索引将每个唯一的值映射到包含该值的文档(或数据集合)的列表,便于快速检索。
- 基于树的索引:这种索引对于低维数据非常高效,例如 K-D 树,它们将空间划分为嵌套的超矩形区域,可以在低维空间中快速进行最近邻搜索。
- 基于图的索引:这种索引适用于处理复杂的高维数据,利用图的结构来浏览数据集合,通过遍历图来找到最近的邻点。
- 量化方法:这些方法通过近似向量的值来减小其大小,有助于在不显著影响搜索质量的情况下管理大型数据集,量化使得存储和搜索大量向量数据变得更加易于管理。
索引方法的选择会影响向量数据库的性能和可扩展性。倒排索引虽然快速,但对于高维向量数据可能不够高效。基于树和图的索引为这种数据提供了更多的可扩展性,但在搜索准确性和速度方面存在不同的权衡。量化提供了一个折中方案,平衡了效率和准确性。
3. 使用向量函数进行搜索和检索
在语义搜索中,检索过程从将查询转换为向量开始,使用与在数据库中创建嵌入向量相同的方法。然后将该查询向量与存储在数据库中的向量进行比较,以找到最相关的匹配项。一般来说,结果可能是精确匹配或近似匹配:精确的K最近邻(KNN)或近似最近邻(ANN)。语义搜索的有效性在于准确地衡量查询向量与数据库向量之间的相似性。
这其中相似度度量的选择至关重要,因为它直接影响搜索结果的相关性。最常见的度量包括:
- 点积:这个度量计算两个向量的乘积,较高的点积表示较高的相似度,但可能并不总是考虑向量的大小。
- 余弦相似度:余弦相似度衡量了两个向量之间的夹角的余弦值。因为它对向量的长度进行了归一化处理,只关注方向,所以特别适用于文本相似度,在 NLP 应用中被广泛使用。
- 欧几里得距离:欧氏距离衡量了向量空间中两点之间的“距离”,它对于聚类任务非常有效,其中向量之间的绝对差异很重要。
其中余弦相似度和欧氏距离应用更为广泛,理论上余弦相似度会在高维向量里比欧氏距离好很多,欧氏距离通用性相对有限。
RAG 场景下的向量数据库评估
多数据类型支持
现有数据中有多少存储在结构化(例如 SQL)、半结构化(例如 JSON)和非结构化(例如 pdf、文件等)格式中。如果公司拥有更多种类的数据类型,则需要考虑使用支持多种数据类型的企业数据库(例如 SingleStore)。
多种搜索方法
如果公司数据有多种数据类型,那么很可能会同时进行关键词搜索和语义搜索。ElasticSearch、AWS OpenSearch 和 SingleStore 等数据库同时支持基于文本的词汇和基于向量的语义搜索选项。
数据新鲜度和延迟
需要考虑当前场景下更新数据的频率,要知道这些数据需要进行向量化才能在生成式 AI 应用程序中进行搜索。需要注意,具有定义函数和摄取管道功能的数据库可以更轻松地处理这些问题。
事务性或分析用例
生成式 AI 应用程序是否需要任何类型的分析用例,如果答案是肯定的,那么考虑使用可以基于列存储数据的数据库。
从原型到生产
回答这个问题需要了解整体数据的总量、延迟和准确性要求以及其他数据安全和治理要求。例如应用程序是否需要考虑基于角色的访问控制(RBAC)、审计和其他行业级安全合规要求,以及应用程序和数据是否能够容忍停机或数据丢失等等意外情况。如果答案更倾向于企业级要求,那么考虑支持多种数据类型、以多种方式部署(本地、云和混合)并且能够处理灾难恢复并满足用户需求的企业应用程序是有意义的。
转载自:https://juejin.cn/post/7331928379555479591