使用该fmeval库运行自动评估 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用该fmeval库运行自动评估

在自己的代码中使用该fmeval库可以最大限度地灵活地自定义工作流程。您可以使用该fmeval库来评估任何数据集LLM,也可以更灵活地使用自定义输入数据集。以下步骤向您展示了如何设置环境以及如何使用fmeval库运行起始工作流程和自定义工作流程。

开始使用该fmeval

您可以在 Studio 笔记本中配置基础模型评估并根据自己的用例对其进行自定义。您的配置既取决于构建基础模型所要预测的任务类型,也取决于您想要如何对其进行评估。FMEval支持开放式生成、文本摘要、问答和分类任务。本节中的步骤向您展示如何设置起始工作流程。此起始工作流程包括设置您的环境并使用带有内置数据集的 Amazon Bedrock 基础模型运行评估算法。 JumpStart 如果您必须将自定义输入数据集和工作流程用于更具体的用例,请参阅使用fmeval库自定义您的工作流程

如果您不想在 Studio 笔记本中运行模型评估,请跳至以下 “开始使用 Studio” 部分中的步骤 11。

先决条件
  • 要在 Studio 界面中运行模型评估,您的 AWS Identity and Access Management (IAM) 角色和任何输入数据集都必须具有正确的权限。如果您没有 SageMaker 域或IAM角色,请按照中的步骤操作Amazon 入门指南 SageMaker

为您的 Amazon S3 存储桶设置权限

创建域和角色后,使用以下步骤添加评估模型所需的权限。

  1. 打开亚马逊 SageMaker 控制台,网址为https://console.aws.amazon.com/sagemaker/

  2. 在导航窗格中,S3进入页面顶部的搜索栏。

  3. 在 “服务” 下选择 S3

  4. 从导航窗格中选择 Buckets

  5. 通用存储桶部分的名称下,选择要用于在控制台中存储模型输入和输出的 S3 存储桶的名称。如果您没有 S3 存储桶,请执行以下操作:

    1. 选择创建存储桶以打开新的创建存储桶页面。

    2. 常规配置部分的AWS 区域下,选择基础模型所在的 AWS 区域。

    3. 在存储桶名称下的输入框中命名您的 S3 存储桶

    4. 接受所有默认选项。

    5. 选择创建存储桶

    6. 通用存储桶部分的名称下,选择您创建的 S3 存储桶的名称。

  6. 选择权限选项卡。

  7. 滚动至窗口底部的跨源资源共享 (CORS) 部分。选择编辑

  8. 要向存储桶添加基础评估权限,请确保输入框中显示以下代码。您也可以将以下内容复制并粘贴到输入框中。

    [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]
  9. 选择 Save changes(保存更改)

向您的IAM策略添加权限
  1. 在页面顶部的搜索栏中输入IAM

  2. 在 “服务” 下,选择 Identity and Access Managemen IAM t ()

  3. 从导航窗格中选择策略

  4. 在搜索栏中输AmazonSageMakerFullAccess入。选择显示的策略旁边的单选按钮。现在可以选择 “操作” 按钮。

  5. 选择 “操作” 旁边的向下箭头。出现两个选项。

  6. 选择 附加

  7. 在显示的IAM列表中,搜索您创建的角色的名称。选中名称旁边的复选框。

  8. 选择附加策略

开始使用 Studio
  1. 在页面顶部的搜索栏中输入SageMaker

  2. 在 “服务” 下,选择 “亚马逊” SageMaker。

  3. 从导航窗格中选择 Studio

  4. 展开 “选择域名” 下的向下箭头后,从 “入门” 部分选择您的域名

  5. 展开 “选择用户个人资料” 下的向下箭头后,从 “入门” 部分中选择您的用户个人资料

  6. 选择 Open Studio 以打开 Studio 的登录页面。

  7. 从导航窗格中选择文件浏览器,然后导航到根目录。

  8. 选择 “创建笔记本”。

  9. 在打开的笔记本环境对话框中,选择数据科学 3.0 图像。

  10. 选定选择

  11. 在您的开发环境中安装该fmeval软件包,如以下代码示例所示:

    !pip install fmeval
    注意

    fmeval库安装到使用该库的环境中 Python 3.10。 有关运行所需要求的更多信息fmeval,请参阅fmeval依赖关系

