HuggingFaceTEIRanker
使用此组件通过 Text Embeddings Inference (TEI) API 端点,根据文档与查询的相似性对文档进行排名。
| pipeline 中的最常见位置 | 在查询管道中,紧随返回文档列表的组件之后,例如 Retriever |
| 必需的初始化变量 | “url”: TEI 重排序服务的基 URL(例如,“https://api.example.com")。 |
| 强制运行变量 | “query”: 查询字符串 “documents”: 文档对象列表 |
| 输出变量 | “documents”: 分组的文档列表 |
| API 参考 | Rankers (排序器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/rankers/hugging_face_tei.py |
概述
HuggingFaceTEIRanker 根据与指定查询的语义相关性对文档进行排名。
您可以使用以下任一 Text Embeddings Inference (TEI) API 端点:
您还可以指定top_k 参数来设置要返回的文档的最大数量。
根据您的 TEI 服务器配置,您可能还需要 Hugging Face token 进行授权。您可以通过设置HF_API_TOKEN 或HF_TOKEN 环境变量,或使用 Haystack 的 Secret management 来设置。
用法
单独使用
您可以使用HuggingFaceTEIRanker 在管道之外,根据您的查询对文档进行排序。
此示例使用HuggingFaceTEIRanker 对两个简单文档进行排名。要运行 Ranker,请传递一个查询,提供文档,并在 top_k 参数中设置要返回的文档数量。top_k 参数中设置要返回的文档数量。
from haystack import Document
from haystack.components.rankers import HuggingFaceTEIRanker
from haystack.utils import Secret
reranker = HuggingFaceTEIRanker(
url="https://:8080",
top_k=5,
timeout=30,
token=Secret.from_token("my_api_token")
)
docs = [Document(content="The capital of France is Paris"), Document(content="The capital of Germany is Berlin")]
result = reranker.run(query="What is the capital of France?", documents=docs)
ranked_docs = result["documents"]
print(ranked_docs)
>> {'documents': [Document(id=..., content: 'the capital of France is Paris', score: 0.9979767),
>> Document(id=..., content: 'the capital of Germany is Berlin', score: 0.13982213)]}
在 pipeline 中
HuggingFaceTEIRanker 在查询管道中最有效,因为它是在 Retriever 之后使用的。
以下是一个管道的示例,该管道使用InMemoryDocumentStore 基于关键字搜索(使用InMemoryBM25Retriever)设置要排名的文档数量。然后,它使用HuggingFaceTEIRanker 根据检索到的文档与查询的相似性对它们进行排名。该管道使用 Ranker 的默认设置。
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.components.rankers import HuggingFaceTEIRanker
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 = HuggingFaceTEIRanker(url="https://:8080")
ranker.warm_up()
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"
document_ranker_pipeline.run(data={"retriever": {"query": query, "top_k": 3},
"ranker": {"query": query, "top_k": 2}})
更新于 5 个月前
