Retrievers (检索器)
检索器会遍历文档存储中的所有文档,并选择与用户查询匹配的文档。
检索器如何工作?
检索器是大多数搜索系统的基本组成部分。它们用于检索增强生成 (RAG) 管道的检索部分,是文档检索管道的核心,并与 Reader 配对以用于抽取式问答管道。
当给定一个查询时,检索器会筛选文档存储中的文档,为每个文档分配一个分数以指示其与查询的相关性,并返回顶部候选文档。然后,它将选定的文档传递给管道中的下一个组件,或将它们作为查询的答案返回。
然而,需要注意的是,大多数基于密集嵌入的检索器不会将每个文档与查询进行比较,而是使用近似技术来实现几乎相同的结果,并获得更好的性能。
检索器类型
根据计算查询和文档之间相似度的方式,您可以将检索器分为稀疏关键词检索器、密集嵌入检索器和稀疏嵌入检索器。几个文档存储可以与不同类型的检索器配对。
稀疏关键词检索器
稀疏关键词检索器使用 BM25 算法或类似的算法来查找文档和查询之间的共享关键词。该算法计算文档和查询之间的加权词重叠。
主要特点
- 简单但有效,无需训练,开箱即用效果很好
- 可用于任何语言
- 不考虑词序或语法
- 无法处理词汇表外单词
- 适用于精确措辞很重要的用例
- 无法处理同义词或意义相似的词
密集嵌入检索器
密集嵌入检索器使用嵌入,这是词语的向量表示,可以捕捉它们的语义。密集检索器首先需要一个 Embedder 将文档和查询转换为向量。然后,它们计算查询和文档存储中每个文档的向量相似度,以获取最相关的文档。
主要特点
- 它们功能强大,但计算成本也比稀疏检索器高
- 它们是在带标签的数据集上训练的
- 它们是语言特定的,这意味着它们只能在训练它们的数据集所属的语言中使用。但是,可以使用多语言嵌入模型。
- 由于它们使用嵌入,因此它们会考虑词序和语法
- 可以在一定程度上处理词汇表外单词
稀疏嵌入检索器
此类包括 SPLADE 等方法。这些技术使用特定的嵌入模型,结合了关键词检索器和密集嵌入检索器的优点。
特别是,SPLADE 使用 BERT 等语言模型来衡量查询中不同术语的相关性,并执行自动术语扩展,从而减少词汇不匹配问题(查询和相关文档通常缺乏术语重叠)。
主要特点
- 在精确关键词匹配方面优于密集嵌入检索器
- 在语义匹配方面优于 BM25
- 比 BM25 慢
- 与 BM25 和密集嵌入相比仍处于实验阶段:支持的文档存储少,模型也少
Filter Retriever
FilterRetriever 是一种特殊的检索器,可以与所有文档存储配合使用,并检索与提供的过滤器匹配的所有文档。
有关更多信息,请阅读此检索器的 文档页面。
高级检索器技术
组合检索器
您可以在一个管道中使用不同类型的检索器,以利用它们各自的优点并弥补它们的不足。有两种最常见的策略:结合稀疏和密集检索器(混合检索)以及使用两个密集检索器,每个检索器使用不同的模型(多嵌入检索)。
混合检索
您可以在一个管道中使用不同的检索器类型(稀疏和密集),以利用它们的优点,使您的管道对不同类型的查询和文档更加健壮。当两个检索器都获取候选文档后,您可以将它们组合起来生成最终排名并获得顶部文档。
在此方法中,请参阅我们的 DocumentJoiner 文档中的示例。
元数据过滤
在谈论混合检索时,一些数据库提供商的意思是针对密集嵌入检索进行元数据过滤。虽然这与组合不同的检索器不同,但通常受 Haystack 检索器支持。有关更多信息,请查看 元数据过滤页面。
混合检索器
一些文档存储在数据库端提供混合检索。
总的来说,这些解决方案可能很高效,但它们提供的自定义选项较少(例如,关于如何合并来自不同检索技术的结果)。
Haystack 中提供了一些混合检索器,例如QdrantHybridRetriever。
如果您的首选文档存储没有可用的混合检索器,或者您想进一步自定义行为,请查看混合检索管道 教程。
多嵌入检索
在此策略中,您使用两个基于嵌入的检索器,每个检索器使用不同的模型来嵌入相同的文档。然后,您将得到一个文档的多个嵌入。如果您需要多模态检索,这也会很有用。
检索器和文档存储
检索器与 文档存储 紧密耦合。大多数文档存储都可以与稀疏或密集检索器或两种检索器类型结合使用。请参阅特定文档存储的文档,以检查它支持哪些检索器。
命名约定
Haystack 中的检索器名称由以下部分组成:
- 文档存储名称 +
- 检索方法 +
- Retriever (检索器).
实际示例
ElasticsearchBM25Retriever:BM25 是一种稀疏关键词检索技术,此检索器与ElasticsearchDocumentStore.ElasticsearchEmbeddingRetriever:如果不提及,Embedding 就表示密集嵌入,此检索器与ElasticsearchDocumentStore.QdrantSparseEmbeddingRetriever(建设中):稀疏嵌入是该技术,此检索器与QdrantDocumentStore.
虽然我们尽量遵循此约定,但有时需要灵活变通并适应特定于文档存储的功能。例如:
ChromaQueryTextRetriever:此检索器使用 Chroma 的查询 API,并期望文本输入。它与ChromaDocumentStore.
FilterPolicy
FilterPolicy 决定了在文档检索过程中如何应用过滤器。它控制检索器初始化期间设置的静态过滤器与运行时提供的动态过滤器之间的交互。可能的值为:
- REPLACE(默认):任何运行时过滤器都会完全覆盖初始化过滤器。这允许特定查询动态更改过滤范围。
- MERGE:将运行时过滤器与初始化过滤器合并,从而缩小搜索结果范围。
该FilterPolicy 在选定的检索器的 init 方法中设置,而filters 可以在 init 和 run 方法中设置。
使用检索器
有关如何在管道中初始化和使用检索器的详细信息,请参阅特定检索器的文档。Haystack 中提供以下检索器:
| AstraEmbeddingRetriever | 与 AstraDocumentStore 兼容的基于嵌入的检索器。 |
| AutoMergingRetriever | 当多个相关片段匹配查询时,检索完整的父文档而不是碎片化的块。 |
| AzureAISearchEmbeddingRetriever | 与 Azure AI Search Document Store 兼容的嵌入检索器。 |
| AzureAISearchBM25Retriever | 一种关键词检索器,用于从 Azure AI Search Document Store 中检索匹配查询的文档。 |
| AzureAISearchHybridRetriever | 一种基于密集和稀疏嵌入的检索器,与 Azure AI Search Document Store 兼容。 |
| ChromaEmbeddingRetriever | 与 Chroma Document Store 兼容的基于嵌入的检索器。 |
| ChromaQueryTextRetriever | 与 Chroma Document Store 兼容的检索器,使用 Chroma 查询 API。 |
| ElasticsearchEmbeddingRetriever | 与 Elasticsearch Document Store 兼容的基于嵌入的检索器。 |
| ElasticsearchBM25Retriever | 一种关键词检索器,用于从 Elasticsearch Document Store 中检索匹配查询的文档。 |
| InMemoryBM25Retriever | 与 InMemoryDocumentStore 兼容的关键词检索器。 |
| InMemoryEmbeddingRetriever | 与 InMemoryDocumentStore 兼容的基于嵌入的检索器。 |
| FilterRetriever | 一种特殊的检索器,可与任何文档存储一起使用,以获取匹配特定过滤器的文档。 |
| MongoDBAtlasEmbeddingRetriever | 与 MongoDB Atlas Document Store 兼容的嵌入检索器。 |
| OpenSearchBM25Retriever | 一种关键词检索器,用于从 OpenSearch Document Store 中检索匹配查询的文档。 |
| OpenSearchEmbeddingRetriever | 与 OpenSearch Document Store 兼容的基于嵌入的检索器。 |
| OpenSearchHybridRetriever | 一个 SuperComponent,在一个组件中实现混合检索器,依赖 OpenSearch 作为后端文档存储。 |
| PgvectorEmbeddingRetriever | 与 Pgvector Document Store 兼容的基于嵌入的检索器。 |
| PgvectorKeywordRetriever | 一种关键词检索器,用于从 Pgvector Document Store 中检索匹配查询的文档。 |
| PineconeEmbeddingRetriever | 与 Pinecone Document Store 兼容的基于嵌入的检索器。 |
| QdrantEmbeddingRetriever | 与 Qdrant Document Store 兼容的基于嵌入的检索器。 |
| QdrantSparseEmbeddingRetriever | 与 Qdrant Document Store 兼容的稀疏嵌入检索器。 |
| QdrantHybridRetriever | 一种基于密集和稀疏嵌入的检索器,与 Qdrant Document Store 兼容。 |
| SentenceWindowRetriever | 检索相关句子周围的相邻句子以获得完整上下文。 |
| SnowflakeTableRetriever | 连接到 Snowflake 数据库以执行 SQL 查询。 |
| WeaviateBM25Retriever | 一种关键词检索器,用于从 Weaviate Document Store 中检索匹配查询的文档。 |
| WeaviateEmbeddingRetriever | 与 Weaviate Document Store 兼容的嵌入检索器。 |
| WeaviateHybridRetriever | 结合 BM25 关键词搜索和向量相似度,从 Weaviate Document Store 中检索文档。 |
更新于 4 天前