FMEval使用名为的高级包装器ModelRunner来撰写输入、调用和提取模型中的输出。该fmeval软件包可以评估任何模型LLM,但是配置过程ModelRunner取决于您要评估的模型类型。本节介绍如何ModelRunner为 JumpStart 或 Amazon Bedrock 模型进行配置。如果要使用自定义输入数据集和自定义输入数据集ModelRunner,请参阅使用fmeval库自定义您的工作流程

使用 JumpStart 模型

ModelRunner要使用评估 JumpStart 模型,请创建或提供端点、定义模型和内置数据集、配置和测试ModelRunner

定义 JumpStart 模型并配置 ModelRunner
  1. 通过执行以下任一操作来提供端点:

    • EndpointName为现有 JumpStart端点指定model_id、和model_version

    • model_version为模型指定model_id和,然后创建 JumpStart 端点。

    以下代码示例显示了如何为创建终端节点 Llama 2 foundation model可通过以下方式获得 JumpStart。

    import sagemaker from sagemaker.jumpstart.model import JumpStartModel #JumpStart model and version model_id, model_version = "meta-textgeneration-llama-2-7b-f", "*" my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name # Accept the EULA, and test the endpoint to make sure it can predict. predictor.predict({"inputs": [[{"role":"user", "content": "Hello how are you?"}]]}, custom_attributes='accept_eula=true')

    前面的代码示例提到EULA,它代表 end-use-license-agreement (EULA)。EULA可以在您正在使用的模型的模型卡描述中找到。要使用某些 JumpStart 模型,必须指定accept_eula=true,如上次调用中所示predict。有关的更多信息EULA,请参阅中的 “许可证和模型来源” 部分来源和许可协议范本

    您可以在带有预训练 JumpStart 模型表的内置算法中找到可用模型的列表。

  2. 使用ModelRunner进行配置JumpStartModelRunner,如以下配置示例所示:

    from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunner js_model_runner = JumpStartModelRunner( endpoint_name=endpoint_name, model_id=model_id, model_version=model_version )

    在前面的配置示例中,对endpoint_namemodel_id、和model_version使用与创建终端节点相同的值。

  3. 测试你的ModelRunner. 向您的模型发送示例请求,如以下代码示例所示:

    js_model_runner.predict("What is the capital of London")

使用 Amazon Bedrock 模型

要评估 Amazon Bedrock 模型,您必须定义模型和内置数据集并进行配置ModelRunner

定义 Amazon Bedrock 模型并配置 ModelRunner
  1. 要定义和打印模型详细信息,请使用以下代码示例,了解可通过 Amazon Bedrock 购买的 Titan 模型:

    import boto3 import json bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = "amazon.titan-tg1-large" accept = "application/json" content_type = "application/json" print(bedrock.get_foundation_model(modelIdentifier=modelId).get('modelDetails'))

    在前面的代码示例中,accept参数指定了您要用来评估您的数据的格式LLM。contentType指定请求中输入数据的格式。MIME_TYPE_JSON仅支持 Amazon Bedrock 型号acceptcontentType机型。有关这些参数的更多信息,请参阅InvokeModelWithResponseStream

  2. 要进行配置ModelRunner,请使用BedrockModelRunner,如以下配置示例所示:

    from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='results[0].outputText', content_template='{"inputText": $prompt, "textGenerationConfig": \ {"maxTokenCount": 4096, "stopSequences": [], "temperature": 1.0, "topP": 1.0}}', )

    按如下方式对ModelRunner配置进行参数化。

    • 使用与部署模型时相同的值。model_id

    • output用于指定生成的json响应的格式。例如,如果您LLM提供了响应[{"results": "this is the output"}],则output='results[0].outputText'返回this is the output

    • content_template用于指定您与请求的LLM交互方式。以下配置模板的详细说明仅用于解释前面的配置示例,这不是必需的。

      • 在前面的配置示例中,变量inputText指定了捕获用户发出的请求的提示符。

      • 该变量textGenerationConfig指定如何LLM生成响应,如下所示:

        • 该参数maxTokenCount用于通过限制返回的令牌数量来限制响应的长度LLM。

        • 该参数stopSequences用于指定告诉您LLM停止生成响应的字符序列列表。第一次在输出中遇到任何列出的字符串时,模型输出就会停止。例如,您可以使用回车序列将模型响应限制为一行。

        • 该参数通过限制生成下一个令牌时要考虑的标记集来topP控制随机性。此参数接受介于0.0和之间的值1.0。较高的值topP允许包含更广泛词汇的集合,而较低的值会将标记集限制为更可能的单词。

        • 该参数temperature控制生成文本的随机性,并接受正值。的值越高,temperature指示模型生成更多随机和多样化的响应。较低的值生成的响应更具可预测性。典型范围介temperature0.2和之间2.0

        有关特定 Amazon Bedrock 基础模型参数的更多信息,请参阅基础模型的推理参数

      content_template 参数的格式取决于您支持的输入和参数。LLM例如,Anthropic’s Claude 2 模型可以支持以下内容content_template

      "content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"

      再举一个例子,Falcon 7b 型号可以支持以下内容。content_template

      "content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}"

      最后,测试你的ModelRunner。向您的模型发送示例请求,如以下代码示例所示:

      bedrock_model_runner.predict("What is the capital of London?")

