📢 转载信息
原文作者:Surya Kari, Joel Carlson, Michael Cai, Morteza Ziyadi, Pradeep Natarajan, and Saurabh Sahu
评估大型语言模型(LLM)的性能超越了困惑度或双语评估替补(BLEU)分数等统计指标。对于大多数现实世界的生成式 AI 场景而言,了解模型是否比基线或早期迭代产生更好的输出来至关重要。这对于摘要、内容生成或智能体等应用尤为重要,在这些应用中,主观判断和细微的正确性起着核心作用。
随着组织在生产中深化部署这些模型,我们注意到客户对系统性评估模型质量的需求日益增加,这种评估超越了传统的评估方法。当前的准确性测量和基于规则的评估方法虽然有帮助,但无法完全满足这些细致的评估需求,特别是在任务需要主观判断、上下文理解或与特定业务要求保持一致时。为了弥补这一差距,LLM-as-a-judge(将 LLM 用作裁判)已成为一种有前途的方法,它利用 LLM 的推理能力,以更灵活和可扩展的方式评估其他模型。
今天,我们很高兴地通过 Amazon SageMaker AI 上的 Amazon Nova LLM-as-a-Judge 功能,介绍一种全面的模型评估方法。Amazon SageMaker AI 是一项完全托管的 Amazon Web Services (AWS) 服务,用于大规模构建、训练和部署机器学习 (ML) 模型。Amazon Nova LLM-as-a-Judge 旨在跨模型系列对生成式 AI 输出提供稳健、无偏见的评估。Nova LLM-as-a-Judge 作为 SageMaker AI 上的优化工作流程提供,借助它,您可以在几分钟内开始根据您的特定用例评估模型性能。与许多表现出架构偏见的评估器不同,Nova LLM-as-a-Judge 经过严格验证,保持公正性,并在关键的裁判基准测试中取得了领先性能,同时与人类偏好保持高度一致。凭借其卓越的准确性和最小的偏差,它为可信赖、可用于生产的 LLM 评估设定了新标准。
Nova LLM-as-a-Judge 功能提供模型迭代之间的成对比较,因此您可以自信地对模型改进做出数据驱动的决策。
Nova LLM-as-a-Judge 的训练方式
Nova LLM-as-a-Judge 是通过一个多步骤训练过程构建的,该过程包括监督训练和强化学习阶段,使用了带有人类偏好注释的公共数据集。对于专有组件,多个标注者通过比较同一提示的不同 LLM 响应的配对来独立评估了数千个示例。为验证一致性和公平性,所有注释都经过了严格的质量检查,最终判断经过校准,以反映广泛的人类共识,而不是个人观点。
训练数据被设计为既具有多样性又具有代表性。提示涵盖了广泛的类别,包括现实世界知识、创造力、编码、数学、专业领域和毒性,因此模型可以评估跨越许多现实世界场景的输出。训练数据包括来自 90 多种语言的数据,主要由英语、俄语、中文、德语、日语和意大利语组成。重要的是,一项内部偏见研究评估了 75 个第三方模型的 10,000 多个人类偏好判断,证实 Amazon Nova LLM-as-a-Judge 相对于人类注释仅显示出 3% 的总聚合偏差。尽管在减少系统性偏差方面取得了显著成就,我们仍然建议进行偶尔的抽查,以验证关键的比较。
在下图(请注意:由于您提供的 HTML 中未包含图片描述或说明,此处使用占位符描述)中,您可以了解 Nova LLM-as-a-Judge 在评估 Amazon Nova 输出与来自其他模型的输出时,其偏差与人类偏好的比较情况。在此处,偏差是根据跨越数千个示例的裁判偏好与人类偏好的差异来衡量的。正值表示裁判略微偏爱 Amazon Nova 模型,而负值表示相反。为了量化这些估计的可靠性,我们使用比例差异的标准误差,假设独立二项分布,计算了 95% 的置信区间。

