评估之模型评估,本篇博客尝试进行OpenCompass的进阶操作,进行更难更全面的评估。
OpenCompass支持很多自定义操作,无论是模型的选择还是用于评估的数据集都支持自定义,上一篇博客中进行了简单的评估,本篇博客的目标着眼于自定义模型,自定义数据集,尝试进行数据污染评估,大海捞针实验评估。
自定义模型
OpenCompass的自定义操作都依赖于配置文件,配置文件都为py文件,OpenCompass提供了很多可以直接使用的py文件,一个配置文件中要同时包含 datasets
和 models
字段。
自定义模型需要找到指定模型的路径。
from opencompass.models import HuggingFaceCausalLM
models = [
dict(
type=HuggingFaceCausalLM,
# 以下参数为 `HuggingFaceCausalLM` 的初始化参数
path='/hy-tmp/7B21/merged',
tokenizer_path='/hy-tmp/7B21/merged',
tokenizer_kwargs=dict(padding_side='left', truncation_side='left'),
max_seq_len=2048,
)
]
自定义数据集
导入相应的数据集
from mmengine.config import read_base
with read_base():
from .datasets.ceval.ceval_clean_ppl import ceval_datasets # 有污染标记的 ceval 数据集
from .summarizers.contamination import ceval_summarizer as summarizer # 输出格式整理
datasets = [*ceval_datasets]
其中的 summarizer字段用于生成最后结果的可视化展示。
数据污染评估
数据污染 是指本应用在下游测试任务重的数据出现在了大语言模型 (LLM) 的训练数据中,从而导致在下游任务 (例如,摘要、自然语言推理、文本分类) 上指标虚高,无法反映模型真实泛化能力的现象。评估方式主要有以下两种:
基于自建同分布数据的污染数据标注
from mmengine.config import read_base
with read_base():
from .datasets.gsm8k_contamination.gsm8k_contamination_ppl_ecdd22 import gsm8k_datasets # 包含训练、测试、参考集
datasets = [*gsm8k_datasets]
models = [
dict(
type=HuggingFaceCausalLM,
# 以下参数为 `HuggingFaceCausalLM` 的初始化参数
path='/hy-tmp/7B21/merged',
tokenizer_path='/hy-tmp/7B21/merged',
tokenizer_kwargs=dict(padding_side='left', truncation_side='left'),
max_seq_len=2048,
)
]
评测任务的程序入口为 run.py
,使用方法如下:
python run.py configs/data_pollution.py
得到结果部分如下:
dataset version metric mode internlm-7b-hf qwen-7b-hf yi-6b-hf chatglm3-6b-base-hf qwen-14b-hf baichuan2-13b-base-hf internlm-20b-hf aquila2-34b-hf ...
--------------- --------- ----------- ------- ---------------- ------------ ---------- --------------------- ------------- ----------------------- ----------------- ---------------- ...
gsm8k-train-ppl 0b8e46 average_ppl unknown 1.5 0.78 1.37 1.16 0.5 0.76 1.41 0.78 ...
gsm8k-test-ppl 0b8e46 average_ppl unknown 1.56 1.33 1.42 1.3 1.15 1.13 1.52 1.16 ...
gsm8k-ref-ppl f729ba average_ppl unknown 1.55 1.2 1.43 1.35 1.27 1.19 1.47 1.35 ...
基于经典预训练集的污染数据标注
这部分的评估和上面过程相似,但是需要对summarizer字段进行引用和修改,但是下载的OpenCompass对这部分有所确实,导致评估难以进行,以失败告终。
大海捞针实验评估
大海捞针测试(灵感来自NeedleInAHaystack)是一种评估方法,它通过在长文本中随机插入关键信息,形成大型语言模型(LLM)的Prompt。该测试旨在检测大型模型是否能从长文本中提取出这些关键信息,从而评估模型处理长文本信息提取的能力,这可以反映LLM对长文本的理解基础能力。
该实验使用给定的数据集对特定的模型进行评估,但是在评估过程中,执行很慢,并且不断报错缺失模组,最终失败。这里仅展示其他模型成功的案例 。