QdrantSparseEmbeddingRetriever
一个基于稀疏嵌入的检索器,与 Qdrant 文档存储兼容。
| pipeline 中的最常见位置 | 1. 在 RAG 管道中,Text Embedder 之后,PromptBuilder 之前2. 语义搜索管道中的最后一个组件 3. 在 extractive QA 管道中,Text Embedder 之后, ExtractiveReader 之前 |
| 必需的初始化变量 | "document_store": QdrantDocumentStore 的一个实例 |
| 强制运行变量 | “query_sparse_embedding”: 一个 SparseEmbedding 对象,包含查询的矢量表示 |
| 输出变量 | “documents”:文档列表 |
| API 参考 | Qdrant |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/qdrant |
概述
该QdrantSparseEmbeddingRetriever 是一个基于稀疏嵌入的检索器,与 QdrantDocumentStore 兼容。
它会比较查询和文档的稀疏嵌入,并根据结果从QdrantDocumentStore.
使用QdrantSparseEmbeddingRetriever 时,请确保它具有查询和文档的稀疏嵌入。您可以通过在索引管道中添加稀疏文档 Embedder,并在查询管道中添加稀疏文本 Embedder 来实现此目的。
除了query_sparse_embedding 之外,QdrantSparseEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的文档的最大数量)和filters(用于缩小搜索范围)。
稀疏嵌入支持
要使用稀疏嵌入支持,您需要将
QdrantDocumentStore初始化为use_sparse_embeddings=True,该选项默认为
False。如果您想使用在此功能禁用时创建的文档存储或集合,则必须迁移现有数据。您可以通过利用migrate_to_sparse_embeddings_support实用函数来实现。
安装
要开始在 Haystack 中使用 Qdrant,请先使用以下命令安装软件包:
pip install qdrant-haystack
用法
单独使用
此检索器需要QdrantDocumentStore 并索引文档即可运行。
from haystack_integrations.components.retrievers.qdrant import QdrantSparseEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.dataclasses import Document, SparseEmbedding
document_store = QdrantDocumentStore(
":memory:",
use_sparse_embeddings=True,
recreate_index=True,
return_embedding=True,
)
doc = Document(content="test", sparse_embedding=SparseEmbedding(indices=[0, 3, 5], values=[0.1, 0.5, 0.12]))
document_store.write_documents([doc])
retriever = QdrantSparseEmbeddingRetriever(document_store=document_store)
sparse_embedding = SparseEmbedding(indices=[0, 1, 2, 3], values=[0.1, 0.8, 0.05, 0.33])
retriever.run(query_sparse_embedding=sparse_embedding)
在 pipeline 中
在 Haystack 中,您可以使用 Fastembed Embedders 计算稀疏嵌入。
首先,使用以下命令安装软件包:
pip install fastembed-haystack
然后,尝试这个管道
from haystack import Document, Pipeline
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.retrievers.qdrant import QdrantSparseEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder, FastembedTextEmbedder
document_store = QdrantDocumentStore(
":memory:",
recreate_index=True,
use_sparse_embeddings=True
)
documents = [
Document(content="My name is Wolfgang and I live in Berlin"),
Document(content="I saw a black horse running"),
Document(content="Germany has many big cities"),
Document(content="fastembed is supported by and maintained by Qdrant."),
]
sparse_document_embedder = FastembedSparseDocumentEmbedder()
writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("sparse_document_embedder", sparse_document_embedder)
indexing_pipeline.add_component("writer", writer)
indexing_pipeline.connect("sparse_document_embedder", "writer")
indexing_pipeline.run({"sparse_document_embedder": {"documents": documents}})
query_pipeline = Pipeline()
query_pipeline.add_component("sparse_text_embedder", FastembedSparseTextEmbedder())
query_pipeline.add_component("sparse_retriever", QdrantSparseEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("sparse_text_embedder.sparse_embedding", "sparse_retriever.query_sparse_embedding")
query = "Who supports fastembed?"
result = query_pipeline.run({"sparse_text_embedder": {"text": query}})
print(result["sparse_retriever"]["documents"][0]) # noqa: T201
# Document(id=...,
# content: 'fastembed is supported by and maintained by Qdrant.',
# score: 0.758..)
其他参考资料
更新于 7 个月前
