Skip to main content

如何定义汇总赋值器

某些指标只能在整个实验级别定义,而不是在实验的单个运行中定义。 例如,您可能希望计算数据集中所有示例的评估目标的总体通过率或 f1 分数。 这些称为summary_evaluators.

基本示例

在这里,我们将计算 f1 分数,它是 precision 和 recall 的组合。

这种指标只能根据我们实验中的所有示例进行计算,因此我们的计算器会获取一个输出列表和一个reference_outputs列表。

def f1_score_summary_evaluator(outputs: list[dict], reference_outputs: list[dict]) -> dict:
true_positives = 0
false_positives = 0
false_negatives = 0
for output_dict, reference_output_dict in zip(outputs, reference_outputs):
output = output_dict["class"]
reference_output = reference_output_dict["class"]
if output == "Toxic" and reference_output == "Toxic":
true_positives += 1
elif output == "Toxic" and reference_output == "Not toxic":
false_positives += 1
elif output == "Not toxic" and reference_output == "Toxic":
false_negatives += 1

if true_positives == 0:
return {"key": "f1_score", "score": 0.0}

precision = true_positives / (true_positives + false_positives)
recall = true_positives / (true_positives + false_negatives)
f1_score = 2 * (precision * recall) / (precision + recall)
return {"key": "f1_score", "score": f1_score}

然后,您可以将此计算器传递给evaluate方法如下:

from langsmith import Client

ls_client = Client()
dataset = ls_client.clone_public_dataset(
"https://smith.langchain.com/public/3d6831e6-1680-4c88-94df-618c8e01fc55/d"
)

def bad_classifier(inputs: dict) -> dict:
return {"class": "Not toxic"}

def correct(outputs: dict, reference_outputs: dict) -> bool:
"""Row-level correctness evaluator."""
return outputs["class"] == reference_outputs["label"]

results = ls_client.evaluate(
bad_classified,
data=dataset,
evaluators=[correct],
summary_evaluators=[pass_50],
)

在 LangSmith UI 中,您将显示汇总评估员的分数以及相应的键。

摘要评估器 args

摘要计算器函数必须具有特定的参数名称。它们可以采用以下参数的任何子集:

  • inputs: list[dict]:与数据集中的单个示例对应的输入列表。
  • outputs: list[dict]:每个实验对给定输入生成的 dict 输出的列表。
  • reference_outputs/referenceOutputs: list[dict]:与示例关联的参考输出列表(如果可用)。
  • runs: list[Run]:给定示例的两个实验生成的完整 Run 对象的列表。如果您需要访问有关每次运行的中间步骤或元数据,请使用此选项。
  • examples: list[Example]:所有数据集示例对象,包括示例输入、输出(如果可用)和 metdata(如果可用)。

汇总赋值器输出

汇总评估器应返回以下类型之一:

Python 和 JS/TS

  • dict:形式为{"score": ..., "name": ...}允许您传递数字或布尔分数和量度名称。

目前仅限 Python

  • int | float | bool:这被解释为一个可以平均、排序等的连续量度。函数名称用作度量的名称。

这个页面有帮助吗?


您可以在 GitHub 上留下详细的反馈。