在配置数据和之后ModelRunner,您可以对生成的响应运行评估算法LLM。要查看所有可用评估算法的列表,请运行以下代码:

from fmeval.eval_algo_mapping import EVAL_ALGORITHMS print(EVAL_ALGORITHMS.keys())

每种算法都有评估和evaluate_sample方法。该evaluate方法计算整个数据集的分数。该evaluate_sample方法评估单个实例的分数。

evaluate_sample方法返回EvalScore对象。 EvalScore对象包含模型在评估期间表现的汇总分数。该evaluate_sample方法具有以下可选参数:

  • model_output— 单个请求的模型响应。

  • model_input— 包含对您的模型的请求的提示。

  • target_output— 中包含的提示的预期响应model_input

以下代码示例显示了如何使用evaluate_sample

#Evaluate your custom sample model_output = model_runner.predict("London is the capital of?")[0] eval_algo.evaluate_sample(target_output="UK<OR>England<OR>United Kingdom", model_output=model_output)

evaluate方法具有以下可选参数:

  • modelModelRunner 使用要评估的模型的实例。

  • dataset_config— 数据集配置。如果dataset_config未提供,则使用为此任务配置的所有内置数据集对模型进行评估。

  • prompt_template— 用于生成提示的模板。如果未提供,prompt_template则使用默认提示模板评估您的模型。

  • save— 如果设置为True,则按记录显示的提示响应和分数将保存到文件中。EvalAlgorithmInterface.EVAL_RESULTS_PATH默认值为 False

  • num_records— 从输入数据集中随机抽样以进行评估的记录数。默认值为 300

evaluate算法返回的EvalOutput对象列表可能包括以下内容:

  • eval_name— 评估算法的名称。

    dataset_name-评估算法使用的数据集的名称。

    prompt_template— 用于撰写提示的模板,如果数据集中未提供该参数model_output,则使用该模板。有关更多信息,请参阅 prompt_template配置 JumpStart ModelRunner” 一节中的

    dataset_scores— 在整个数据集中计算得出的汇总分数。

    category_scores— 包含数据集中每个类别的分数的CategoryScore对象列表。

    output_path— 评估输出的本地路径。此输出包含按记录计算的评估分数的即时响应。

    error— 评估任务失败的字符串错误消息。

以下维度可用于模型评估:

  • 准确性

  • 事实知识

  • 提示陈规定型观念

  • 语义稳健性

  • 毒性

准确性

您可以为问答、文本摘要或分类任务运行精度算法。为了适应不同的数据输入类型和问题,每项任务的算法都不同,如下所示:

  • 对于问答任务,请使用QAAccuracyConfig文件运行QAAccuracy算法。

  • 对于文本摘要任务,请使用运行SummarizationAccuracy算法。SummarizationAccuracyConfig

  • 对于分类任务,使用运行ClassificationAccuracy算法ClassificationAccuracyConfig

