大自然语言的评估本身就是棘手的问题,因为语言本身就具有多义性。所以评测一个语言模型就具有主观性。对于我们人来说,很容易就知道一篇生成的文本是坏的文本,却很难选出好的文本。此时我们需要近似的能够评估我们自己的模型。这是就诞生了经典的OPENCompass评测。
OpenCompass采取客观评测与主观评测相结合的方法。针对具有确定性答案的能力维度和场景,通过构造丰富完善的评测集,对模型能力进行综合评价。针对体现模型能力的开放式或半开放式的问题、模型安全问题等,采用主客观相结合的评测方式。
整个的工作流程如下图所示:
graph TB
subgraph A[配置]
A1[选择模型] --> A2[选择数据集]
end
subgraph B[推理]
B1[模型从数据集产生输出]
end
subgraph C[评估]
B2[输出与标准答案的匹配度]
end
subgraph D[可视化]
将结果整理成易读表格
end
A==>B
B ==>C
C ==>D
当我们确定了以opencompass为测试对象的时候,我们找到数据集之后根据自己的硬件配置或者计算速度配置好模型的效力,如下图。即可开始进行测试:
--datasets ceval_gen \
--hf-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace 模型路径
--tokenizer-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)
--tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \ # 构建 tokenizer 的参数
--model-kwargs device_map='auto' trust_remote_code=True \ # 构建模型的参数
--max-seq-len 2048 \ # 模型可以接受的最大序列长度
--max-out-len 16 \ # 生成的最大 token 数
--batch-size 4 \ # 批量大小
--num-gpus 1 # 运行模型所需的 GPU 数量
--debug
我们以书生1.0的7B模型为示例,测试后展示测试结果为:
可以看出首先测试的数据集十分的丰富,最后一列的结果也很好。 在测评的过程中发现,整个过程是在线运行的,它沟通huggingface上的模型,然后自己测试对你输出结果。它并非本地的,当然也可以本地运行。