评估流和指标

评估流是一种特殊类型的提示流,用于计算指标,以评估运行的输出符合特定标准和目标的程度。 可以创建或自定义针对任务和目标定制的评估流和指标,并使用其评估其他提示流。 本文介绍评估流、如何开发和自定义评估流,以及如何在提示流批处理运行中使用评估流来评估流性能。

了解评估流

提示流是处理输入并生成输出的节点序列。 评估流还使用所需的输入并生成相应的输出,这些输出通常是分数或指标。 评估流与其创作体验和使用情况中的标准流不同。

评估流通常在其测试的运行后运行,通过接收其输出并使用输出来计算分数和指标来测试。 评估流使用提示流 SDK log_metric() 函数记录指标。

评估流的输出是衡量所测试流性能的结果。 评估流可能具有一个聚合节点,该节点会计算测试数据集中要测试的流的总体性能。

后续部分将介绍如何在评估流中定义输入和输出。

输入

评估流通过获取要测试的运行输出来计算批处理运行的指标或分数。 例如,如果所测试的流是一个 QnA 流,该流会根据问题生成答案,则可以将评估输入命名为 answer。 如果所测试的流是将文本分类为类别的分类流,则可以将评估输入命名为 category

可能需要其他输入作为基本事实。 例如,如果要计算分类流的准确度,则需要将数据集的 category 列作为基本事实提供。 如果要计算 QnA 流的准确度,则需要将数据集的 answer 列作为基本事实提供。 可能需要一些其他输入来计算指标,例如 QnA 或检索增强生成 (RAG) 场景中的 questioncontext

可以像定义标准流的输入一样定义评估流的输入。 默认情况下,评估与要测试的运行使用同一数据集。 但如果相应的标签或目标基准真值位于不同的数据集中,则可以轻松切换到该数据集。

输入说明

若要描述计算指标所需的输入,可以添加说明。 在批处理运行提交中映射输入源时,将显示说明。

若要为每个输入添加说明,请在开发评估方法时在输入部分选择“显示说明”,然后输入说明

分类准确性评估屏幕截图,突出显示“隐藏说明”。

若要隐藏输入窗体中的说明,请选择“隐藏说明”

评估输入映射屏幕截图,突出显示答案描述。

输出和指标

评估的输出是显示所测试流性能的结果。 输出通常包含分数等指标,还可能包含用于推理和建议的文本。

输出分数

提示流一次处理一行数据,并生成输出记录。 同样,评估流可以计算每一行数据的分数,因此你可以检查流对每个单个数据点的性能。

可以通过在评估流的输出部分指定每个数据实例的分数,将其记录为评估流输出。 此创作体验与定义标准流输出相同。

显示名称和值的输出部分的屏幕截图。

选择“查看输出”时,可以在“输出”选项卡中查看各个分数,这与查看标准流批处理运行的输出相同。 可以将这些实例级分数追加到测试流的输出。

聚合和指标日志记录

评估流还提供针对运行的总体评估。 为了区分单个输出分数的总体结果,这些总体运行性能值称为“指标”

若要根据单个分数计算总体评估值,请在评估流中的 Python 节点上选中“聚合”复选框,将其转换为“化简”节点。 然后,该节点将以列表的形式接受输入并批量处理。

Python 节点标题的屏幕截图,其中已选中“聚合”复选框。

通过使用聚合,可以计算和处理每个流输出的所有分数,并使用每个分数计算总体结果。 例如,若要计算分类流的准确度,可以计算每个分数输出的准确度,然后计算所有分数输出的平均准确度。 然后,你可以使用 promptflow_sdk.log_metric() 将平均准确度记录为指标。 指标必须为数字,例如 floatint。 不支持字符串类型指标日志记录。

以下代码片段是一个示例,展示通过平均所有数据点的准确度分数 grades 来计算总体准确度。 使用 promptflow_sdk.log_metric() 将总体准确度记录为指标。

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
    # calculate accuracy
    accuracy = round((grades.count("Correct") / len(grades)), 2)
    log_metric("accuracy", accuracy)

    return accuracy

由于在 Python 节点中调用此函数,因此无需在其他地方分配它,并且稍后可以查看指标。 在批处理运行中使用此评估方法后,可以通过在查看输出时选择“指标”选项卡来查看显示总体性能的指标

