NvidiaRanker
使用此组件,根据文档与查询的相似度,利用 Nvidia 托管模型对文档进行排序。
| pipeline 中的最常见位置 | 在查询管道中,在返回文档列表的组件(例如 Retriever)之后 |
| 必需的初始化变量 | "api_key": NVIDIA NIM 的 API 密钥。可以通过以下方式设置环境变量 `NVIDIA_API_KEY`。 |
| 强制运行变量 | “query”: 查询字符串 “documents”: 文档对象列表 |
| 输出变量 | “documents”: 文档对象列表 |
| API 参考 | Nvidia |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/nvidia |
概述
NvidiaRanker 根据语义相关性对文档进行排序。Documents 根据与指定查询的语义相关性进行排序。它使用 NVIDIA NIMs 提供的排序模型。此 Ranker 的默认模型是nvidia/nv-rerankqa-mistral-4b-v3.
您也可以指定top_k 参数来设置要返回的文档的最大数量。
有关 NvidiaRanker 的所有可自定义参数,请参阅我们的 API 参考。NvidiaRanker 的所有可自定义参数,请参阅我们的 API 参考。
要开始将此集成与 Haystack 一起使用,请使用以下命令安装它:
pip install nvidia-haystack
该组件默认使用NVIDIA_API_KEY 环境变量。否则,您可以在初始化时使用 传入 Nvidia API 密钥。api_key 按如下方式传递 Jina API 密钥:
ranker = NvidiaRanker(api_key=Secret.from_token("<your-api-key>"))
用法
单独使用
此示例使用NvidiaRanker 对两个简单文档进行排序。要运行 Ranker,请传入一个query,提供documents,并在top_k 参数中设置要返回的文档数量。
from haystack_integrations.components.rankers.nvidia import NvidiaRanker
from haystack import Document
from haystack.utils import Secret
ranker = NvidiaRanker(
model="nvidia/nv-rerankqa-mistral-4b-v3",
api_key=Secret.from_env_var("NVIDIA_API_KEY"),
)
ranker.warm_up()
query = "What is the capital of Germany?"
documents = [
Document(content="Berlin is the capital of Germany."),
Document(content="The capital of Germany is Berlin."),
Document(content="Germany's capital is Berlin."),
]
result = ranker.run(query, documents, top_k=2)
print(result["documents"])
在 pipeline 中
以下是一个管道的示例,该管道使用InMemoryDocumentStore 基于关键字搜索(使用InMemoryBM25Retriever)设置要排名的文档数量。然后,它使用NvidiaRanker 根据它们与查询的相似性对检索到的文档进行排序。该管道使用 Ranker 的默认设置。
from haystack import Document, Pipeline
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.rankers.nvidia import NvidiaRanker
docs = [
Document(content="Paris is in France"),
Document(content="Berlin is in Germany"),
Document(content="Lyon is in France"),
]
document_store = InMemoryDocumentStore()
document_store.write_documents(docs)
retriever = InMemoryBM25Retriever(document_store=document_store)
ranker = NvidiaRanker()
document_ranker_pipeline = Pipeline()
document_ranker_pipeline.add_component(instance=retriever, name="retriever")
document_ranker_pipeline.add_component(instance=ranker, name="ranker")
document_ranker_pipeline.connect("retriever.documents", "ranker.documents")
query = "Cities in France"
res = document_ranker_pipeline.run(data={"retriever": {"query": query, "top_k": 3}, "ranker": {"query": query, "top_k": 2}})
top_k参数在上面的示例中,检索器和 Ranker 的
top_k值不同。检索器的top_k指定了它返回的文档数量。然后,Ranker 对这些文档进行排序。您可以为 Ranker 设置相同或更小的
top_k值。Ranker 的top_k是它返回的文档数量(如果它是管道中的最后一个组件)或转发到下一个组件的数量。在上面的管道示例中,Ranker 是最后一个组件,因此运行管道时获得的输出是前两个文档,如 Ranker 的top_k.调整
top_k值可以帮助您优化性能。在这种情况下,检索器较小的top_k值意味着 Ranker 需要处理的文档更少,这可以加快管道的运行速度。
更新于 大约 1 年前
