MT-Bench:多轮对话能力与 LLM-as-Judge 评判
MT-Bench 多轮对话能力评估教程
什么是 MT-Bench?
MT-Bench 是一套用于衡量大语言模型(LLM)多轮对话能力的基准测试,由 LMSYS 组织提出。它同时引入 LLM-as-Judge(用大模型当裁判)的评判方式,用 GPT-4 等强劲模型自动打分,大幅降低人工评估成本。
与常见的单轮评测(如 MMLU、HellaSwag)不同,MT-Bench 专门考察模型在连续对话中的表现——记住上下文、追问、解释、修正、拒绝不当请求等真实交互中必需的能力。
为什么需要多轮对话评估?
实际用户与模型交流很少只问一个问题就结束。多轮对话场景要求模型具备:
- 上下文追踪:能记住之前说过的话,并准确引用。
- 指代消解:理解“它”“那个方法”“刚才说的”等代词和省略。
- 话题延续与收敛:既能展开讨论,也能在用户转移话题时平滑切换。
- 指令跟随与约束:持续遵守扮演角色、格式限制、安全规范等要求。
仅靠单轮问答分数,很难判断一个模型是否能在真实聊天场景中保持稳定、连贯和有用。
MT-Bench 数据集结构
MT-Bench 包含 80 个高质量多轮对话问题,分为 8 个类别:
| 类别 | 示例任务 | 轮次(典型) |
|---|---|---|
| 写作 | 邮件润色、故事创作 | 2 轮 |
| 角色扮演 | 模拟历史人物、客服对话 | 2 轮 |
| 知识提取 | 根据长文档回答问题 | 2 轮 |
| 推理 | 数学证明、逻辑推断 | 2 轮 |
| 编码 | 写代码、debug、解释代码 | 2 轮 |
| 数学 | 公式推导、应用题 | 2 轮 |
| 管理 | 计划制定、优先级排序 | 2 轮 |
| 安全 | 越狱尝试、恶意请求应对 | 2 轮 |
每个问题都由人类专家编写,设计成必然需要前一轮信息才能正确回答第二轮的形式。例如:
- 第一轮:“帮我写一封给经理的请假邮件。”
- 第二轮:“能否把语气变得更正式一些,并且加上我提到的医生证明一节?”
第二问直接引用第一问中的“医生证明”,模型必须记住上下文才能处理。
评估方法:LLM-as-Judge 详解
MT-Bench 的核心创新是 LLM-as-Judge 自动打分。流程如下:
- 让待评估模型生成两轮回答。
- 将完整对话(用户两轮提问 + 模型两轮回答)交给一个 评判模型(通常用 GPT-4)。
- 评判模型依据几条标准,给出 1-10 分的综合评分,并附上简短理由。
评分提示词大约长这样(简化版):
请以公正裁判的身份评估以下对话中 AI 助手的回答质量。
从 1(很差)到 10(优秀)进行打分。
关注有帮助性、相关性、准确性和细节程度。
【对话开始】
User: 第一轮问题
AI: 第一轮回答
User: 第二轮问题
AI: 第二轮回答
【对话结束】
请给出评分和简短解释。
评判模型会考量:
- 是否准确理解了第一轮的背景。
- 第二轮回答是否连贯地与第一轮衔接。
- 回答内容的质量、细节和安全性。
最终每道题得到一个分数,再按类别、整体平均,形成最终得分。
为什么 LLM-as-Judge 有效?
- 接近人类偏好:GPT-4 等强模型在评估对话质量上与人类评审评分高度相关(Spearman 相关系数 > 0.8)。
- 低成本可复现:相比雇人打分,自动评判速度快、费用低,结果可复现。
- 尺度对齐:提示词设计可引导评判模型关注多轮特性,而非单轮独立评价。
评判局限性
- 位置偏差:评判模型可能偏向先出现的回答(顺序影响)。
- 长度偏差:稍长的回答可能不公正地获得更高分。
- 风格偏好:评判模型可能倾向于符合自己训练分布的表达方式。
- 自我强化:如果用与被测模型同系列的模型当裁判,可能产生偏好。
如何运行 MT-Bench 评估
多数实现基于 FastChat 框架(LMSYS 开源)。准备工作:
步骤 1:安装 FastChat
pip install fschat
步骤 2:准备好待测模型
可以是本地部署的模型,也可以是云端 API。通过 FastChat 的模型注册机制接入。
步骤 3:生成回答
使用 gen_api_answer.py 或 gen_model_answer.py 批量生成 MT-Bench 问题的回答。
python -m fastchat.llm_judge.gen_model_answer \
--model-path [您的模型] \
--model-id [模型代号] \
--bench-name mt_bench
此脚本会读取 data/mt_bench/question.jsonl 中的问题,逐条送入模型,保存回答到一个 JSON 文件。
步骤 4:运行 LLM 裁判打分
调用 GPT-4 评判(也可以使用其他强模型):
export OPENAI_API_KEY=您的密钥
python -m fastchat.llm_judge.gen_judgment \
--model-list [模型代号1] [模型代号2] ... \
--parallel 4 \
--bench-name mt_bench
脚本会自动进行两两对比或单独打分模式。输出包含评分、评判理由、回合级评价。
步骤 5:查看结果
使用 show_result.py 生成表格:
python -m fastchat.llm_judge.show_result --bench-name mt_bench
你将看到类似下面的结果(示意):
########## MT-Bench ##########
Model Score
--- -----
gpt-4 8.99
claude-v1 7.94
vicuna-13b-v1.3 7.12
alpaca-13b 5.34
还可按类别查看细分得分,定位模型短板。
解读评估结果
- 整体平均分:反映模型综合多轮对话能力,通常 7 分以上已属较好表现。
- 类别得分:分析写作、编码、推理等能力是否失衡。
- 评判理由:阅读裁判给出的文字解释,了解模型在哪些地方丢分(如“未引用上一轮提到的时间”“格式错误”)。
示例:某个模型写作类别 8.2 分,但安全类别仅 4.5 分,说明它容易在危险的第二问上妥协,需要针对性安全微调。
手动评估与多轮评估的补充
尽管 LLM-as-Judge 很方便,但为了充分验证,尤其对于发布级模型,建议结合:
- 人工抽查:抽取少量对话进行人工打分,校准自动评分可信度。
- 对抗性多轮测试:设计故意误导、陷阱式追问,评估鲁棒性。
- 用户偏好平台:像 Chatbot Arena 那样的匿名投票,真实反映大众审美。
MT-Bench 的价值在于提供一个标准化、低成本、高相关性的多轮对话标尺,极大加速了对齐和选型流程。
最佳实践
- 采用 GPT-4 作为默认裁判:现有研究证明它与人类评判相关性最高。若成本敏感可选 GPT-3.5,但偏差略大。
- 固定评判温度:生成评判理由时使用
temperature=0保证可复现。 - 避免评判模型与被测模型冲突:不要用被测模型自己评判自己,也不要使用相同基座模型。
- 关注方差:同一模型在不同运行中可能有微小波动,可多次评判取平均。
- 结合单轮基准:MT-Bench 不代表一切,应配合 MMLU、HumanEval 等使用,获得完整能力画像。
MT-Bench 的出现让多轮对话评估从昂贵的人工实验走向自动化,让更多团队有能力科学地迭代对话模型。掌握这套方法,你将能更精准地定位产品模型的弱点,并有针对性地改进。