OpenSearchEmbeddingRetriever
一个兼容 OpenSearch Document Store 的基于 embedding 的 Retriever。
| pipeline 中的最常见位置 | 1. 在 Text Embedder 之后,在 RAG pipeline 的 PromptBuilder 之前 2. 语义搜索 pipeline 中的最后一个组件 3. 在 Text Embedder 之后,在 extractive QA pipeline 的 ExtractiveReader 之前 |
| 必需的初始化变量 | "document_store": OpenSearchDocumentStore 的一个实例 |
| 强制运行变量 | “query_embedding”:浮点数列表 |
| 输出变量 | “documents”:文档列表 |
| API 参考 | OpenSearch |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/opensearch |
概述
该OpenSearchEmbeddingRetriever 是一个兼容OpenSearchDocumentStore 的基于 embedding 的 Retriever。它会比较查询和文档的 embedding,并根据结果从OpenSearchDocumentStore 中提取与查询最相关的文档。
使用要在 NLP 系统中使用 OpenSearchEmbeddingRetriever,请确保查询和文档的 embedding 可用。您可以通过在索引管道中添加 Document Embedder,在查询管道中添加 Text Embedder 来实现这一点。
除了query_embedding 之外,OpenSearchEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的文档的最大数量)和filters(用于缩小搜索范围)。
该embedding_dim,用于存储和检索 embedding,在初始化相应的OpenSearchDocumentStore 时必须定义此参数。
设置与安装
安装并运行 OpenSearch 实例。
如果您已设置 Docker,我们建议拉取 Docker 镜像并运行它。
docker pull opensearchproject/opensearch:2.11.0
docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" opensearchproject/opensearch:2.11.0
或者,您可以访问 OpenSearch 集成 GitHub 并使用提供的文件启动一个运行 OpenSearch 的 Docker 容器。docker-compose.yml:
docker compose up
成功运行 OpenSearch 实例后,安装opensearch-haystack 集成。
pip install opensearch-haystack
用法
在 pipeline 中
像这样在查询管道中使用此 Retriever
from haystack_integrations.components.retrievers.opensearch import OpenSearchEmbeddingRetriever
from haystack_integrations.document_stores.opensearch import OpenSearchDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack import Document
from haystack import Pipeline
from haystack.components.embedders import SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder
document_store = OpenSearchDocumentStore(hosts="https://:9200", use_ssl=True,
verify_certs=False, http_auth=("admin", "admin"))
model = "sentence-transformers/all-mpnet-base-v2"
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(model=model)
document_embedder.warm_up()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(documents_with_embeddings.get("documents"), policy=DuplicatePolicy.SKIP)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder(model=model))
query_pipeline.add_component("retriever", OpenSearchEmbeddingRetriever(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])
示例输出将是:
Document(id=cfe93bc1c274908801e6670440bf2bbba54fad792770d57421f85ffa2a4fcc94, content: 'There are over 7,000 languages spoken around the world today.', score: 0.70026743, embedding: vector of size 768)
其他参考资料
更新于 大约 1 年前
