InMemoryEmbeddingRetriever
当您想要基于嵌入向量的检索时,请将此 Retriever 与 InMemoryDocumentStore 一起使用。
| pipeline 中的最常见位置 | 在查询管道中 在 RAG 管道中,位于 PromptBuilder 之前在语义搜索管道中,作为最后一个组件 在抽取式 QA 管道中,位于 TextEmbedder 之后,ExtractiveReader 之前 |
| 必需的初始化变量 | "document_store": InMemoryDocumentStore 实例 |
| 强制运行变量 | "query_embedding": 浮点数列表 |
| 输出变量 | "documents": 文档列表 |
| API 参考 | Retrievers (检索器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/retrievers/in_memory/embedding_retriever.py |
概述
该InMemoryEmbeddingRetriever 是一个基于嵌入向量的 Retriever,与InMemoryDocumentStore 兼容。它会比较查询和文档的嵌入向量,并根据结果从InMemoryDocumentStore 中获取与查询最相关的文档。
使用要在 NLP 系统中使用 InMemoryEmbeddingRetriever,请确保查询和文档的嵌入向量均可用。您可以通过在索引管道中添加 DocumentEmbedder,并在查询管道中添加 Text Embedder 来实现这一点。有关详细信息,请参阅 Embedders。
除了query_embedding 之外,InMemoryEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的文档的最大数量)和filters(用于缩小搜索范围)。
该embedding_similarity_function(用于嵌入检索)必须在初始化相应的InMemoryDocumentStore 时定义。
用法
在 pipeline 中
在查询管道中像这样使用此 Retriever:
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder
from haystack.components.retrievers import InMemoryEmbeddingRetriever
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
documents = [Document(content="There are over 7,000 languages spoken around the world today."),
Document(content="Elephants have been observed to behave in a way that indicates a high level of self-awareness, such as recognizing themselves in mirrors."),
Document(content="In certain parts of the world, like the Maldives, Puerto Rico, and San Diego, you can witness the phenomenon of bioluminescent waves.")]
document_embedder = SentenceTransformersDocumentEmbedder()
document_embedder.warm_up()
documents_with_embeddings = document_embedder.run(documents)["documents"]
document_store.write_documents(documents_with_embeddings)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "How many languages are there?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result['retriever']['documents'][0])
更新于 大约 1 年前
相关链接
