提升大语言模型RAG应用的检索效率:向量数据库索引优化策略
1. 概述
在一般应用系统开发中,数据存储在关系数据库表中。这种方法很简单,但是随着数据量的增加,管理和检索信息变得越来越困难和缓慢。关系数据库中的一项重要技术是索引,这与图书馆中书籍的存储方式非常相似。无需浏览整个图书馆,而是通过查找书籍索引目录,就可以找到所需的书籍。数据库中的索引以类似的方式工作,加快了查找所需数据的过程。
在基于大语言模型的 RAG 应用中有效地检索知识是提供准确和及时响应的关键。向量数据库的索引策略在加强 RAG 系统性能方面起着至关重要的作用。本文介绍如何使用向量数据库的索引策略来提高 RAG 系统性能。
2. 向量嵌入
向量嵌入是将文本、图像和音频等对象表示为连续向量空间中的点的一种方法,其中这些点在空间中的位置对于机器学习 (ML) 算法具有语义意义。
3. 向量数据库
用于存储这些嵌入向量的专用数据库称为向量数据库。数据点以称为“向量”的数组形式存储,
向量数据库是存储和管理向量嵌入的数据库,向量嵌入是高维空间中数据的数学表示形式。在此空间中,每个维度对应于数据的一个特征,数万个维度可用于表示复杂的数据。向量在此空间中的位置表示其特征。字词、短语或整个文档、图像、音频和其他类型的数据都可以向量化。
4. 向量相似性搜索
在向量数据库中,为了从一组嵌入中搜索和检索数据,我们需要定义一种比较两个向量的方法。这通常被称为相似性度量或相似性指标。我们使用相似性搜索指标(如欧几里得距离(Euclidean Distance)和余弦相似度(Cosine Similarity)等)来计算多维空间中向量之间的相似性,并获取与我们的查询向量最相似的向量。
4.1 欧几里 得距离(Euclidean Distance)
欧几里得距离(Euclidean Distance)是测量两个向量之间的距离的常用方法。是指两点之间直线距离的度量。计算公式为两点对应坐标平方差之和的平方根。通过添加更多项来考虑其他维度,可将此公式扩展到更高维度空间。
4.2 余弦相似度(Cosine Similarity)
余弦相似度(Cosine Similarity)是一种用于度量两个向量之间的相似度的度量方法。它是多维空间中两个向量之间的夹角余弦值。余弦相似度在计算两个向量之间的相似度时,会考虑向量的方向。
在数学上讲,两个向量之间的余弦相似度 cos(θ) 是以两个向量的点积除以它们大小之积计算出来。
余弦相似度的范围是 -1 到 1,其中:
- 1 表示向量完全对齐(指向同一方向)。
- 0 表示两个向量正交(相互垂直)。
- -1 表示两个向量方向相反。
余弦相似性在处理向量时特别有用,因为它关注向量之间的方向关系,而非 大小。
4.3 近似最近邻 (ANN,Approximate Nearest Neighbor)
虽然前面提到的距离指标可用于衡量向量相似度,但在查询时将所有可能的向量与查询向量进行比较会变得低效且缓慢。为了解决这个问题,我们可以使用近似最近邻 (ANN) 搜索。
ANN 算法并非寻找完全匹配项,而是通过某些距离指标(如欧几里得距离或余弦相似度)有效地搜索与给定查询近似最接近的向量。通过允许某种程度的近似,这些算法可以显著降低最近邻搜索的计算成本,而无需计算整个向量数据库的所有向量的嵌入相似度。
5. 什么是向量索引
向量索引是一种专门为高维向量数据设计的索引结构,用于在向量数据库中高效地执行近似最近邻搜索。
6. 索引策略
6.1 原始向量索引(Flat Index)
是一种最基础的索引策略,也可以看做是一种蛮力搜索(Brute Force Search) 。按原样存储所有向量,不做任何修改。并在查询时计算每个向量与查询向量之间的相似度。它简单易行,准确率也很高。缺点是速度慢,不适合处理大规模数据集。
当我们追求极致的准确度,且不考虑速度时,它是正确的选择。如果我们搜索的数据集较小,搜索速度也可以接受,它可能是一个不错的选择。
6.2 局部敏感哈希索引(LSH,Locality Sensitive Hashing)
通过哈希函数将相似数据映射到同一桶(buckets)中,从而快速缩小搜索范围。 原始数据空间中相邻的点,经过哈希映射后仍保持较高概率位于同一桶内,不相似点则分散到不同桶。这种特性使其能通过哈希表快速定位相似数据,避免全量比对。