文档API 参考📓 教程🧑‍🍳 菜谱🤝 集成💜 Discord🎨 Studio
API 参考

Samplers (采样器)

根据 top-p 采样分数过滤文档。

模块 top_p

TopPSampler

实现基于累积概率分数的文档过滤的 top-p(nucleus)采样。

此组件提供了一种功能,可以通过选择分数位于累积分布的 top 'p' 百分比内的文档来过滤文档列表。这对于关注高概率文档同时根据分配的分数过滤掉不太相关的文档非常有用。

使用示例

from haystack import Document
from haystack.components.samplers import TopPSampler

sampler = TopPSampler(top_p=0.95, score_field="similarity_score")
docs = [
    Document(content="Berlin", meta={"similarity_score": -10.6}),
    Document(content="Belgrade", meta={"similarity_score": -8.9}),
    Document(content="Sarajevo", meta={"similarity_score": -4.6}),
]
output = sampler.run(documents=docs)
docs = output["documents"]
assert len(docs) == 1
assert docs[0].content == "Sarajevo"

TopPSampler.__init__

def __init__(top_p: float = 1.0,
             score_field: Optional[str] = None,
             min_top_k: Optional[int] = None)

创建 TopPSampler 的一个实例。

参数:

  • top_p: 介于 0 和 1 之间的浮点数,表示文档选择的累积概率阈值。值为 1.0 表示不进行过滤(保留所有文档)。
  • score_field: 每个文档元数据中包含分数的字段的名称。如果为 None,则使用默认文档分数字段。
  • min_top_k: 如果指定,则返回的最小文档数。如果 top_p 选择的文档数少于此值,则会添加其他得分最高的文档到选集。

TopPSampler.run

@component.output_types(documents=list[Document])
def run(documents: list[Document], top_p: Optional[float] = None)

使用 top-p 采样根据文档分数过滤文档。

如果指定的 top_p 导致没有文档被选中(尤其是在 top_p 值较低的情况下),则该方法返回得分最高的文档。

参数:

  • documents: 要过滤的 Document 对象列表。
  • top_p: 如果指定,则为覆盖初始化期间设置的累积概率阈值的浮点数。

引发:

  • ValueError: 如果 top_p 值不在 [0, 1] 范围内。

返回值:

一个字典,其中包含以下键

  • documents: 根据 top-p 采样选中的 Document 对象列表。