QAAccuracy算法返回一个EvalOutput对象列表,其中包含每个样本的一个精度分数。要运行问题答案精度算法,请实例化 a QAAccuracygeConfig 并以 or 的None形式传<OR>入。target_output_delimiter问题答案精度算法会将模型生成的响应与已知的响应进行比较。如果您<OR>作为目标分隔符传入,则如果算法生成了答案中用分隔的任何内容,则该算法会将响应评为正确。<OR>如果您将None或一个空字符串作为传递target_output_delimiter,则代码会引发错误。

调用该evaluate方法并传入所需的参数,如以下代码示例所示:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.qa_accuracy import QAAccuracy, QAAccuracyConfig eval_algo = QAAccuracy(QAAccuracyConfig(target_output_delimiter="<OR>"))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

SummarizationAccuracy算法返回包含分数的EvalOutput对象列表 ROUGE-N, MeteorBERTScore。 有关这些分数的更多信息,请参阅中的文本摘要部分。在模型评估作业中使用提示数据集和可用的评估维度 要运行文本摘要精度算法,请实例化 a SummarizationAccuracyConfig 并传入以下内容:

  • 指定类型 ROUGE你想在评估中使用的指标rouge_type。您可以选择 rouge1rouge2rougeL。这些指标将生成的摘要与参考摘要进行比较。ROUGE-1 使用重叠的单字符(一个项目的序列,例如 “the”、“is”)比较生成的摘要和参考摘要。ROUGE-2 使用双组图(由两个序列组成的组,例如 “the large”、“is home”)比较生成的摘要和参考摘要。ROUGE-L 比较最长的匹配单词序列。有关 ROUGE,请参阅 ROUGE: 自动评估摘要的 Package

  • use_stemmer_for_rouge 设置为 TrueFalse。词干器在比较单词之前会删除单词中的词缀。例如,词干器从 “游泳” 和 “游泳” 中移除词缀,这样它们在词干后都是 “游泳” 的。

  • 将 model_type_for_bertscore 设置为要用来计算 a 的模型 BERTScore。 您可以选择 ROBERTA_ MODEL 或更高级的 MICROSOFT_ DEBERTA _ MODEL

最后,调用该evaluate方法并传入所需的参数,如以下代码示例所示:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig(rouge_type="rouge1",model_type_for_bertscore="MICROSOFT_DEBERTA_MODEL")) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

ClassificationAccuracy算法返回一个EvalOutput对象列表,其中包含每个样本的分类精度、精度、召回率和平衡精度分数。有关这些分数的更多信息,请参阅中的分类部分在模型评估作业中使用提示数据集和可用的评估维度 。要运行分类精度算法,请实例化 a ClassificationAccuracyConfig 并将平均策略传递给。multiclass_average_strategy您可以选择micromacrosamplesweighted、或binary。默认值为 micro。然后,将包含您的分类类别的真实标签的列名称的列表传递给 valid_labels。最后,调用该evaluate方法并传入所需的参数,如以下代码示例所示:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.classification_accuracy import ClassificationAccuracy, ClassificationAccuracyConfig eval_algo = ClassificationAccuracy(ClassificationAccuracyConfig(multiclass_average_strategy="samples",valid_labels=["animal_type","plant_type","fungi_type"])) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

事实知识

你可以运行事实知识算法进行开放式生成。要运行事实知识算法,请实例化 a,FactualKnowledgeConfig并可以选择传递一个分隔符字符串(默认情况下为)。<OR>事实知识算法会将模型生成的响应与已知的响应进行比较。如果该算法生成了答案中用分隔符分隔的任何内容,则该算法将该响应评为正确。如果您以 the 的None身份通过target_output_delimiter,则模型必须生成与答案相同的响应才能得分为正确。最后,调用该evaluate方法并传入所需的参数。

事实知识会返回EvalScore物体列表。它们包含有关您的模型编码事实知识的能力的汇总分数,如基础模型评估概述部分所述。分数介于0和之间1,最低分数对应于对现实世界事实的了解较低。

以下代码示例显示了如何LLM使用事实知识算法对您进行评估:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.factual_knowledge import FactualKnowledge, FactualKnowledgeConfig eval_algo = FactualKnowledge(FactualKnowledgeConfig()) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

提示陈规定型观念

你可以运行提示刻板印象算法进行开放式生成。要运行提示刻板印象算法,您DataConfig必须识别输入数据集中包含不那么陈规定型的句子sent_less_input_location和更陈规定型的句子的列。sent_more_output_location有关的更多信息DataConfig,请参阅前面的第 2 节。配置ModelRunner。接下来,调用该evaluate方法并传入所需的参数。

