LLM 课程文档
评估
并获得增强的文档体验
开始使用
评估
对于通过 SFT 或 LoRA SFT 微调的模型,我们应该在标准基准上对其进行评估。作为机器学习工程师,您应该为您感兴趣的目标领域维护一套相关的评估套件。在本页中,我们将介绍一些最常见的基准以及如何使用它们来评估您的模型。我们还将探讨如何为您的特定用例创建自定义基准。
自动基准
自动基准是用于评估语言模型在不同任务和能力方面的标准化工具。虽然它们为理解模型性能提供了有用的起点,但重要的是要认识到它们只是全面评估策略的一部分。
理解自动基准
自动基准通常由带有预定义任务和评估指标的精选数据集组成。这些基准旨在评估模型能力的各个方面,从基本语言理解到复杂推理。使用自动基准的关键优势在于它们的标准化——它们允许对不同模型进行一致的比较并提供可重现的结果。
然而,重要的是要理解基准性能并不总是直接转化为实际效果。一个在学术基准上表现出色的模型,可能仍然会在特定的领域应用或实际用例中遇到困难。
通用知识基准
MMLU(大规模多任务语言理解)测试涵盖科学到人文学科的 57 个主题的知识。虽然全面,但它可能无法反映特定领域所需的专业知识深度。TruthfulQA 评估模型重现常见错误观念的倾向,但它无法捕捉所有形式的错误信息。
推理基准
BBH (Big Bench Hard) 和 GSM8K 专注于复杂的推理任务。BBH 测试逻辑思维和规划,而 GSM8K 专门针对数学问题解决。这些基准有助于评估分析能力,但可能无法捕捉实际场景中所需的细微推理。
语言理解
HELM 提供了一个整体评估框架。HELM 等基准提供关于语言处理能力在常识、世界知识和推理方面的见解。但可能无法完全代表自然对话或特定领域术语的复杂性。
领域特定基准
让我们看看几个专注于数学、编码和聊天等特定领域的基准。
MATH 基准是另一个重要的数学推理评估工具。它包含来自数学竞赛的 12,500 道问题,涵盖代数、几何、数论、计数、概率等。MATH 之所以特别具有挑战性,是因为它需要多步推理、形式数学符号理解以及生成逐步解决方案的能力。与简单的算术任务不同,MATH 问题通常需要复杂的解题策略和数学概念应用。
HumanEval 基准是一个专注于编码的评估数据集,包含 164 个编程问题。该基准测试模型生成功能正确的 Python 代码以解决给定编程任务的能力。HumanEval 之所以特别有价值,是因为它通过实际测试用例执行来评估代码生成能力和功能正确性,而不仅仅是与参考解决方案的表面相似性。问题范围从基本的字符串操作到更复杂的算法和数据结构。
Alpaca Eval 是一个自动化评估框架,旨在评估指令遵循语言模型的质量。它使用 GPT-4 作为评判者,从有帮助性、诚实性和无害性等多个维度评估模型输出。该框架包含一个包含 805 个精心策划的提示的数据集,并且可以根据多个参考模型(如 Claude、GPT-4 等)评估响应。Alpaca Eval 之所以特别有用,是因为它能够在不需要人工标注者的情况下提供一致、可扩展的评估,同时仍然能够捕捉传统指标可能遗漏的模型性能的细微之处。
替代评估方法
许多组织已开发出替代评估方法来解决标准基准的局限性
LLM-as-Judge(以大型语言模型为评判者)
使用一个语言模型来评估另一个模型的输出变得越来越流行。这种方法可以提供比传统指标更细致的反馈,尽管它也有其自身的偏见和局限性。
评估竞技场
像 Chatbot Arena 这样的评估竞技场通过众包反馈为大型语言模型(LLM)评估提供了一种独特的方法。在这些平台上,用户可以在两个 LLM 之间进行匿名“对战”,提出问题并投票选择哪个模型提供了更好的答案。这种方法通过多样化、具有挑战性的问题捕捉真实世界的使用模式和偏好,研究表明众包投票与专家评估之间存在高度一致性。尽管这些平台功能强大,但它们也存在局限性,包括潜在的用户群偏见、倾斜的提示分布以及主要关注实用性而非安全考量。
自定义基准套件
组织通常会开发根据其特定需求和用例量身定制的内部基准套件。这些套件可能包括领域特定知识测试或反映实际部署条件的评估场景。
自定义评估
虽然标准基准提供了有用的基线,但它们不应是您唯一的评估方法。以下是如何制定更全面的方法:
首先使用相关的标准基准来建立基线,并能够与其他模型进行比较。
确定您的用例的具体要求和挑战。您的模型将实际执行哪些任务?哪些类型的错误最具问题性?
开发反映您实际用例的自定义评估数据集。这可能包括:
- 来自您领域的真实用户查询
- 您遇到的常见边缘情况
- 特别具有挑战性场景的示例
考虑实施多层评估策略:
- 用于快速反馈的自动化指标
- 用于细致理解的人工评估
- 针对专业应用的领域专家评审
- 在受控环境中的 A/B 测试
实施自定义评估
在本节中,我们将为我们的微调模型实现评估。我们可以使用 lighteval
在标准基准上评估我们的微调模型,该库内置了各种任务。我们只需要定义要评估的任务和评估参数。
LightEval 任务使用特定格式定义:
{suite}|{task}|{num_few_shot}|{auto_reduce}
参数 | 描述 |
---|---|
套件 | 基准套件(例如,‘mmlu’,‘truthfulqa’) |
任务 | 套件中的特定任务(例如,‘abstract_algebra’) |
num_few_shot | 在提示中包含的示例数量(零样本为 0) |
auto_reduce | 如果提示过长,是否自动减少少量样本(0 或 1) |
示例:"mmlu|abstract_algebra|0|0"
在 MMLU 的抽象代数任务上进行零样本推理评估。
评估管道示例
让我们为我们的微调模型设置一个评估管道。我们将评估模型在与医学领域相关的一组子任务上的表现。
以下是一个使用 Lighteval 和 VLLM 后端对与特定领域相关的自动基准进行评估的完整示例:
lighteval accelerate \
"pretrained=your-model-name" \
"mmlu|anatomy|0|0" \
"mmlu|high_school_biology|0|0" \
"mmlu|high_school_chemistry|0|0" \
"mmlu|professional_medicine|0|0" \
--max_samples 40 \
--batch_size 1 \
--output_path "./results" \
--save_generations true
结果以表格形式显示:
| Task |Version|Metric|Value | |Stderr|
|----------------------------------------|------:|------|-----:|---|-----:|
|all | |acc |0.3333|± |0.1169|
|leaderboard:mmlu:_average:5 | |acc |0.3400|± |0.1121|
|leaderboard:mmlu:anatomy:5 | 0|acc |0.4500|± |0.1141|
|leaderboard:mmlu:high_school_biology:5 | 0|acc |0.1500|± |0.0819|
Lighteval 还包括一个 Python API,用于更详细的评估任务,这对于以更灵活的方式操作结果非常有用。有关更多信息,请查看 Lighteval 文档。
✏️ 试一试! 在 Lighteval 中评估您的微调模型在特定任务上的表现。