与生成型AI相关的风险已经被广泛报道。有害性、偏见、泄漏的个人身份信息和幻觉对组织的声誉产生负面影响,并损害客户的信任。研究表明,偏见和有害性的风险不仅会从预训练的基础模型(FM)转移到特定任务的生成型AI服务上,而且在对增量数据集进行特定任务的FM调优时,会引入新的风险,而且可能会更大。根据不断发展的指南和法规,如ISO 42001和欧盟AI法案,检测和管理这些风险是具有挑战性的。客户必须离开他们的开发环境来使用学术工具和基准测试网站,这需要高度专业化的知识。众多的指标使得过滤出真正与他们的用例相关的指标变得困难。随着新模型的发布和现有模型的微调,这种繁琐的过程经常重复。
Amazon SageMaker Clarify现在为AWS客户提供基础模型(FM)评估能力,这是一组定制的能力,可用于在几分钟内评估和比较任何LLM的模型质量和责任指标。FM评估提供了行业标准科学的具体见解,可以扩展以支持特定于客户的用例。可验证的评估分数涵盖了文本生成、摘要、分类和问答任务,包括客户定义的提示情景和算法。报告通过自然语言解释、可视化和示例,以人类可读的方式全面概述每个评估,使标注人员和数据科学家专注于优化他们的LLM并做出明智的决策。它还与Amazon SageMaker中的机器学习和运营(MLOps)工作流程集成,以自动化和扩展ML生命周期。
什么是FMEval?
通过FM评估,我们引入了FMEval,这是一个开源的LLM评估库,旨在为数据科学家和ML工程师提供评估LLM质量和责任的代码优先体验,同时选择或调整LLM以适应特定的用例。FMEval可以对LLM模型端点或整个生成型AI服务的端点执行评估。FMEval有助于衡量LLM的准确性、稳健性、偏见、有害性和事实知识等评估维度。您可以使用FMEval评估托管在AWS上的LLM,例如Amazon Bedrock、Jumpstart和其他SageMaker模型。您还可以使用它评估托管在第三方模型构建平台(如ChatGPT、HuggingFace和LangChain)上的LLM。这个选项可以让客户将所有LLM评估逻辑集中在一个地方,而不是在多个平台上分散评估投资。
如何开始?您可以在运行工作负载的任何地方直接使用FMEval,作为Python包或通过开源代码库,在GitHub上提供透明,为负责任的AI社区作出贡献。FMEval有意不提供明确的建议,而是提供易于理解的数据和报告,供AWS客户做出决策。FMEval允许您上传自己的提示数据集和算法。核心评估函数evaluate()
可扩展。您可以上传提示数据集,选择并上传评估函数,运行评估作业。结果以多种格式提供,帮助您审查、分析和操作高风险事项,并对适合您用例的正确LLM做出明智的决策。
支持的算法
FMEval提供了12个内置的评估,涵盖了4个不同的任务。由于可能的评估数量可能达到数百个,并且评估领域仍在不断扩展,FMEval基于最新的科学发现和最流行的开源评估进行开发。我们调查了现有的开源评估框架,并以可扩展性为目标设计了FMEval评估API。提出的一组评估并不意味着涵盖LLM使用的每个方面,而是提供开箱即用的流行评估,并支持引入新的评估。
FMEval涵盖了以下四个不同的任务,以及表中显示的五个不同的评估维度:
任务 | 评估维度 |
开放式生成 | 触发定型 |
. | 毒性 |
. | 事实知识 |
. | 语义鲁棒性 |
文本摘要 | 准确度 |
. | 毒性 |
. | 语义鲁棒性 |
问答(Q&A) | 准确度 |
. | 毒性 |
. | 语义鲁棒性 |
分类 | 准确度 |
. | 语义鲁棒性 |
对于每个评估,FMEval 提供了内置的提示数据集,这些数据集是从学术界和开源社区精心策划的,帮助您开始评估。客户将使用内置的数据集来基准测试其模型,并学习如何评估为特定生成式 AI 用例构建的自有数据集。
在接下来的部分中,我们将深入探讨不同的评估:
- 准确度:评估模型在不同任务中的性能,具体评估指标因每个任务而异,例如摘要、问答和分类。
- 摘要:包括三个评估指标:(1) ROUGE-N 分数(一类基于召回率和 F-度量的度量标准,计算参考摘要和模型摘要之间的 N-gram 字词重叠。这些指标对大小写不敏感,值在 0(无匹配)到 1(完全匹配)之间);(2) METEOR 分数(类似于 ROUGE,但通过同义词列表进行词干匹配,例如 “rain” → “drizzle”);(3) BERTScore(来自 BERT 系列的第二个机器学习模型,用于计算句子嵌入并比较它们的余弦相似性。与 ROUGE 和 METEOR 相比,该分数可能考虑到更多的语言灵活性,因为语义上相似的句子可能嵌入到彼此更接近)。
- 问答(Q&A):衡量模型在封闭式和开放式环境中的表现。在开放式 Q&A 中,模型会被呈现一篇包含答案的参考文本(模型的任务是从文本中提取正确的答案)。在封闭式情况下,模型没有提供任何额外的信息,但使用自身的世界知识来回答问题。我们使用数据集,如BoolQ,NaturalQuestions和TriviaQA。该维度报告了三个主要的指标:准确匹配、准近似匹配和基于词汇的 F1 分数,通过将模型预测的答案与给定的真实答案进行不同的比较方式来评估。所有三个分数都是针对整个数据集的平均值。聚合分数是每个指标的 0(最差)到 1(最佳)之间的数字。
- 分类:使用标准分类指标,如分类准确度、精确率、召回率和平衡分类准确度。我们的内置示例任务是情感分类,模型预测用户评论是正面还是负面,我们提供了女装电子商务评论数据集,其中包含 2.3 万条服装评论,提供文本和数值评分。
- 语义鲁棒性:评估模型输出在语义
使用 FMEval 库进行评估
用户可以使用开源的 FMEval 包来实现对他们的 FM 进行评估。FMEval 包带有几个核心结构,这些结构需要用于进行评估任务。这些结构有助于建立数据集、您正在评估的模型以及您正在实施的评估算法。这三个结构都可以继承和适应自定义用例,因此您不必局限于使用提供的内置功能。FMEval 包中定义的核心结构如下:
- Data config:数据配置对象指向您的数据集的位置,无论是本地还是在 S3 路径中。此外,数据配置包含诸如
model_input
、target_output
和model_output
等字段。根据您使用的评估算法,这些字段可能会有所不同。例如,对于事实知识,需要模型输入和目标输出才能正确执行评估算法。可选地,您还可以预先填充模型输出,并且不需要担心配置模型运行器对象,因为推理已经提前完成。 - Model runner:模型运行器是您托管的 FM,并将进行推理。使用 FMEval 包,模型托管是独立的,但是提供了几个内置的模型运行器。例如,提供了本机的 JumpStart、Amazon Bedrock 和 SageMaker Endpoint 模型运行器类。在此处,您可以提供此模型托管信息的元数据,以及您的特定模型所期望的输入格式/模板。如果数据集已经具有模型推理,您不需要配置模型运行器。如果您的模型运行器不是 FMEval 原生提供的,您可以继承基本的模型运行器类,并使用自定义逻辑覆盖预测方法。
- Evaluation algorithm:有关 FMEval 提供的评估算法的详尽列表,请参阅了解模型评估。对于您的评估算法,您可以提供数据配置和模型运行器,或者只提供数据配置(在数据集已经包含模型输出的情况下)。对于每个评估算法,您都有两种方法:
evaluate_sample
和evaluate
。使用evaluate_sample
,您可以在假定模型输出已经提供的情况下评估单个数据点。对于评估任务,您可以迭代您提供的整个数据配置。如果提供了模型推理值,则评估任务将在整个数据集上运行并应用该算法。如果未提供模型输出,则模型运行器将对每个样本执行推理,然后应用评估算法。您还可以通过继承基本的评估算法类并使用所需的算法逻辑覆盖evaluate_sample
和evaluate
方法,来引入自定义的评估算法,类似于自定义模型运行器。
数据配置
对于您的数据配置,您可以指向您的数据集或使用 FMEval 提供的数据集之一。在这个示例中,我们将使用内置的微型数据集,该数据集带有问题和目标答案。在这种情况下,没有预定义的模型输出,因此我们还定义了一个模型运行器,用于对模型输入进行推理。
from fmeval.data_loaders.data_config import DataConfigconfig = DataConfig( dataset_name="tiny_dataset", dataset_uri="tiny_dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="question", target_output_location="answer")
JumpStart 模型运行器
如果您使用 SageMaker JumpStart 托管您的 FM,您可以选择提供现有的端点名称或 JumpStart 模型 ID。当您提供模型 ID 时,FMEval 将为您创建此端点,以进行推理。关键在于定义内容模板,这取决于您的 FM,因此很重要的是将
content_template
配置为反映您的 FM 期望的输入格式。此外,您还必须以 JMESPath 格式配置输出解析,以便 FMEval 能够正确理解。from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunnermodel_id, model_version, = ( "huggingface-llm-falcon-7b-instruct-bf16", "*",)js_model_runner = JumpStartModelRunner( endpoint_name=endpoint_name, model_id=model_id, model_version=model_version, output='[0].generated_text', content_template='{"inputs": $prompt, "parameters": {"do_sample": true, "top_p": 0.9, "temperature": 0.8, "max_new_tokens": 1024}}',)
Bedrock模型运行器
Bedrock模型运行器的设置与JumpStart的模型运行器非常相似。在Bedrock的情况下,没有端点,因此您只需提供模型ID。
model_id = 'anthropic.claude-v2'bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}')
自定义模型运行器
在某些情况下,您可能需要使用自定义模型运行器。例如,如果您拥有来自HuggingFace Hub或OpenAI的模型,您可以继承基础模型运行器类并定义自己的自定义预测方法。这个预测方法是模型运行器执行推理的地方,因此您可以在这里定义自己的自定义代码。例如,在使用OpenAI的GPT 3.5 Turbo的情况下,可以按照以下代码构建自定义模型运行器:
class ChatGPTModelRunner(ModelRunner): url = "https://api.openai.com/v1/chat/completions" def __init__(self, model_config: ChatGPTModelConfig): self.config = model_config def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]: payload = json.dumps({ "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": prompt } ], "temperature": self.config.temperature, "top_p": self.config.top_p, "n": 1, "stream": False, "max_tokens": self.config.max_tokens, "presence_penalty": 0, "frequency_penalty": 0 }) headers = { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': self.config.api_key } response = requests.request("POST", self.url, headers=headers, data=payload) return json.loads(response.text)["choices"][0]["message"]["content"], None
评估
一旦您定义了数据配置并可选地定义了模型运行器对象,您可以配置评估。您可以获取所需的评估算法,本示例将其显示为事实知识。
from fmeval.fmeval import get_eval_algorithmfrom fmeval.eval_algorithms.factual_knowledge import FactualKnowledgeConfig# 评估事实知识eval_algorithm_config = FactualKnowledgeConfig("<OR>")eval_algo = get_eval_algorithm("factual_knowledge")(eval_algorithm_config)
有两种评估方法可供您运行:
evaluate_sample
和evaluate
。当您已经在一个数据点上有模型输出时,可以运行evaluate_sample
,类似于以下代码示例:# 评估您的自定义样本model_output = model_runner.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)
当您在整个数据集上运行评估时,可以运行
evaluate
方法,其中传入您的模型运行器,数据配置和提示模板。提示模板是您可以调整和设计用于测试不同模板的地方。该提示模板被注入到我们在模型运行器中定义的Content_Template
参数中的$prompt值。eval_outputs = eval_algo.evaluate(model=model, dataset_config=dataset_config, prompt_template="$feature", save=True)
有关更多信息和端到端示例,请参阅存储库。
结论
FM评估使客户能够确信他们选择的LLM适用于其使用情况,并且它将负责任地执行。它是Amazon SageMaker中集成的一种可扩展的负责任AI框架,通过允许更轻松地评估和沟通风险,提高了语言模型的透明度。这是增加信任和在AWS上采用LLM的重要一步。
有关FM评估的更多信息,请参阅产品文档,并浏览我们GitHub存储库中提供的其他示例笔记本。您还可以探索操作化大规模LLM评估的方法,如此博客文章所述。
- Data config:数据配置对象指向您的数据集的位置,无论是本地还是在 S3 路径中。此外,数据配置包含诸如