亚马逊AWS官方博客

Amazon SageMaker Clarify 简化基础模型的评估与选择(预览版功能)



很高兴与大家分享,Amazon SageMaker Clarify 现已支持基础模型(FM)评估功能(预览版)。作为数据科学家或机器学习(ML)工程师,您现在可以使用 SageMaker Clarify,依据准确性、稳健性、创造力、事实性知识、偏差和有害性等指标,在几分钟内对 FM 做出评估、比较和选择。此项新功能进一步提升了 SageMaker Clarify 目前对机器学习数据和模型中偏差的检测能力,以及对模型预测结果的解释能力。

无论是 SageMaker JumpStart 中提供的大型语言模型(LLM),还是在 AWS 外训练和托管的模型,使用该项新功能,您可以随时随地展开对 LLM 的自动化评估和人机协同评估。这消除了寻找合适的模型评估工具,并将其集成到开发环境的繁重工作。当您试着在生成式人工智能(AI)用例中采用学术基准时,它还能简化此项工作的复杂性。

使用 SageMaker Clarify 评估 FM
SageMaker Clarify 提供了一个集中的平台,您现在可以根据预定义标准,在模型选择期间和整个模型自定义工作流程中对任何 LLM 做出评估和比较。除了自动化评估,您还可以使用人机协同功能建立人工评审,让自己的员工或由 SageMaker Ground Truth 管理的员工针对有用性、创作意向和风格等较主观的标准做出评估。

要开始进行模型评估,您可以使用精选的提示语数据集,它们专为常见的 LLM 任务量身定制,涵盖开放式文本生成、文本摘要、问答(Q&A)和分类等任务。您还可以使用针对特定用例的自定义提示语数据集和指标,进一步扩展模型评估范围。人机协同评估适用于任何任务和评估指标。每次评估作业结束后,您都会收到一份评估报告,它将以自然语言总结结果,并附上可视化信息和示例。您可以下载所有指标和报告,也可以将模型评估集成到 SageMaker MLOps 工作流程中。

在 SageMaker Studio 中,您可以在左侧菜单的作业下找到模型评估。您也可以直接从 SageMaker JumpStart 中任何 LLM 的模型详细信息页面中选择评估

使用 Amazon SageMaker Clarify 评估基础模型

选择评估模型,建立评估作业。UI 向导将指导您选择自动或人工评估、模型、相关任务、指标、提示语数据集和评审团队。

使用 Amazon SageMaker Clarify 评估基础模型

模型评估作业完成后,您可以在评估报告中查看结果。

使用 Amazon SageMaker Clarify 评估基础模型

除 UI 之外,您还可以使用 Jupyter 笔记本示例作为起点,它们将逐步指导您在 SageMaker 中以编程方式执行模型评估。

使用 FMEval 开源库随时随地评估模型
您可以使用 FMEval 开源库随时随地评估模型(包括在 AWS 外训练和托管的模型)。以下示例演示了如何使用该库,通过扩展 ModelRunner 类评估自定义模型。

在这个演示中,我选择了 Hugging Face 模型中心的 GPT-2,并自定义了 HFModelConfig 以及 HuggingFaceCausalLLMModelRunner 类,该类适用于 Hugging Face 模型中心的因果解码器模型(如 GPT-2)。您也可以在 FMEval GitHub 存储库中找到该示例。

!pip install fmeval

# ModelRunners 调用 FM
from amazon_fmeval.model_runners.model_runner import ModelRunner

# 针对自定义模型的额外导入
import warnings
from dataclasses import dataclass
from typing import Tuple, Optional
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

@dataclass
class HFModelConfig:
    model_name: str
    max_new_tokens: int
    normalize_probabilities: bool = False
    seed: int = 0
    remove_prompt_from_generated_text: bool = True

class HuggingFaceCausalLLMModelRunner(ModelRunner):
    def __init__(self, model_config: HFModelConfig):
        self.config = model_config
        self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name)
        self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name)

    def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]:
        input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
        generations = self.model.generate(
            **input_ids,
            max_new_tokens=self.config.max_new_tokens,
            pad_token_id=self.tokenizer.eos_token_id,
        )
        generation_contains_input = (
            input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]]
        ).all()
        if self.config.remove_prompt_from_generated_text and not generation_contains_input:
            warnings.warn(
                "Your model does not return the prompt as part of its generations. "
                "`remove_prompt_from_generated_text` does nothing."
            )
        if self.config.remove_prompt_from_generated_text and generation_contains_input:
            output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0]
        else:
            output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0]

        with torch.inference_mode():
            input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"]
            model_output = self.model(input_ids, labels=input_ids)
            probability = -model_output[0].item()

        return output, probability

接下来,使用模型信息创建 HFModelConfigHuggingFaceCausalLLMModelRunner 的实例。

hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32)
model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)

然后,选择并配置评估算法。

# 我们来评估 FM 的事实性知识
from amazon_fmeval.fmeval import get_eval_algorithm
from amazon_fmeval.eval_algorithms.factual_knowledge import FactualKnowledgeConfig

eval_algorithm_config = FactualKnowledgeConfig("<OR>")
eval_algorithm = get_eval_algorithm("factual_knowledge", eval_algorithm_config)

我们先用一个示例进行测试。评估得分以百分比的形式表示事实性正确回答的比例。

model_output = model.predict("London is the capital of")[0]
print(model_output)

eval_algo.evaluate_sample(
    target_output="UK<OR>England<OR>United Kingdom",
	model_output=model_output
)
the UK, and the UK is the largest producer of food in the world.

The UK is the world's largest producer of food in the world.
[EvalScore(name='factual_knowledge', value=1)]

尽管这个回答不算完美,但它确实包含“UK(英国)”。

接下来,您可以使用内置数据集评估 FM,或界定自定义数据集。如果要使用自定义评估数据集,请创建 DataConfig 的实例:

config = DataConfig(
    dataset_name="my_custom_dataset",
    dataset_uri="dataset.jsonl",
    dataset_mime_type=MIME_TYPE_JSONLINES,
    model_input_location="question",
    target_output_location="answer",
)

eval_output = eval_algorithm.evaluate(
    model=model,
    dataset_config=config,
    prompt_template="$feature", #将 $feature 替换为数据集中的输入值 
    save=True
)

评估结果将返回整个数据集的综合评估分数,以及针对每个模型输入的详细结果,这些结果存储在本地输出路径中。

申请试用预览版
Amazon SageMaker Clarify 的 FM 评估功能公开预览版现已在以下 AWS 区域推出:美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(新加坡)、亚太地区(东京)、欧洲地区(法兰克福)和欧洲地区(爱尔兰)。FMEval 开源库 已在 GitHub 上线。要了解更多信息,请访问 Amazon SageMaker Clarify

开始使用
登录 AWS 管理控制台,立即开始使用 SageMaker Clarify 评估您的 FM!

— Antje