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

Readers (读取器)

接收一个查询和一组文档作为输入,并通过选择文档中的文本片段来返回提取的答案。

模块 extractive

ExtractiveReader

定位并从文档中提取给定查询的答案。

ExtractiveReader 组件执行提取式问答。它独立地为每个可能的答案片段分配一个分数。这解决了其他实现中存在的常见问题,即通过独立地规范化每个文档的答案来使跨文档的比较更加困难。

示例用法

from haystack import Document
from haystack.components.readers import ExtractiveReader

docs = [
    Document(content="Python is a popular programming language"),
    Document(content="python ist eine beliebte Programmiersprache"),
]

reader = ExtractiveReader()
reader.warm_up()

question = "What is a popular programming language?"
result = reader.run(query=question, documents=docs)
assert "Python" in result["answers"][0].data

ExtractiveReader.__init__

def __init__(model: Union[Path, str] = "deepset/roberta-base-squad2-distilled",
             device: Optional[ComponentDevice] = None,
             token: Optional[Secret] = Secret.from_env_var(
                 ["HF_API_TOKEN", "HF_TOKEN"], strict=False),
             top_k: int = 20,
             score_threshold: Optional[float] = None,
             max_seq_length: int = 384,
             stride: int = 128,
             max_batch_size: Optional[int] = None,
             answers_per_seq: Optional[int] = None,
             no_answer: bool = True,
             calibration_factor: float = 0.1,
             overlap_threshold: Optional[float] = 0.01,
             model_kwargs: Optional[dict[str, Any]] = None) -> None

创建 ExtractiveReader 的实例。

参数:

  • model:一个 Hugging Face transformers 问题回答模型。可以是包含模型文件的文件夹路径,也可以是 Hugging Face hub 的标识符。
  • device: 加载模型的设备。如果None,默认设备会自动选择。
  • token:用于从 Hugging Face 下载私有模型的 API 令牌。
  • top_k:每个查询返回的答案数量。即使设置了 score_threshold,也需要此参数。如果将 no_answer 设置为 True(默认值),则会额外返回一个没有文本的答案。
  • score_threshold:仅返回概率分数高于此阈值的答案。
  • max_seq_length:最大令牌数。如果序列超过此长度,则会将其拆分。
  • stride:当序列因超过 max_seq_length 而被拆分时,重叠的令牌数。
  • max_batch_size:一次馈送到模型中的最大样本数。
  • answers_per_seq:每个序列要考虑的答案候选数量。当一个文档由于 max_seq_length 被拆分成多个序列时,这很重要。
  • no_answer:是否返回一个额外的no answer,其文本为空,得分表示其他 top_k 答案不正确的概率。
  • calibration_factor:用于校准概率的因子。
  • overlap_threshold:如果设置此参数,将删除重叠大于给定阈值的重复答案。例如,对于答案“in the river in Maine”和“the river”,我们将删除其中一个答案,因为第二个答案与第一个答案有 100%(1.0)的重叠。但是,对于答案“the river in”和“in Maine”,最大重叠百分比仅为 25%,因此如果此变量设置为 0.24 或更低,则这两个答案都可以保留。如果提供 None,则保留所有答案。
  • model_kwargs:传递给AutoModelForQuestionAnswering.from_pretrained 的其他关键字参数,用于加载中指定的模型model。有关可以传递的 kwargs 的详细信息,请参阅模型的文档。

ExtractiveReader.to_dict

def to_dict() -> dict[str, Any]

将组件序列化为字典。

返回值:

包含序列化数据的字典。

ExtractiveReader.from_dict

@classmethod
def from_dict(cls, data: dict[str, Any]) -> "ExtractiveReader"

从字典反序列化组件。

参数:

  • data: 要反序列化的字典。

返回值:

反序列化后的组件。

ExtractiveReader.warm_up

def warm_up()

Initializes the component.

ExtractiveReader.deduplicate_by_overlap

def deduplicate_by_overlap(
        answers: list[ExtractedAnswer],
        overlap_threshold: Optional[float]) -> list[ExtractedAnswer]

去除重叠的提取答案。

根据答案跨度的重叠程度,去除同一文档中重叠的提取答案。

参数:

  • answers:要去除重复的答案列表。
  • overlap_threshold:如果设置此参数,将删除重叠大于给定阈值的重复答案。例如,对于答案“in the river in Maine”和“the river”,我们将删除其中一个答案,因为第二个答案与第一个答案有 100%(1.0)的重叠。但是,对于答案“the river in”和“in Maine”,最大重叠百分比仅为 25%,因此如果此变量设置为 0.24 或更低,则这两个答案都可以保留。如果提供 None,则保留所有答案。

返回值:

去重后的答案列表。

ExtractiveReader.run

@component.output_types(answers=list[ExtractedAnswer])
def run(query: str,
        documents: list[Document],
        top_k: Optional[int] = None,
        score_threshold: Optional[float] = None,
        max_seq_length: Optional[int] = None,
        stride: Optional[int] = None,
        max_batch_size: Optional[int] = None,
        answers_per_seq: Optional[int] = None,
        no_answer: Optional[bool] = None,
        overlap_threshold: Optional[float] = None)

使用给定的查询,定位并从给定的文档中提取答案。

参数:

  • query: 查询字符串。
  • documents:要在其中搜索查询答案的文档列表。
  • top_k:要返回的最大答案数量。如果将 no_answer 设置为 True(默认值),则会额外返回一个答案。
  • score_threshold:仅返回分数高于此阈值的答案。
  • max_seq_length:最大令牌数。如果序列超过此长度,则会将其拆分。
  • stride:当序列因超过 max_seq_length 而被拆分时,重叠的令牌数。
  • max_batch_size:一次馈送到模型中的最大样本数。
  • answers_per_seq:每个序列要考虑的答案候选数量。当一个文档由于 max_seq_length 被拆分成多个序列时,这很重要。
  • no_answer:是否返回无答案分数。
  • overlap_threshold:如果设置此参数,将删除重叠大于给定阈值的重复答案。例如,对于答案“in the river in Maine”和“the river”,我们将删除其中一个答案,因为第二个答案与第一个答案有 100%(1.0)的重叠。但是,对于答案“the river in”和“in Maine”,最大重叠百分比仅为 25%,因此如果此变量设置为 0.24 或更低,则这两个答案都可以保留。如果提供 None,则保留所有答案。

引发:

  • RuntimeError:如果组件在调用 'warm_up()' 之前没有预热。

返回值:

按(降序)答案分数排序的答案列表。