在大规模向量检索系统中,存储成本和检索精度往往是一对难以平衡的矛盾。传统方案如FAISS需要为每个文本块预计算并存储完整的嵌入向量,导致在处理数千万级文档时,存储开销达到百GB级别。LEANN通过创新的"基于图的选择性重计算"机制,结合多种向量量化技术,实现了高达97%的存储节省,同时保持搜索质量不变。这种突破性成果的背后,离不开对标量量化、乘积量化和局部敏感哈希等经典算法的深度工程化改造与协同优化。
标量量化:从简单压缩到工程限制
标量量化(Scalar Quantization, SQ)是最直观的向量压缩方法,其核心思想是将每个维度的浮点值映射到有限的离散级别。在LEANN的实现中,通常采用8位或4位量化,将原本32位的浮点嵌入压缩到1/8或1/16的存储空间。
工程实践中,LEANN采用非均匀标量量化策略,针对不同维度的值分布特征自适应调整量化区间。对于文本嵌入中常见的"长尾分布"维度,分配更精细的量化级别,而对于方差较小的维度则采用较粗糙的量化方案。这种自适应的标量量化在LEANN的"compact"存储模式下发挥关键作用,为后续的图索引构建提供了紧凑的数据基础。
然而,标量量化存在固有的精度损失问题。当压缩比超过8:1时,量化误差会显著影响检索质量,这也是LEANN选择将标量量化作为基础压缩层,而非独立解决方案的根本原因。
乘积量化:分段聚类的核心引擎
乘积量化(Product Quantization, PQ)是LEANN实现高效压缩的真正核心。与传统方案不同,LEANN采用动态PQ策略,根据数据集规模和查询模式动态调整子空间划分和码本大小。
在标准实现中,LEANN将128维的文本嵌入向量分解为4个32维子空间,每个子空间通过K-Means聚类生成256个聚类中心。这意味着原始向量可以用4个字节(每个字节对应一个子空间的聚类中心ID)进行表示,压缩比达到32:1。更关键的是,LEANN在查询阶段采用非对称距离计算(ADC),通过预计算的距离表避免重复的子空间距离计算。
距离表的构建是PQ实现的工程精髓。对于每个子空间,LEANN在离线阶段计算并缓存该子空间中所有256个聚类中心到查询向量的距离。在查询时,只需通过查表操作即可获得向量间的近似距离,将原本O(n×d)的距离计算复杂度降低到O(n×m×k),其中n为候选向量数,m为子空间数(通常为4),k为聚类中心数(通常为256)[1]。
LEANN还引入了残差乘积量化(Residual PQ)的概念。在构建图索引时,对于每个节点与其邻接节点的连接,LEANN不直接对原始嵌入进行PQ编码,而是对残差向量(即节点嵌入与聚类中心的差值)进行量化。这种方法能够进一步减少量化误差,因为残差向量的方差通常远小于原始向量的方差。
局部敏感哈希:图检索中的快速过滤
局部敏感哈希(Locality-Sensitive Hashing, LSH)在LEANN中扮演着"预过滤器"的角色,其主要作用是在图检索的初始阶段快速缩小候选搜索空间。LEANN采用多表LSH策略,通过L个哈希表和每个表中的K个哈希函数构建索引。
工程实现上,LEANN对传统的LSH进行了两项重要改进。首先是自适应哈希函数选择:对于文本嵌入这类高维稀疏向量,LEANN采用随机超平面投影而非传统的随机投影,确保哈希函数的局部敏感性。其次是动态桶大小调整:基于数据集的分布特征,LEANN动态调整每个哈希桶的容量阈值,避免出现"热点桶"现象。
在图检索的两级搜索流程中,LSH主要服务于粗检索阶段。当用户提交查询向量时,LEANN首先通过LSH快速定位到若干个哈希桶,将搜索空间从全量数据缩小到这些桶的并集。然后,在经过LSH过滤的候选集上执行精确的图遍历检索,这种"粗过滤+精搜索"的组合策略既保证了检索速度,又维持了搜索精度。
选择性重计算:突破传统存储瓶颈
LEANN最核心的创新在于"基于图的选择性重计算"机制,这从根本上改变了向量数据库的存储范式。传统方案需要为每个文本块预先计算并存储嵌入向量,而LEANN只维护图结构,在查询时才按需计算相关节点的嵌入。
这种机制的工程实现依赖于"高保持度修剪"策略。在构建图索引时,LEANN不是简单的随机删除边,而是采用度保持的修剪算法:优先保留连接度高(作为多个节点最近邻)的节点,确保图的整体连通性和检索有效性。具体而言,LEANN计算每个节点的介数中心性(betweenness centrality),在修剪过程中优先保留介数中心性高的节点,这些节点在图检索中往往起到关键的"桥梁"作用。
动态批处理是选择性重计算的另一个工程关键点。当需要为多个节点计算嵌入时,LEANN采用批处理策略将嵌入计算请求聚合,减少GPU/CPU的上下文切换开销。批处理大小根据可用内存和计算资源动态调整,在保证响应延迟的前提下最大化计算效率。
工程参数清单与最佳实践
基于LEANN的量化压缩实现,工程师在部署时需要关注以下关键参数配置:
首先是量化相关参数:embedding-dim(嵌入维度,通常为768或1024)、quantization-bits(量化位数,4或8位)、pq-subspaces(PQ子空间数,建议为8-16)、pq-centroids(每个子空间的聚类中心数,通常为256)。这些参数直接影响压缩比和检索精度,需要根据具体的文本类型和查询模式进行调整。
图索引参数包括graph-degree(图的度,建议为32-64)、pruning-strategy(修剪策略,支持global、local、proportional三种模式)、search-complexity(搜索复杂度,建议为32-64)。较高的graph-degree能够提高召回率但增加存储开销,而search-complexity直接影响查询延迟。
最后是选择性重计算相关参数:batch-size(批处理大小,根据硬件配置调整)、recompute-strategy(重计算策略,启用/禁用)、cache-policy(缓存策略,支持LRU、LFU等)。合理的批处理大小配置能够显著提升查询性能,而缓存策略的选择需要平衡内存使用和查询响应时间。
通过这种多层次、多技术的协同优化,LEANN实现了传统向量数据库难以企及的存储效率和检索质量平衡,为个人AI助手和边缘计算场景下的RAG应用提供了可行的技术路径。
参考资料:
[1] 基于乘积量化的相似搜索算法原理与实现细节,CSDN技术社区,2025