ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 OpenCompass 中使用 JudgeLLM 大模型裁判进行客观评测

在 OpenCompass 中使用 JudgeLLM 大模型裁判进行客观评测 模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载客观评测通常以标准答案为准但模型输出常常因指令遵循能力差异或后处理函数不完善而无法被正确抽取比对。本指南介绍 OpenCompass 如何借鉴主观评测思路在预测完成后引入大模型作为 JudgeLLM 评价模型用 LLM-as-a-Judge 的方式判定模型回答与标准答案的一致性并以 MATH 数据集 Llama3 系列模型为例给出完整可运行的配置与源码级解读。读完本文你将掌握在 OpenCompass 中为任意基于GenInferencer的客观数据集搭建推理 大模型裁判打分全流程的能力。为什么客观评测需要 JudgeLLM常规客观评测依赖标准答案作为参考评测链路通常是模型生成预测 → 后处理抽取答案 → 与标准答案比对。但在实际应用中存在两类误差来源模型的指令遵循能力差异模型输出可能夹带推理过程、思考痕迹、多余修饰语导致最终答案无法被规则函数稳定抽取后处理函数不完善基于正则或字符串匹配的后处理对答案格式分数、小数、等价代数式、单位换算等非常敏感容易出现抽错了或比对错了的情况。因此客观评测的分数并不完全准确。为解决这一问题OpenCompass 参照主观评测Subjective Evaluation的思路在预测完成后引入 JudgeLLM 作为评价模型让大模型判断模型回答与标准答案是否一致——这正是 LLM-as-a-Judge 范式在客观题场景的应用该研究方向最初由 Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena 等工作提出。当前 OpenCompass 仓库内支持的所有模型Hugging Face 开源模型、API 模型等都可以直接作为 JudgeLLM 调用无需额外注册专用 JudgeLLM 也在计划支持范围内。这意味着你既可以用一个更强的大模型来评判一个较弱模型的输出也可以使用 API 模型充当裁判。目前已支持的 JudgeLLM 直接评测数据集OpenCompass 已提供开箱即用的 JudgeLLM 客观评测配置目前文档中明确列出并可直接评测的数据集为MATHHendrycks 等人发布的数学推理评测集包含代数、几何、数论等难度分级的竞赛级数学题此外从仓库配置文件可以看到 MATH 相关的 JudgeLLM 评测配置还有多条演进版本例如 math_0shot_llm_judge_gen_393424.py、math_500_llmjudge_gen_6ff468.py、math_llm_judge_gen_56606f.py 等它们分别对应 0-shot、MATH-500 子集与不同评测模板GenericLLMEvaluator 版可作为进阶参考。评测流程总览自定义 JudgeLLM 客观评测的完整流程分为两步推理阶段使用 API 模型或开源模型对数据集问题生成预测答案裁判评估阶段使用选定的评价模型JudgeLLM对模型预测 vs 标准答案的一致性进行评估并打分。整个流程由 OpenCompass 的配置驱动推理阶段复用常规的SizePartitioner LocalRunner OpenICLInferTask评估阶段则复用主观评测的任务体系SubjectiveSizePartitioner SubjectiveEvalTask最终由AllObjSummarizer汇总分数。第一步构建评测配置以 MATH 为例下面是对 MATH 数据集进行 JudgeLLM 评测的完整配置骨架评测模型为Llama3-8b-instructJudgeLLM 为Llama3-70b-instruct。完整可运行的版本见 examples/eval_math_llm_judge.py以下为带详细注释的讲解版。导入模块与基础配置from mmengine.config import read_base with read_base(): from opencompass.configs.models.hf_llama.hf_llama3_8b_instruct import models as hf_llama3_8b_instruct_model # noqa: F401, F403 from opencompass.configs.models.hf_llama.hf_llama3_70b_instruct import models as hf_llama3_70b_instruct_model # noqa: F401, F403 from opencompass.configs.datasets.math.math_llm_judge import math_datasets # noqa: F401, F403 from opencompass.datasets import math_judement_preprocess from opencompass.openicl.icl_evaluator import LMEvaluator from opencompass.openicl.icl_prompt_template import PromptTemplate from opencompass.partitioners import NaivePartitioner, SizePartitioner from opencompass.partitioners.sub_naive import SubjectiveNaivePartitioner from opencompass.partitioners.sub_size import SubjectiveSizePartitioner from opencompass.runners import LocalRunner, SlurmSequentialRunner from opencompass.summarizers import AllObjSummarizer from opencompass.tasks import OpenICLInferTask from opencompass.tasks.subjective_eval import SubjectiveEvalTask其中被read_base引入的两个模型配置分别来自 hf_llama3_8b_instruct.py 与 hf_llama3_70b_instruct.py两者都使用HuggingFacewithChatTemplate类型关键参数包括max_out_len1024、batch_size8以及stop_words[|end_of_text|, |eot_id|]区别在于 70B 模型run_cfg指定num_gpus48B 模型仅需 1 块 GPU——这是推理/裁判两个阶段资源规划的参考基准。裁判 Prompt 设置JudgeLLM 默认采用[Yes]或[No]作为回答。在 MATH 数据集中评测模板如下该模板源自 OpenAI simple-evals 的 math_eval 设计核心是判断两个数学表达式是否等价eng_obj_prompt Look at the following two expressions (answers to a math problem) and judge whether they are equivalent. Only perform trivial simplifications Examples: Expression 1: $2x3$ Expression 2: $32x$ [Yes] Expression 1: 3/2 Expression 2: 1.5 [Yes] Expression 1: $x^22x1$ Expression 2: $y^22y1$ [No] Expression 1: $x^22x1$ Expression 2: $(x1)^2$ [Yes] Expression 1: 3245/5 Expression 2: 649 [No] (these are actually equal, dont mark them equivalent if you need to do nontrivial simplifications) Expression 1: 2/(-3) Expression 2: -2/3 [Yes] (trivial simplifications are allowed) Expression 1: 72 degrees Expression 2: 72 [Yes] (give benefit of the doubt to units) Expression 1: 64 Expression 2: 64 square feet [Yes] (give benefit of the doubt to units) Expression 1: 64 Expression 2: [No] (only mark as equivalent if both expressions are nonempty) --- YOUR TASK Respond with only [Yes] or [No] (without quotes). Do not include a rationale. Expression 1: {obj_gold} Expression 2: {prediction} 这段 Prompt 通过 8 组精心构造的 few-shot 示例教会 JudgeLLM 区分平凡化简允许与非平凡化简不允许并规定只输出[Yes]/[No]、不输出理由。模板中的两个占位符{obj_gold}标准答案与{prediction}模型预测会在运行时被填充是 JudgeLLM 客观评测 Prompt 的核心约定。若你希望裁判模型给出其他格式的输出如[correct]/[incorrect]需要同步修改下方AllObjSummarizer的解析逻辑。推理阶段配置# 需要评测的模型 models [*hf_llama3_8b_instruct_model] # 评价模型JudgeLLM judge_models hf_llama3_70b_instruct_model eng_datasets [*math_datasets] chn_datasets [] datasets eng_datasets chn_datasets for d in eng_datasets: d[eval_cfg] dict( evaluatordict( typeLMEvaluator, # 如果你需要在判断之前预处理模型预测 # 你可以在这里指定pred_postprocessor函数 pred_postprocessordict(typemath_judement_preprocess), prompt_templatedict( typePromptTemplate, templatedict(round[ dict( roleHUMAN, prompteng_obj_prompt ), ]), ), ), pred_roleBOT, ) infer dict( partitionerdict(typeSizePartitioner, max_task_size40000), runnerdict( typeLocalRunner, max_num_workers256, taskdict(typeOpenICLInferTask)), )要点说明LMEvaluator是 JudgeLLM 客观评测的评估器其完整实现在 opencompass/openicl/icl_evaluator/lm_evaluator.pypred_postprocessor指定裁判打分前的模型预测预处理函数。这里使用的math_judement_preprocess定义在 opencompass/datasets/math.py 中实现上直接调用extract_answer从模型输出中抽取最终答案再交给 JudgeLLM 比对避免模型输出中的冗长推理干扰裁判判断pred_roleBOT声明被评测输出来自模型的助手BOT角色供后续任务读取预测时对齐对话轮次推理阶段沿用常规SizePartitionermax_task_size40000表示按数据集规模切分任务LocalRunner的max_num_workers256控制并行推理的并发数。裁判评估阶段配置eval dict( partitionerdict( typeSubjectiveSizePartitioner, max_task_size80000, modesinglescore, modelsmodels, judge_modelsjudge_models, ), runnerdict(typeLocalRunner, max_num_workers16, taskdict(typeSubjectiveEvalTask)), ) summarizer dict( typeAllObjSummarizer ) # 输出文件夹 work_dir outputs/obj_all/要点说明评估阶段复用主观评测体系SubjectiveSizePartitioner实现见 opencompass/partitioners/sub_size.py按数据集大小切分裁判任务其基类SubjectiveNaivePartitioner会把多个模型 裁判模型组合压入同一任务支持models、judge_models、base_models、compare_models、meta_judge_model等参数modesinglescore表示单模型打分模式裁判对每个预测单独给出对/错。从源码可见模型组合模式还支持allpair两两对比与m2nbase 与 compare 模型笛卡尔积配对等它们服务于主观对比评测而客观 JudgeLLM 评测使用 singlescore 即可SubjectiveEvalTask实现见 opencompass/tasks/subjective_eval.py负责加载第一阶段产生的 predictions 文件读取其中的prediction字段将预测与标准答案按 Prompt 模板拼装后交给 judge 模型生成判定并把判定结果写入results目录若已有结果文件存在任务会自动跳过断点续跑能力AllObjSummarizer实现见 opencompass/summarizers/subjective/all_obj.py负责汇总所有裁判结果。其内部post_process_allobj使用正则(?i)\[(incorrect|correct|正确|错误|Yes|No)\]从裁判回复中抽取判定命中correct/正确/yes记 1 分、incorrect/错误/no记 0 分最终按模型聚合平均分并输出 CSV 表格。LMEvaluator 裁判打分原理源码解读LMEvaluator.score()是裁判打分的关键入口从 lm_evaluator.py 的实现可以梳理出以下内部机制输入归一化当传入的predictions是 dict单模型打分时预测被包装为[predictions[model_preds]]列表当传入的是 list多模型对比时会调用order_preds_and_record_references处理模型顺序与参考答案记录构造裁判数据集score 会把预测与标准答案写入数据集新列其中第一组预测对应键prediction标准答案对应键obj_gold这正是 Prompt 中两个占位符的数据来源同时自动统计每个预测的英文单词数与中文字符数*_en_word_count/*_cn_word_count供下游分析使用调用裁判模型LMEvaluator.__init__内部通过build_model_from_cfg(model_cfgjudge_cfg)构建裁判模型并使用GenInferencerZeroRetriever对拼接好的裁判 Prompt 做生成式推理结果落盘裁判的原始回复保存在指定输出路径score()最后通过mmengine.load读取并返回若配置了dict_postprocessor还会做进一步后处理如统计正确率。LMEvaluator构造函数支持的全部参数包括prompt_template裁判 Prompt 模板、judge_cfg裁判模型配置、output_path预测输出路径、meta_review_prompt_template元裁判模板用于两层评审、pack_all_predictions多轮对话场景是否打包全部轮次一次评判、dataset_cfg、pred_postprocessor预测预处理、dict_postprocessor结果后处理、keep_predictions是否将预测保存在 references 中供后处理器使用与multi_eval同一预测使用多组 Prompt 多次评估。第二步启动评测并输出评测结果配置就绪后在仓库根目录执行python run.py eval_math_llm_judge.py该命令会依次执行两轮评测第一轮推理用 Llama3-8b-instruct 对 MATH 数据集逐题生成预测答案第二轮裁判用 Llama3-70b-instruct 作为 JudgeLLM逐条判断预测答案 vs 标准答案是否等价并打分。对应的输出产物分别保存在产物路径模型预测结果outputs/obj_all/.../timestamp/predictions/xxmodel/xxx.jsonJudgeLLM 评测回复outputs/obj_all/.../timestamp/results/xxmodel/xxx.json评测报告outputs/obj_all/.../timestamp/summary/timestamp/xxx.csv其中 CSV 报告由AllObjSummarizer生成格式为每个被评测模型一行、总分为一列的聚合表格对应 all_obj.py 中get_capability_results的写入逻辑终端也会以 prettytable 形式直接打印汇总结果。评测结果示例官方文档给出了一组采用Llama3-8b-instruct 作为被评测模型、Llama3-70b-instruct 作为裁判对 MATH 数据集的评测对照结果ModelJudgeLLM EvaluationNaive Evaluationllama-3-8b-instruct27.727.8可以看到JudgeLLM 评测得分27.7与传统朴素评测27.8基本吻合说明在 MATH 这类格式敏感的数据集上大模型裁判能够给出与规则化比对高度一致的结论同时具备更强的容错性——当后处理规则无法处理自由格式答案时JudgeLLM 依然可以完成等价性判断。补充基于 GenericLLMEvaluator 的另一种配置范式除了文档主推的LMEvaluator范式仓库中的 math_llm_judge_gen_56606f.py 提供了另一种基于GenericLLMEvaluator的实现可作为对比参考。该配置在math_eval_cfg中使用GenericLLMEvaluator而非LMEvaluatorPrompt 采用GRADER_TEMPLATE要求裁判以A: CORRECT/B: INCORRECT的字母形式作答并包含Original Question、Gold Target、Predicted Answer三段结构化输入通过dict_postprocessordict(typegeneric_llmjudge_postprocess)解析裁判输出并计算得分。两种范式分别对应以 LMEvaluator 内嵌于 eval_cfg与以数据集配置形式声明完整评测链两种组织方式用户可根据扩展需求选择。仓库中math_0shot_llm_judge_gen_393424.py、math_500_llmjudge_gen_6ff468.py等配置均属于后一范式的演进。自定义 JudgeLLM 数据集扩展提示OpenCompass 目前支持大部分采用GenInferencer的数据集进行此类评测。要将自定义数据集接入 JudgeLLM 客观评测只需在现有数据集配置的基础上保持原有reader_cfg与infer_cfg不变确保推理阶段能产出预测为每个数据集覆盖eval_cfg将evaluator.type替换为LMEvaluator传入裁判 Prompt 模板、可选的pred_postprocessor若你的答案需要先抽取/规范化以及pred_role在eval段中通过SubjectiveSizePartitioner的modesinglescore同时传入models被评测模型列表与judge_models裁判模型列表并按数据规模调整max_task_size与max_num_workers最后按需调整裁判输出解析如果 Prompt 约定裁判输出[Yes]/[No]或[correct]/[incorrect]、[正确]/[错误]AllObjSummarizer的post_process_allobj已内置对这几类标记的解析无需额外编写汇总逻辑。完整可复制运行的示例位于 examples/eval_math_llm_judge.py文档版配置见 docs/zh_cn/advanced_guides/objective_judgelm_evaluation.md。赞分享模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载相关推荐GitHub5203分钟彻底告别GitHub访问卡顿与图片加载失败的终极方案GitHub5203分钟彻底告别GitHub访问卡顿与图片加载失败的终极方案 你是否曾因GitHub页面加载缓慢而烦躁是否遇到过项目图片无法显示、代码仓库无模型评测人工智能大模型AI 评测CloudCLI 应用图标 SVG 转 PNG 全流程指南多尺寸 PWA 图标生成与转换实战CloudCLI 应用图标 SVG 转 PNG 全流程指南多尺寸 PWA 图标生成与转换实战 本篇指南以 CloudCLIClaude Code UI仓库模型评测人工智能大模型AI 评测OpenCompass大模型评测框架全面解析OpenCompass大模型评测框架全面解析 一、OpenCompass项目概述 OpenCompass是一个专业的大模型评测框架专注于语言大模型和多模态大模模型评测人工智能大模型AI 评测上一篇lm-evaluation-harness 中的 NollySenti 情感分类任务尼日利亚五语电影评论基准的配置与实现解析下一篇用 Rube MCP 在 Codex 中自动化 Gleap 反馈工作流awesome-codex-skills 实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表