大规模的 HNSW:为什么您的 RAG 系统会随着矢量数据库的增长而变得更糟

近似向量搜索如何默默地降低召回率 - 以及如何处理它大规模的 HNSW 帖子:为什么随着向量数据库的增长,你的 RAG 系统变得更糟,首先出现在《走向数据科学》上。

来源:走向数据科学

现代矢量数据库 - Neo4j、Milvus、Weaviate、Qdrant、Pinecone - 分层可导航小世界 (HNSW) 很有可能已经为您的检索层提供支持。您很可能在构建数据库时没有选择它,也没有调整它,甚至不知道它在那里。然而,HNSW 正在悄悄地决定你的法学硕士认为什么是真相。它决定将哪些文档块输入到您的 RAG 管道中、您的代理回忆起哪些记忆,以及最终模型是否正确回答或自信地产生幻觉。

随着矢量数据库的增长,检索质量逐渐下降:

  • 不会引发异常
  • 没有记录错误
  • 延迟看起来通常很好
  • 但是,即使嵌入模型和距离度量保持不变,上下文质量也会随着时间的推移而恶化,并且您的 RAG 系统的可靠性也会降低。

    在本文中,我将使用受控实验和真实数据演示 HNSW 如何随着数据库大小的增长而影响检索质量、为什么这种降级比平面搜索更糟糕,以及在生产 RAG 系统中您可以实际采取哪些措施。

    具体来说,我会:

  • 使用 Recall@k 构建实用、可重现的用例来衡量 HNSW 对 RAG 检索质量的影响。
  • 表明,对于固定的 HNSW 设置,随着语料库的增长,召回率比平面搜索下降得更快。
  • 讨论平衡召回和延迟的实际调整策略,而不仅仅是简单地增加 HNSW 的 ef_search。
  • 什么是 HNSW?

    HNSW 是一种基于图的近似最近邻 (ANN) 搜索算法。它将数据组织成多层相连的邻居,并使用这种图结构来加速搜索。

    HNSW指数参数

    1.构建时参数:M和ef_construction。只能在建库前设置。

    对于通用 RAG 应用,M 的典型值在 12 到 48 之间,ef_construction 的典型值在 64 到 200 之间。

    2.查询时参数:ef_search

    什么是 Recall@k?

    用例

    测量 Flat 与 HNSW 的 Recall@k

    观察