Amazon Nova LLM-as-a-Judge 在评估模型中实现了先进的性能,在各种任务中表现出与人类判断的强烈一致性。例如,它在 JudgeBench 上的准确率为 45%(Meta J1 8B 为 42%),在 PPE 上的准确率为 68%(Meta J1 8B 为 60%)。Meta 的 J1 8B 数据来自 Incentivizing Thinking in LLM-as-a-Judge via Reinforcement Learning。
这些结果凸显了 Amazon Nova LLM-as-a-Judge 在聊天机器人相关评估中的优势,如 PPE 基准测试所示。我们的基准测试遵循当前最佳实践,报告了 JudgeBench、CodeUltraFeedback、Eval Bias 和 LLMBar 上位置交换响应的协调结果,同时对 PPE 使用单次通过结果。
| 模型 | Eval Bias | Judge Bench | LLM Bar | PPE | CodeUltraFeedback |
| Nova LLM-as-a-Judge | 0.76 | 0.45 | 0.67 | 0.68 | 0.64 |
| Meta J1 8B | – | 0.42 | – | 0.60 | – |
| Nova Micro | 0.56 | 0.37 | 0.55 | 0.6 | – |
在本文中,我们将介绍一种使用 SageMaker AI 实现 Amazon Nova LLM-as-a-Judge 评估的简化方法,解释由此产生的指标,并将此过程应用于改进您的生成式 AI 应用程序。
评估工作流程概述
评估过程始于准备一个数据集,其中每个示例都包含一个提示和两个替代的模型输出。JSONL 格式如下所示:
{
"prompt":"Explain photosynthesis.",
"response_A":"Answer A...",
"response_B":"Answer B..."
}
{
"prompt":"Summarize the article.",
"response_A":"Answer A...",
"response_B":"Answer B..."
}
准备好此数据集后,您将使用提供的 SageMaker 评估配方,该配方配置评估策略,指定用作裁判的模型,并定义如 temperature 和 top_p 等推理设置。
评估在 SageMaker 训练作业内部运行,使用预先构建的 Amazon Nova 容器。SageMaker AI 预配计算资源,协调评估,并将输出指标和可视化结果写入 Amazon Simple Storage Service (Amazon S3)。
完成后,您可以下载并分析结果,其中包括偏好分布、胜率和置信区间。
了解 Amazon Nova LLM-as-a-Judge 的工作原理
Amazon Nova LLM-as-a-Judge 使用一种称为二元总体偏好裁判 (binary overall preference judge) 的评估方法。二元总体偏好裁判是一种语言模型并排比较两个输出,选择更好的一个或宣布平局的方法。对于每个示例,它都会产生一个明确的偏好。当您汇总跨许多样本的这些判断时,您会得到胜率和置信区间等指标。此方法利用模型自身的推理能力,以直接、一致的方式评估相关性和清晰度等质量。
- 该裁判模型旨在提供低延迟的总体偏好,适用于不需要细粒度反馈的场景
- 该模型的输出是 [[A>B]] 或 [[B>A]] 之一
- 此模型的主要用例是需要自动化、低延迟、总体成对偏好的情况,例如在训练管道中进行检查点选择的自动化评分
了解 Amazon Nova LLM-as-a-Judge 评估指标
当使用 Amazon Nova LLM-as-a-Judge 框架比较两个语言模型的输出来源时,SageMaker AI 会生成一套全面的定量指标。您可以使用这些指标来评估哪个模型表现更好以及评估的可靠性如何。结果分为三个主要类别:核心偏好指标、统计置信指标和标准误差指标。
核心偏好指标报告了裁判模型偏好每个模型输出的频率。a_scores 指标计算模型 A 被青睐的示例次数,b_scores 计算模型 B 被选为更优的次数。ties 指标捕获了裁判模型对两个响应评级相同或无法确定明确偏好的情况。inference_error 指标计算了由于数据格式错误或内部错误而导致裁判无法生成有效判断的次数。
统计置信指标量化了观察到的偏好反映真实模型质量差异而非随机变化的几率。winrate 报告了在所有有效比较中模型 B 被偏爱的比例。lower_rate 和 upper_rate 定义了这个胜率的 95% 置信区间的下限和上限。例如,胜率为 0.75 且置信区间在 0.60 到 0.85 之间,表明即使考虑到不确定性,模型 B 也持续优于模型 A。score 字段通常与模型 B 的获胜次数相匹配,但也可以针对更复杂的评估策略进行定制。
标准误差指标提供了对每个计数的统计不确定性的估计。这些包括 a_scores_stderr、b_scores_stderr、ties_stderr、inference_error_stderr 和 score_stderr。标准误差值越小,结果越可靠。较大的值可能表明需要额外的评估数据或更一致的提示工程。
解释这些指标需要同时关注观察到的偏好和置信区间:
- 如果
winrate显著高于 0.5 且置信区间不包含 0.5,则表明模型 B 在统计学上优于模型 A。 - 相反,如果
winrate低于 0.5 且置信区间完全低于 0.5,则表明偏好模型 A。 - 当置信区间与 0.5 重叠时,结果不确定,建议进行进一步评估。
inference_error值较高或标准误差较大,表明评估过程中可能存在问题,例如提示格式不一致或样本量不足。
以下是评估运行的示例指标输出:
{
"a_scores": 16.0,
"a_scores_stderr": 0.03,
"b_scores": 10.0,
"b_scores_stderr": 0.09,
"ties": 0.0,
"ties_stderr": 0.0,
"inference_error": 0.0,
"inference_error_stderr": 0.0,
"score": 10.0,
"score_stderr": 0.09,
"winrate": 0.38,
"lower_rate": 0.23,
"upper_rate": 0.56
}
在此示例中,模型 A 被偏爱 16 次,模型 B 被偏爱 10 次,没有平局或推理错误。winrate 为 0.38,表示在 38% 的情况下偏爱模型 B,其 95% 的置信区间范围为 23% 到 56%。由于区间包含 0.5,此结果表明评估不确定,可能需要额外数据来明确哪个模型整体表现更好。
这些指标作为评估过程的一部分自动生成,为比较模型和就部署哪个模型做出数据驱动的决策提供了严格的统计基础。
解决方案概述
本解决方案演示了如何使用 Nova LLM-as-a-Judge 功能在 Amazon SageMaker AI 上评估生成式 AI 模型。提供的 Python 代码指导您完成整个工作流程。
首先,它通过从 SQuAD 中采样问题并从 Qwen2.5 和 Anthropic 的 Claude 3.7 生成候选响应来准备数据集。这些输出保存到一个 JSONL 文件中,其中包含提示和两个响应。
我们使用 bedrock-runtime 客户端通过 Amazon Bedrock 访问了 Anthropic 的 Claude 3.7 Sonnet。我们使用SageMaker 托管的 Hugging Face 端点访问了 Qwen2.5 1.5B。
接下来,一个 PyTorch Estimator 启动一个评估作业,使用 Amazon Nova LLM-as-a-Judge 配方。该作业在如 ml.g5.12xlarge 等 GPU 实例上运行,并生成评估指标,包括胜率、置信区间和偏好计数。结果保存到 Amazon S3 以供分析。
最后,一个可视化函数渲染图表和表格,总结了哪个模型更受青睐、偏好强度如何以及估计的可靠性如何。通过这种端到端的方法,您可以在无需手动标注的情况下评估改进、跟踪回归并就部署生成模型做出数据驱动的决策。
先决条件
在运行 Notebook 之前,您需要完成以下先决条件:
- 为 SageMaker AI 请求以下配额增加。对于此用例,您需要请求至少 1 个 g5.12xlarge 实例。在 Service Quotas 控制台中,请求以下 SageMaker AI 配额:用于训练作业使用的 1 个 G5 实例 (g5.12xlarge)
- (可选)您可以创建一个 Amazon SageMaker Studio 域(参考 使用快速设置启动 Amazon SageMaker AI)以使用上述角色访问 Jupyter 笔记本。(您也可以在本地设置中使用 JupyterLab。)
- 创建一个 AWS Identity and Access Management (IAM) 角色,具有托管策略
AmazonSageMakerFullAccess、AmazonS3FullAccess和AmazonBedrockFullAccess,以便为 SageMaker AI 和 Amazon Bedrock 提供运行示例所需的访问权限。 - 向您的 IAM 角色分配以下策略作为信任关系:
- 创建一个 AWS Identity and Access Management (IAM) 角色,具有托管策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"bedrock.amazonaws.com",
"sagemaker.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
- 克隆包含此部署资源的 GitHub 存储库。该存储库由一个引用训练资产的 Notebook 组成:
git clone https://github.com/aws-samples/amazon-nova-samples.git
cd customization/SageMakerTrainingJobs/Amazon-Nova-LLM-As-A-Judge/
接下来,运行 Notebook Nova Amazon-Nova-LLM-as-a-Judge-Sagemaker-AI.ipynb 以开始在 Amazon SageMaker AI 上使用 Amazon Nova LLM-as-a-Judge 实现。
模型设置
要进行 Amazon Nova LLM-as-a-Judge 评估,您需要生成要比较的候选模型的输出。在此项目中,我们使用了两种不同的方法:在 Amazon SageMaker 上部署 Qwen2.5 1.5B 模型,以及在 Amazon Bedrock 中调用 Anthropic 的 Claude 3.7 Sonnet 模型。首先,我们使用 HuggingFaceModel 部署接口在专用的 SageMaker 端点上部署了 Qwen2.5 1.5B,这是一个开源的多语言语言模型。我们提供了一个便捷的脚本供您调用以部署 Qwen2.5 1.5B 模型:python3 deploy_sm_model.py
部署后,可以使用包装了 SageMaker 预测器 API 的帮助函数执行推理:
# Initialize the predictor once
predictor = HuggingFacePredictor(endpoint_name="qwen25-<endpoint_name_here>")
def generate_with_qwen25(prompt: str, max_tokens: int = 500, temperature: float = 0.9) -> str:
""" Sends a prompt to the deployed Qwen2.5 model on SageMaker and returns the generated response. Args:
prompt (str): The input prompt/question to send to the model.
max_tokens (int): Maximum number of tokens to generate.
temperature (float): Sampling temperature for generation.
Returns:
str: The model-generated text.
"""
response = predictor.predict({ "inputs": prompt,
"parameters": { "max_new_tokens": max_tokens,
"temperature": temperature }
})
return response[0]["generated_text"]
answer = generate_with_qwen25("What is the Grotto at Notre Dame?")
print(answer)
同时,我们将 Anthropic 的 Claude 3.7 Sonnet 模型集成到了 Amazon Bedrock 中。Amazon Bedrock 提供了一个托管的 API 层,用于访问专有基础模型 (FM),而无需管理基础设施。Claude 生成函数使用 bedrock-runtime AWS SDK for Python (Boto3) 客户端,它接受用户提示并返回模型的文本补全:
# Initialize Bedrock client once
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
# (Claude 3.7 Sonnet) model ID via Bedrock
MODEL_ID = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
def generate_with_claude4(prompt: str, max_tokens: int = 512, temperature: float = 0.7, top_p: float = 0.9) -> str:
""" Sends a prompt to the Claude 4-tier model via Amazon Bedrock and returns the generated response. Args:
prompt (str): The user message or input prompt.
max_tokens (int): Maximum number of tokens to generate.
temperature (float): Sampling temperature for generation.
top_p (float): Top-p nucleus sampling.
Returns:
str: The text content generated by Claude.
"""
payload = {
"anthropic_version": "bedrock-2023-05-31",
"messages": [{"role": "user", "content": prompt}],
"max_tokens": max_tokens,
"temperature": temperature,
"top_p": top_p
}
response = bedrock.invoke_model(
modelId=MODEL_ID,
body=json.dumps(payload),
contentType="application/json",
accept="application/json"
)
response_body = json.loads(response['body'].read())
return response_body["content"][0]["text"]
answer = generate_with_claude4("What is the Grotto at Notre Dame?")
print(answer)
当您生成并测试了这两个函数后,就可以继续为 Nova LLM-as-a-Judge 创建评估数据了。
准备数据集
为了创建用于比较 Qwen 和 Claude 模型的真实评估数据集,我们使用了斯坦福问答数据集 (SQuAD),这是一个被广泛采用的自然语言理解基准,根据 CC BY-SA 4.0 许可分发。SQuAD 包含数千个众包的问答对,涵盖了各种维基百科文章。通过对该数据集进行抽样,我们确保了评估提示反映了代表现实世界应用的高质量、事实性问答任务。
我们首先加载了一小部分示例,以保持工作流程的快速和可重现性。具体来说,我们使用 Hugging Face datasets 库从 SQuAD 训练集中下载并加载了前 20 个示例:
from datasets import load_dataset
squad = load_dataset("squad", split="train[:20]")
此命令检索了完整数据集的一个切片,其中包含 20 个条目,具有结构化字段,包括上下文、问题和答案。为了验证内容并检查一个示例,我们打印出了一个示例问题及其基本事实答案:
print(squad[3]["question"])
print(squad[3]["answers"]["text"][0])
对于评估集,我们从该子集中选择了前六个问题:
questions = [squad[i]["question"] for i in range(6)]
生成 Amazon Nova LLM-as-a-Judge 评估数据集
准备好 SQuAD 中的一组评估问题后,我们生成了两个模型的输出来源,并将它们组装成一个结构化数据集,供 Amazon Nova LLM-as-a-Judge 工作流程使用。该数据集是 SageMaker AI 评估配方的核心输入。为此,我们遍历每个问题提示并调用前面定义的两个生成函数:
generate_with_qwen25()用于来自部署在 SageMaker 上的 Qwen2.5 模型的补全generate_with_claude()用于来自 Amazon Bedrock 中 Anthropic Claude 3.7 Sonnet 的补全
对于每个提示,工作流程会尝试从每个模型生成一个响应。如果由于 API 错误、超时或其他问题导致生成调用失败,系统会捕获异常并存储一条明确的错误消息,指示失败原因。这确保了即使存在瞬态错误,评估过程也能顺利进行:
import json
output_path = "llm_judge.jsonl"
with open(output_path, "w") as f:
for q in questions:
try:
response_a = generate_with_qwen25(q)
except Exception as e:
response_a = f"[Qwen2.5 generation failed: {e}]"
try:
response_b = generate_with_claude4(q)
except Exception as e:
response_b = f"[Claude 3.7 generation failed: {e}]"
row = {
"prompt": q,
"response_A": response_a,
"response_B": response_b
}
f.write(json.dumps(row) + "\n")
print(f"JSONL file created at: {output_path}")
此工作流程生成了一个名为 llm_judge.jsonl 的 JSON Lines 文件。每行包含一个结构如下的单个评估记录:
{
"prompt": "What is the capital of France?",
"response_A": "The capital of France is Paris.",
"response_B": "Paris is the capital city of France."
}
然后,将此 llm_judge.jsonl 上传到您预先定义的 S3 存储桶中:
upload_to_s3("llm_judge.jsonl", "s3://<YOUR_BUCKET_NAME>/datasets/byo-datasets-dev/custom-llm-judge/llm_judge.jsonl")
启动 Nova LLM-as-a-Judge 评估作业
准备好数据集并创建评估配方后,最后一步是启动 SageMaker 训练作业,该作业执行 Amazon Nova LLM-as-a-Judge 评估。在此工作流程中,训练作业充当一个完全托管的、自包含的过程,它加载模型、处理数据集,并将评估指标生成到您指定的 Amazon S3 位置。
我们使用 SageMaker Python SDK 中的 PyTorch 估计器类来封装评估运行的配置。估计器定义了计算资源、容器映像、评估配方以及用于存储结果的输出路径:
estimator = PyTorch(
output_path=output_s3_uri,
base_job_name=job_name,
role=role,
instance_type=instance_type,
training_recipe=recipe_path,
sagemaker_session=sagemaker_session,
image_uri=image_uri,
disable_profiler=True,
debugger_hook_config=False,
)
配置好估计器后,使用 fit() 方法启动评估作业。此调用将作业提交到 SageMaker 控制平面,预配计算集群,并开始处理评估数据集:
estimator.fit(inputs={"train": evalInput})
Amazon Nova LLM-as-a-Judge 评估作业的结果
下图说明了 Amazon Nova LLM-as-a-Judge 评估作业的结果。

为了帮助实践者快速解释 Nova LLM-as-a-Judge 评估的结果,我们创建了一个便捷函数,它生成一个单一的、全面的可视化,总结关键指标。这个函数 plot_nova_judge_results 使用 Matplotlib 和 Seaborn 渲染一个包含六个面板的图像,每个面板突出显示评估结果的不同方面。
此函数接收评估作业完成时生成的评估指标字典,并生成以下视觉组件:
- 分数分布条形图 – 显示模型 A 被偏爱了多少次,模型 B 被偏爱了多少次,平局发生了多少次,以及裁判无法产生决策(推理错误)的次数。这提供了对评估决定性的即时了解,以及任一模型是否占主导地位。
- 带 95% 置信区间的胜率 – 绘制模型 B 相对于模型 A 的总体胜率,包括一个误差... [内容被截断]
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区