预训练评估
本文介绍大模型预训练阶段的常用评估方法,包括PPL困惑度、开源Benchmark、概率探针和大海捞针测试。
PPL困惑度
困惑度Perplexity是自然语言处理常见的评价指标,可以衡量语言模型的好坏。困惑度越低表示模型对下一个词预测的越准确。
计算方法
困惑度的计算基于交叉熵损失:
其中
评估实践
具体做法是,收集一些预训练没用到的通用知识、数学推理、代码等数据,检测在测试集上的loss变化,正常情况下整体趋势呈下降逐渐稳定。只能同一个模型的PPL对比,因为不同模型的tokenizer压缩率不同,全是字没有词的tokenizer,loss一定是最低的。无论tokenizer压缩率多少,在通用知识上的loss应该能降低到2以下,否则说明训练不充分。
PPL的局限性
- 分词器依赖:不同分词器导致PPL不可直接比较,因为压缩率直接影响token粒度。
- 语义盲区:PPL只衡量token级别的预测能力,无法直接反映语义理解质量。
- 领域偏差:在特定领域上PPL低不代表模型在该领域表现好,可能只是数据分布匹配。
开源BenchMark
常用Benchmark详细说明
| 指标 | 评估内容 | 评估方式 | 说明 |
|---|---|---|---|
| MMLU | 评估LLM在广泛主题领域的理解和推理能力 | 多选题 | 覆盖57个学科,从初中到研究生难度,共约15,000道题 |
| GLUE | 对不同语境下的语言理解能力进行全面评估 | 多任务NLU | 包含句子相似度、自然语言推理、情感分析等9项任务 |
| GSM8K | 测试LLM解决多步数学问题的能力 | 生成式 | 包含8,500道小学到初中水平的数学应用题,需要2-8步推理 |
| MS-MARCO | 测试模型准确理解和响应真实世界查询的能力 | 阅读理解/排序 | 基于真实Bing搜索查询,包含问答和段落排序任务 |
| HHH | 评估模型在交互场景中的道德反应 | 判断题 | 评估Helpful、Harmless、Honest三个维度 |
| HumanEval | 测试根据给定需求生成正确有效的代码 | 代码生成 | 包含164个Python编程问题,需要函数级代码生成能力 |
更多评估维度
| Benchmark | 评估维度 | 适用场景 |
|---|---|---|
| ARC | 科学推理 | 选择题形式的科学知识问答 |
| WinoGrande | 常识推理 | 基于代词消歧的常识理解 |
| PIQA | 物理常识 | 日常物理交互常识 |
| TriviaQA | 知识问答 | 大规模知识问答 |
| HellaSwag | 常识推理 | 常识性的句子续写 |
| MBPP | 代码生成 | 简单Python编程题 |
推荐BenchMark相关链接
- CLiB中文大模型能力评测榜单:https://github.com/jeinlee1991/chinese-llm-benchmark
- 大模型评估平台:https://github.com/open-compass/opencompass
- SuperCLUE中文评估BenchMark:https://arxiv.org/pdf/2307.15020
- 更多BenchMark数据集:https://blog.csdn.net/qq_36803941/article/details/140045494
概率探针
从概率的角度来监控模型的知识能力有没有遗忘或者提升,适用于我们要观察模型的某一项具体能力。观察某个token的概率是否增加或者某个句子的概率是否增加,唯一麻烦的地方是探针测试集往往需要训练者一条一条亲自去构造,而不能批量生成。
探针示例
Prob('北京'|'中国的首都是'),就看一下这个概率值随着pretrain推进是否持续在增大
PPL('天空是蓝色的'),这个句子的ppl是否持续在下降;PPL('天空是绿色的'),这个句子的ppl是否持续在上升
对比探针,PPL('9.9>9.11') < PPL('9.9<9.11') 是否成立
指令follow能力,Prob('{ '|'以json输出')
重点观察的是指标的变化趋势,而不是指标的绝对大小。
探针构建建议
- 覆盖关键能力:探针应覆盖模型需要具备的核心能力,如知识记忆、逻辑推理、指令遵循等。
- 定期更新:随着训练推进,可能需要补充新的探针以监测特定能力的变化。
- 趋势优先:单次探针的绝对值意义不大,重点关注指标随训练步数的变化趋势。
Needle In A Haystack大海捞针
核心思想是在一段长文本("海")中插入一个或多个关键信息(即"针"),然后观察模型是否能够通过自然语言提问的方式准确地找到这些关键信息。主要用于测试模型在复杂上下文或海量数据中精准定位和提取关键信息的能力,考验模型的长文本理解能力、信息检索精度和抗干扰能力。
关键步骤
长文本准备:选择或创建一段长文本(如书籍、论文、新闻合集)。
插入"针":在文本的随机位置插入与文本内容目标关键信息(例如"π的小数点后第1000位是9")。
提问与检索:提问跟针相关的问题,例如"π的小数点后第1000位是什么?"
大海捞针实验的各种形式
单一信息检索任务:评估LLM在长文本中提取单一关键信息的能力,也就是只插入一个针,测试其对广泛叙述中特定细节的精确回忆能力。这对应于原始的大海捞针测试任务设定。
多信息检索任务:探讨LLM从长文本中检索多个相关信息的能力,模拟实际场景中对综合文档的复杂查询。
多信息推理任务:通过提取并利用长文本中的多个关键信息来评估LLM的长文本能力,要求模型对各关键信息片段有综合理解。
祖先追溯挑战:通过设计"亲属关系针",测试LLM处理真实长文本中多层逻辑挑战的能力。通过一系列逻辑推理问题,检验模型对长文本中每个细节的记忆和分析能力,在此任务中,去掉了无关文本的设定,而是将所有文本设计为关键信息,LLM必须综合运用长文本中的所有内容和推理才能准确回答问题。
其他指标
- 幻觉检测:检测LLM是否生成虚假或不准确的信息
- 安全性:评估LLM的输出是否包含偏见、毒性或其他可能的有害内容
- LLM评审:使用LLM本身来评估其输出,例如G-Eval
- 回复相关性:衡量模型输出是否能够准确、全面地回应用户输入
评估最佳实践
评估流程
多维度评估:单一Benchmark无法全面反映模型能力,建议同时使用知识理解(MMLU)、推理(GSM8K)、代码(HumanEval)、长文本(大海捞针)等多个维度的评估。
对照组设计:评估时应设置基线模型作为对照,便于量化相对提升幅度。基线模型可以选择同等规模的开源模型或前一版本的训练产物。
评估集独立性:确保评估数据集与训练数据无重叠,避免数据泄漏导致评估结果虚高。推荐使用动态更新的评估集或私有测试集。
常见陷阱
- 数据泄漏:某些公开Benchmark的答案可能已出现在训练语料中,导致评估结果偏高。
- 评估顺序影响:Few-shot评估时,示例的选择和排列会影响结果,建议取多次评估的平均值。
- 过度拟合评估集:反复在同一批Benchmark上评估并调整模型,可能导致对评估集的过拟合。