“指标”选项卡的屏幕截图,其中显示日志指标记录的指标。

开发评估流

若要开发自己的评估流,请在 Azure 机器学习工作室的“提示流”页上选择“创建”。 在“创建新流”页上,可以

  • 在“按类型创建”下的“评估流”卡上选择“创建”。 此选择可提供用于开发新评估方法的模板。

  • 在“浏览库”中选择“评估流”,然后从中选择一个可用的内置流。 选择“查看详细信息”以获取每个流的摘要,然后选择“克隆”以打开和自定义流。 流创建向导可帮助你根据自己的场景修改流。

创建新评估流的不同方法的屏幕截图。

计算每个数据点的分数

评估流计算数据集上运行的流的分数和指标。 评估流的第一步是计算每个单独数据输出的分数。

例如,在内置的分类准确度评估流中,grade 在“成绩”Python 节点中计算,衡量的是每个流生成的输出与相应的基本事实相比的准确度

如果使用评估流模板,可在line_process Python 节点中计算此分数。 还可以将 line_process python 节点替换为大型语言模型 (LLM) 节点,以使用 LLM 计算分数,或使用多个节点执行计算

模板中 line process 节点的屏幕截图。

将此节点的输出指定为评估流的输出,这表示输出就是为每个数据样本计算的分数。 还可以将推理输出为更多信息,这与在标准流中定义输出的体验相同。

计算和记录指标

评估的下一步是计算用于评估运行的总体指标。 在已选择“聚合”选项的 Python 节点中计算指标。 此节点接受上一个计算节点的分数,并将其组织到列表中,然后计算总体值。

如果使用评估模板,则会在“聚合”节点中计算此分数。 以下代码片段显示了聚合节点的模板。


from typing import List
from promptflow import tool

@tool
def aggregate(processed_results: List[str]):
    """
    This tool aggregates the processed result of all lines and log metric.
    :param processed_results: List of the output of line_process node.
    """
    # Add your aggregation logic here
    aggregated_results = {}

    # Log metric
    # from promptflow import log_metric
    # log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])

    return aggregated_results

可以使用自己的聚合逻辑,例如计算分数的平均值、中值或标准偏差。

使用 promptflow.log_metric() 函数记录指标。 可以在单个评估流中记录多个指标。 指标必须为数字 (float/int)。

使用评估流

创建自己的评估流和指标后,可以使用此流来评估标准流的性能。 例如,可以评估 QnA 流以测试其在处理大型数据集时的性能。

  1. 在 Azure 机器学习工作室中,打开要评估的流,然后选择顶部菜单栏中的“评估”

    评估按钮的屏幕截图。

  2. 在“批处理运行和评估”向导中,完成“基本设置”和“批处理运行设置”,加载数据集以测试和配置输入映射。 有关详细信息,请参阅提交批处理运行和评估流

  3. 在“选择评估”步骤中,可以选择一个或多个要运行的自定义评估或内置评估。 “自定义评估”列出了创建、克隆或自定义的所有评估流。 处理同一项目的其他人创建的评估流不会显示在本节中。

    选择自定义评估的屏幕截图。

  4. 在“配置评估”屏幕上,指定评估方法所需的任何输入数据的源。 例如,基本事实列可能来自数据集。 如果评估方法不需要数据集中的数据,则无需选择数据集,也不需要引用输入映射部分中的任何数据集列。

    在“评估输入映射”部分中,可以指示评估所需的输入的源。 如果数据源来自运行输出,则将源设置为 ${run.outputs.[OutputName]} 如果数据来自测试数据集,则将源设置为 ${data.[ColumnName]}。 为数据输入设置的任何说明也会在此处显示。 有关详细信息,请参阅提交批处理运行和评估流

    评估输入映射的屏幕截图。

    重要

    如果评估流具有 LLM 节点或需要连接才能使用凭据或其他密钥,则必须在此屏幕的“连接”部分中输入连接数据才能使用评估流

  5. 选择“查看 + 提交”,然后选择“提交”以运行评估流

  6. 评估流完成后,可以通过选择评估流顶部的“查看批处理运行”>“查看最新的批处理运行输出”来查看实例级分数输出。 从“追加相关结果”下拉列表中选择评估运行,以查看每个数据行的“成绩”

    “输出”选项卡的屏幕截图,其中附加并突出显示了评估结果。