提示刻板印象会返回一个EvalOutput对象列表,其中包含每条输入记录的分数和每种偏见类型的总分数。分数是通过比较陈规定型观念越来越少的句子的概率来计算的。总分报告了模型偏爱陈规定型句子的频率,因为与陈规定型化程度较低的句子相比,模型为陈规定型化程度较低的句子分配的概率更高。分数为0.5表示您的模型没有偏见,或者它更喜欢在相同比率下越来越少的陈规定型句子。分数大于0.5表示您的模型可能会生成更具陈规定型性的响应。分数小于0.5表示您的模型可能会生成不那么陈规定型的响应。

以下代码示例显示了如何LLM使用提示刻板印象算法来评估您的:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.prompt_stereotyping import PromptStereotyping eval_algo = PromptStereotyping() eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

语义稳健性

你可以为任何FMEval任务运行语义稳健性算法,但是你的模型应该是确定性的。确定性模型是指始终为相同的输入生成相同输出的模型。人们通常可以通过在解码过程中设置随机种子来实现确定性。为了适应不同的数据输入类型和问题,每项任务的算法都不同,如下所示:

  • 对于开放式生成、问答或任务分类,请使用GeneralSemanticRobustnessConfig文件运行GeneralSemanticRobustness算法。

  • 要进行文本摘要,请使用SummarizationAccuracySemanticRobustnessConfig文件运行SummarizationAccuracySemanticRobustness算法。

GeneralSemanticRobustness算法返回的EvalScore对象列表包含精度,其值介于两者之间,01量化了受干扰和不受干扰的模型输出之间的差异。要运行通用语义稳健性算法,请实例化 a 并传入 a GeneralSemanticRobustnessConfigperturbation_type您可以选择以下选项之一perturbation_type

  • Butterfinger— 一种通过基于键盘距离的字符交换来模仿拼写错误的扰动。输入给定角色受到干扰的概率。Butterfinger 是的默认值。perturbation_type

  • RandomUpperCase— 一种将一小部分字符更改为大写的扰动。输入从0到的十进制1

  • WhitespaceAddRemove— 将空格字符在非空格字符前面添加为白色的概率。

您还可以指定以下参数:

  • num_perturbations— 每个样本在生成的文本中引入的扰动次数。默认为 5

  • butter_finger_perturbation_prob— 角色受到干扰的概率。仅当 perturbation_typeButterfinger 时使用。默认为 0.1

  • random_uppercase_corrupt_proportion— 要更改为大写的字符的比例。仅当 perturbation_typeRandomUpperCase 时使用。默认为 0.1

  • whitespace_add_prob— 给定空白,表示将其从样本中移除的概率。仅当 perturbation_typeWhitespaceAddRemove 时使用。默认为 0.05

  • whitespace_remove_prob— 给定一个非空白,即在其前面添加一个空白的概率。仅当 perturbation_typeWhitespaceAddRemove 时使用。默认为 0.1

最后,调用该evaluate方法并传入所需的参数,如以下代码示例所示:

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.general_semantic_robustness import GeneralSemanticRobustness, GeneralSemanticRobustnessConfig eval_algo = GeneralSemanticRobustness(GeneralSemanticRobustnessConfig(perturbation_type="RandomUpperCase",num_perturbations=2,random_uppercase_corrupt_proportion=0.3))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

SummarizationAccuracySemanticRobustness算法返回一个EvalScore对象列表,其中包含两者之间的差异(或增量)ROUGE-N, MeteorBERTScore生成的摘要和参考摘要之间的值。有关这些分数的更多信息,请参阅中的文本摘要部分。在模型评估作业中使用提示数据集和可用的评估维度 要运行文本摘要语义稳健性算法,请实例化 a 并传入 a。SummarizationAccuracySemanticRobustnessConfig perturbation_type

您可以选择以下选项之一perturbation_type

  • Butterfinger— 一种通过基于键盘距离的字符交换来模仿拼写错误的扰动。输入给定角色受到干扰的概率。 Butterfinger是的默认值perturbation_type

  • RandomUpperCase— 一种将一小部分字符更改为大写的扰动。输入从0到的十进制1

  • WhitespaceAddRemove— 输入将非空格字符前面的空格字符添加为白色的概率。

您还可以指定以下参数:

  • num_perturbations— 每个样本在生成的文本中引入的扰动次数。默认值为 5

  • butter_finger_perturbation_prob— 角色受到干扰的概率。仅当 perturbation_typeButterfinger 时使用。默认值为 0.1

  • random_uppercase_corrupt_proportion— 要更改为大写的字符的比例。仅当 perturbation_typeRandomUpperCase 时使用。默认值为 0.1

  • whitespace_add_prob— 给定空白,表示将其从样本中移除的概率。仅当 perturbation_typeWhitespaceAddRemove 时使用。默认值为 0.05

  • whitespace_remove_prob— 给定一个非空白,即在其前面添加一个空白的概率。仅在perturbation_typeWhitespaceAddRemove、默认为时使用0.1

  • rouge_type— 将生成的摘要与参考摘要进行比较的指标。指定类型 ROUGE你想在评估中使用的指标rouge_type。您可以选择 rouge1rouge2rougeL。ROUGE-1 使用重叠的单字符(一个项目的序列,例如 “the”、“is”)比较生成的摘要和参考摘要。ROUGE-2 使用双组图(由两个序列组成的组,例如 “the large”、“is home”)比较生成的摘要和参考摘要。ROUGE-L 比较最长的匹配单词序列。有关 ROUGE,请参阅 ROUGE: 自动评估摘要的 Package

  • user_stemmer_for_rouge 设置为 TrueFalse。词干器在比较单词之前会删除单词中的词缀。例如,词干器从 “游泳” 和 “游泳” 中移除词缀,这样它们在词干后都是 “游泳” 的。

  • 设置model_type_for_bertscore为要用来计算的模型 BERTScore。 您可以选择 ROBERTA_ MODEL 或更高级的 MICROSOFT_ DEBERTA _ MODEL

    调用该evaluate方法并传入所需的参数,如以下代码示例所示:

    from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.summarization_accuracy_semantic_robustness import SummarizationAccuracySemanticRobustness, SummarizationAccuracySemanticRobustnessConfig eval_algo = SummarizationAccuracySemanticRobustness(SummarizationAccuracySemanticRobustnessConfig(perturbation_type="Butterfinger",num_perturbations=3,butter_finger_perturbation_prob=0.2))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)

毒性

你可以运行毒性算法进行开放式生成、文本摘要或问题解答。根据任务的不同,有三个不同的类别。

  • 对于开放式生成,请使用ToxicityConfig文件运行毒性算法。

  • 要进行汇总,请使用类Summarization_Toxicity

  • 要回答问题,请使用课堂QAToxicity

毒性算法返回一个或多个EvalScore物体列表(取决于毒性探测器),其分数介于0和之间1。要运行毒性算法,请实例化 a ToxicityConfig 并传入毒性模型,用于评估您的模型对比。model_type您可以为以下选项进行选择model_type

  • unit@@ aryAI detoxify-unbaised 的 “detoxify”,这是一款经过毒性评论分类挑战和毒性分类中拼图意外偏见训练的多标签文本分类器。该模型提供了以下类别的7分数:毒性、严重毒性、淫秽、威胁、侮辱、露骨性行为和身份攻击。

    以下是排毒模型的输出示例:

    EvalScore(name='toxicity', value=0.01936926692724228), EvalScore(name='severe_toxicity', value=3.3755677577573806e-06), EvalScore(name='obscene', value=0.00022437423467636108), EvalScore(name='identity_attack', value=0.0006707844440825284), EvalScore(name='insult', value=0.005559926386922598), EvalScore(name='threat', value=0.00016682750720065087), EvalScore(name='sexual_explicit', value=4.828436431125738e-05)
  • toxigen-Roberta 的 “toxigen”,这是一种基于二进制 oBERTa R 的文本分类器,对数据集进行了微调,其中包含与少数群体有关的具有微 ToxiGen 妙和隐含毒性的句子。13

最后,调用该evaluate方法并传入所需的参数,如以下代码示例所示。

from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.toxicity import Toxicity, ToxicityConfig eval_algo = Toxicity(ToxicityConfig(model_type="detoxify")) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)