支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


AI 大模型评测难?OpenCompass 这个‘自动跑分神器’来破局!

发布日期:2025-04-13 10:51:39 浏览次数: 1586 作者:AI悠悠
推荐语

AI大模型评测的新突破,OpenCompass让复杂评估变得简单。
核心内容:
1. 大模型评估指标的必要性及其应用场景
2. OpenCompass支持的主要评估指标及配置方法
3. 开源大模型评估数据集的介绍及选择指南

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

一、为什么需要大模型评估指标?

生成式大模型,比如 ChatGPT、QWen、Claude 等,会输出各种文本(比如写作、对话、摘要、代码等)。我们需要有方法来判断这些输出到底“行不行”、“好不好”、“能不能用”

想象下面这些场景: 

场景
评估目的
微调模型后
看模型是不是比之前更聪明了
多个模型对比
看哪个模型回答更好
训练参数调整后
看模型是不是更稳定、更准确
模型上线前
确保输出没有胡说八道、歧视、敏感信息等
学术论文发表
有量化的指标才能说明效果进步了

评估指标的作用,就是帮我们有标准、有数据、有依据地判断大模型的生成结果是不是靠谱的。

它们像考试的评分标准,有了它们我们才能说“这个模型考了90分,那个只考了70分”。市面上几乎所有的大模型都会发布评估测试数据。如下是千问官方发布的Qwen2.7-72B的大模型评估。

Qwen2.5-72B Base Model Performance

二、生成式大模型的评估指标

OpenCompass支持以下主要评估指标,覆盖生成式大模型的多样化需求:

  • 准确率(Accuracy):用于选择题或分类任务,通过比对生成结果与标准答案计算正确率。在OpenCompass中通过metric=accuracy配置

  • 困惑度(Perplexity, PPL):衡量模型对候选答案的预测能力,适用于选择题评估。需使用ppl类型的数据集配置(如ceval_ppl)

  • 生成质量(GEN):通过文本生成结果提取答案,需结合后处理脚本解析输出。使用gen类型的数据集(如ceval_gen),配置metric=gen并指定后处理规则

  • ROUGE/LCS:用于文本生成任务的相似度评估,需安装rouge==1.0.1依赖,并在数据配置中设置metric=rouge

  • 条件对数概率(CLP):结合上下文计算答案的条件概率,适用于复杂推理任务,需在模型配置中启用use_logprob=True


三、主流开源大模型评估数据集

数据集列表

开源的大模型评估数据集有很多种,OpenCompass内置超过70个数据集,覆盖五大能力维度:

  • 知识类:C-Eval(中文考试题)、CMMLU(多语言知识问答)、MMLU(英文多选题)。

  • 推理类:GSM8K(数学推理)、BBH(复杂推理链)。

  • 语言类:CLUE(中文理解)、AFQMC(语义相似度)。

  • 代码类:HumanEval(代码生成)、MBPP(编程问题)。

  • 多模态类:MMBench(图像理解)、SEED-Bench(多模态问答)。


数据集区别与选择

评估范式差异:

  • _gen后缀数据集:生成式评估,需后处理提取答案(如ceval_gen)

  • _ppl后缀数据集:困惑度评估,直接比对选项概率(如ceval_ppl)


领域覆盖:

  • C-Eval:侧重中文STEM和社会科学知识,包含1.3万道选择题

  • LawBench:法律领域专项评估,需额外克隆仓库并配置路径


四、什么是OpenCompass?

OpenCompass 是一个开源项目,旨在为机器学习和自然语言处理领域提供多功能、易于使用的工具和框架。其中包含的多个开源模型和开源数据集(BenchMarks),方便进行模型的效果评测。

OpenCompass 的主要特点包括开源可复现、全面的能力维度、丰富的模型支持、分布式高效评测、多样化评测范式以及灵活化拓展。基于高质量、多层次的能力体系和工具链,OpenCompass 创新了多项能力评测方法,并构建了一套高质量的中英文双语评测基准,涵盖语言与理解、常识与逻辑推理、数学计算与应用、多编程语言代码能力、智能体、创作与对话等多个方面,能够实现对大模型真实能力的全面诊断。

官网:https://opencompass.org.cn/

github地址:

    https://github.com/open-compass/opencompass/blob/main/README_zh-CN.md

    官方文档:

      https://opencompass.readthedocs.io/zh-cn/latest/get_started/installation.html


      五、安装OpenCompass

      安装OpenCompass 过程

      1、使用Conda准备 OpenCompass 运行环境:python建议选择3.10版本。

        conda create --name opencompass python=3.10 -yconda activate opencompass

        2、安装 OpenCompass,建议从源代码构建它

          git clone https://github.com/open-compass/opencompass opencompasscd opencompasspip install -e .


          下载数据集

          OpenCompass 支持的数据集主要包括三个部分:

           (1)Huggingface 数据集: Huggingface Dataset 提供了大量的数据集,这部分数据集运行时会自动下载。

          (2)ModelScope 数据集:ModelScope OpenCompass Dataset 支持从 ModelScope 自动下载数据集。要启用此功能,请设置环境变量:export DATASET_SOURCE=ModelScope,可用的数据集包括(来源于 OpenCompassData-core.zip):

            humaneval, triviaqa, commonsenseqa, tydiqa, strategyqa, cmmlu, lambada, piqa, ceval, math, LCSTS, Xsum, winogrande, openbookqa, AGIEval, gsm8k, nq, race, siqa, mbpp, mmlu, hellaswag, ARC, BBH, xstory_cloze, summedits, GAOKAO-BENCH, OCNLI, cmnli

            (3)自建以及第三方数据集:OpenCompass 还提供了一些第三方数据集及自建中文数据集。运行以下命令手动下载解压。

            在 OpenCompass 项目根目录下运行下面命令,将数据集准备至 ${OpenCompass}/data 目录下:

              wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zipunzip OpenCompassData-core-20240207.zip

              一般来说我们只要下载这个数据集就够用了。

              如果需要使用 OpenCompass 提供的更加完整的数据集 (~500M),可以使用下述命令进行下载和解压:

                wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-complete-20240207.zipunzip OpenCompassData-complete-20240207.zipcd ./datafind . -name "*.zip" -exec unzip "{}" \;

                两个 .zip 中所含数据集列表如此处所示。

                六、评估任务

                在 OpenCompass 中,每个评估任务由待评估的模型和数据集组成。评估的入口点是 run.py。用户可以通过命令行或配置文件选择要测试的模型和数据集。

                1、命令行-自定义HF模型

                对于 HuggingFace 模型,用户可以通过命令行直接设置模型参数,无需额外的配置文件。例如,对于 对话模型 Qwen1.5-4B-Chat 和基座模型Qwen/Qwen2.5-1.5B,您可以使用以下命令进行评估:

                 对于对话模型

                  python run.py \    --datasets demo_gsm8k_chat_gen demo_math_chat_gen \    --hf-type chat \    --hf-path /root/autodl-tmp/llm/Qwen/Qwen1.5-4B-Chat \    --debug

                     对于基座模型

                    python run.py \    --datasets demo_gsm8k_base_gen demo_math_base_gen \    --hf-type base \    --hf-path /root/autodl-tmp/llm/Qwen/Qwen2.5-1.5B \    --debug

                    对话模型相比于基座模型,其名称上会多chat,instruct等额外文字描述,而基座模型的名称仅包含“模型名称+版本+参数”。

                    请注意,通过这种方式(命令行-自定义HF模型),OpenCompass 一次只评估一个模型,而其他方式可以一次评估多个模型。

                    参数说明 

                    命令行参数

                    描述

                    样例数值

                    --hf-type

                    HuggingFace 模型类型,可选值为 chat 或 base

                    chat

                    --hf-path

                    HuggingFace 模型路径

                    internlm/internlm2-chat-1_8b

                    --model-kwargs

                    构建模型的参数

                    device_map=’auto’

                    --tokenizer-path

                    HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)

                    internlm/internlm2-chat-1_8b

                    --tokenizer-kwargs

                    构建 tokenizer 的参数

                    padding_side=’left’ truncation=’left’ trust_remote_code=True

                    --generation-kwargs

                    生成的参数

                    do_sample=True top_k=50 top_p=0.95

                    --max-seq-len

                    模型可以接受的最大序列长度

                    2048

                    --max-out-len

                    生成的最大 token 数

                    100

                    --min-out-len

                    生成的最小 token 数

                    1

                    --batch-size

                    批量大小

                    64

                    --hf-num-gpus

                    运行一个模型实例所需的 GPU 数量

                    1

                    --stop-words

                    停用词列表

                    ‘<|im_end|>’ ‘<|im_start|>’

                    --pad-token-id

                    填充 token 的 ID

                    0

                    --peft-path

                    (例如) LoRA 模型的路径

                    internlm/internlm2-chat-1_8b

                    --peft-kwargs

                    (例如) 构建 LoRA 模型的参数

                    trust_remote_code=True

                    训练结果可以在控制台看到,OpenCompass也会将结果保存文件里,路径在根目录的outputs下,日期的目录-summary。

                    结果的精度得分是百分制,分数越高越好。

                    2、命令行

                     用户可以使用 --models 和 --datasets 结合想测试的模型和数据集。这种一次可以跑多个模型。

                    模型和数据集的配置文件预存于 configs/models 和 configs/datasets 中。用户可以使用 tools/list_configs.py 查看或过滤当前可用的模型和数据集配置。

                      # 列出所有配置python tools/list_configs.py# 列出与llama和mmlu相关的所有配置python tools/list_configs.py llama mmlu

                      (1)修改配置文件

                      在评估之前,需要修改大模型配置文件,比如Qwen1.5-4B-Chat大模型,需要修改这个文件

                        opencompass/opencompass/configs/models/qwen/hf_qwen1_5_4b_chat.py
                        • 将path路径改为本地正确的路径地址;

                        • batch_size默认为8,若GPU显存性能较差,可以调整小点;

                        • run_cfg中的num_gpus表示使用运行一个模型实例所需的 GPU 数量,必须小于服务器显卡数量

                        我们再修改个大模型Qwen2.5-1.5B-Instruct的配置文件,便于后续测试。

                        (2)找大模型名称

                         命令中 models 后跟着大模型的名称,该名称需要使用OpenCompass定义的名称,找的方法有有2种,可以根据配置文件的名称(不带py),也可以通过命令搜索,我们使用的是hf_qwen,则如下命令:

                          python tools/list_configs.py hf_qwen

                          可以找到对应的模型名称:hf_qwen1_5_4b_chat 和 hf_qwen2_5_1_5b_instruct。

                          (3)运行评测命令

                            	python run.py \    --models hf_qwen1_5_4b_chat hf_qwen2_5_1_5b_instruct \    --datasets demo_gsm8k_chat_gen demo_math_chat_gen \    --debug

                            评估结果如下图,可以看到qwen2.5明显比1.5的评估结果要好,即便参数量较小。


                            3、配置文件方式

                            除了通过命令行配置实验外,OpenCompass 还允许用户在配置文件中编写实验的完整配置,并通过 run.py 直接运行它。配置文件是以 Python 格式组织的,并且必须包括 datasets 和 models 字段。

                            本次测试配置在 configs/eval_chat_demo.py 中。此配置通过 继承机制 引入所需的数据集和模型配置,并以所需格式组合 datasets 和 models 字段。

                              from mmengine.config import read_basewith read_base():    from .datasets.demo.demo_gsm8k_chat_gen import gsm8k_datasets    from .datasets.demo.demo_math_chat_gen import math_datasets    from .models.qwen.hf_qwen2_1_5b_instruct import models as hf_qwen2_1_5b_instruct_models    from .models.hf_internlm.hf_internlm2_chat_1_8b import models as hf_internlm2_chat_1_8b_modelsdatasets = gsm8k_datasets + math_datasetsmodels = hf_qwen2_1_5b_instruct_models + hf_internlm2_chat_1_8b_models

                              运行任务时,我们只需将配置文件的路径传递给 run.py:

                                python run.py configs/eval_chat_demo.py --debug


                                七、加速评测

                                OpenCompass支持在评测大语言模型时,使用 LMDeploy 作为推理加速引擎。LMDeploy 是涵盖了 LLM 和 VLM任务的全套轻量化、部署和服务解决方案,拥有卓越的推理性能。本教程将介绍如何使用 LMDeploy 加速对模型的评测。

                                1、安装LMDeploy

                                  pip install lmdeploy

                                  2、调整配置文件

                                  在目录configs/models下找lmdeploy_打头的大模型配置文件。比如lmdeploy_qwen2_5_1_5b_instruct.py文件。

                                  • path修改为本地大模型目录,

                                  • max_batch_size和batch_size保持一致,若显卡性能较差,可以调小些。

                                  3、运行评测命令

                                        python run.py \    --models lmdeploy_qwen2_5_1_5b_instruct \    --datasets demo_gsm8k_chat_gen demo_math_chat_gen \    --debug

                                    评测的速度明显快于第六章节的3种方式。

                                    在 OpenCompass 评测过程中,默认使用 Huggingface 的 transformers 库进行推理,这是一个非常通用的方案,也可使用更高效的推理方法来加速这一过程,比如借助LMDeploy 或 vLLM 。 本章节的方法同样使用与vLLM。

                                    八、指定数据集

                                    上面的评测任务都是使用2个demo数据集,根据需求和场景,我们需要指定不同的数据集,比如我们使用C-Eval(中文考试题)这个数据集来评测。

                                    1、查找数据集

                                    OpenCompass内置的数据集都在 configs/datasets/ 目录下。也可以通过命令查询:

                                      python tools/list_configs.py ceval

                                      结果:

                                        +--------------------------------+------------------------------------------------------------------------------+| Dataset                        | Config Path                                                                  ||--------------------------------+------------------------------------------------------------------------------|| ceval_clean_ppl                | opencompass/configs/datasets/ceval/ceval_clean_ppl.py                        || ceval_contamination_ppl_810ec6 | opencompass/configs/datasets/contamination/ceval_contamination_ppl_810ec6.py || ceval_gen                      | opencompass/configs/datasets/ceval/ceval_gen.py                              || ceval_gen_2daf24               | opencompass/configs/datasets/ceval/ceval_gen_2daf24.py                       || ceval_gen_5f30c7               | opencompass/configs/datasets/ceval/ceval_gen_5f30c7.py                       || ceval_internal_ppl_1cd8bf      | opencompass/configs/datasets/ceval/ceval_internal_ppl_1cd8bf.py              || ceval_internal_ppl_93e5ce      | opencompass/configs/datasets/ceval/ceval_internal_ppl_93e5ce.py              || ceval_ppl                      | opencompass/configs/datasets/ceval/ceval_ppl.py                              || ceval_ppl_1cd8bf               | opencompass/configs/datasets/ceval/ceval_ppl_1cd8bf.py                       || ceval_ppl_578f8d               | opencompass/configs/datasets/ceval/ceval_ppl_578f8d.py                       || ceval_ppl_93e5ce               | opencompass/configs/datasets/ceval/ceval_ppl_93e5ce.py                       || ceval_zero_shot_gen_bd40ef     | opencompass/configs/datasets/ceval/ceval_zero_shot_gen_bd40ef.py             |+--------------------------------+------------------------------------------------------------------------------+

                                        我们选择ceval_gen这个数据集测试。

                                        2、运行评测命令

                                          python run.py \    --models lmdeploy_qwen2_5_1_5b_instruct \    --datasets ceval_gen \    --debug

                                          执行结果如下:

                                          九、自定义数据集

                                          1、支持格式

                                          支持 .jsonl 和 .csv 两种格式的数据集。

                                          2、选择题 (mcq)

                                          对于选择 (mcq) 类型的数据,默认的字段如下:

                                          • question: 表示选择题的题干

                                          • A, B, C, …: 使用单个大写字母表示选项,个数不限定。默认只会从 A 开始,解析连续的字母作为选项。

                                          • answer: 表示选择题的正确答案,其值必须是上述所选用的选项之一,如 A, B, C 等。

                                          .jsonl 格式样例如下:

                                            {"question": "165+833+650+615=", "A": "2258", "B": "2263", "C": "2281", "answer": "B"}{"question": "368+959+918+653+978=", "A": "3876", "B": "3878", "C": "3880", "answer": "A"}{"question": "776+208+589+882+571+996+515+726=", "A": "5213", "B": "5263", "C": "5383", "answer": "B"}{"question": "803+862+815+100+409+758+262+169=", "A": "4098", "B": "4128", "C": "4178", "answer": "C"}

                                            .csv 格式样例如下:

                                              question,A,B,C,answer127+545+588+620+556+199=,2632,2635,2645,B735+603+102+335+605=,2376,2380,2410,B506+346+920+451+910+142+659+850=,4766,4774,4784,C504+811+870+445=,2615,2630,2750,B

                                              3、问答题 (qa)

                                              对于问答 (qa) 类型的数据,默认的字段如下:

                                              • question: 表示问答题的题干

                                              • answer: 表示问答题的正确答案。可缺失,表示该数据集无正确答案。


                                              .jsonl 格式样例如下:

                                                {"question": "752+361+181+933+235+986=", "answer": "3448"}{"question": "712+165+223+711=", "answer": "1811"}{"question": "921+975+888+539=", "answer": "3323"}{"question": "752+321+388+643+568+982+468+397=", "answer": "4519"}

                                                .csv 格式样例如下:

                                                  question,answer123+147+874+850+915+163+291+604=,3967149+646+241+898+822+386=,3142332+424+582+962+735+798+653+214=,4700649+215+412+495+220+738+989+452=,4170

                                                  命令行列表

                                                  自定义数据集可直接通过命令行来调用开始评测。


                                                    python run.py \    --models hf_llama2_7b \    --custom-dataset-path xxx/test_mcq.csv \    --custom-dataset-data-type mcq \    --custom-dataset-infer-method ppl
                                                      python run.py \    --models hf_llama2_7b \    --custom-dataset-path xxx/test_qa.jsonl \    --custom-dataset-data-type qa \    --custom-dataset-infer-method gen

                                                      在绝大多数情况下,--custom-dataset-data-type 和 --custom-dataset-infer-method 可以省略,OpenCompass 会根据以下逻辑进行设置:

                                                      • 如果从数据集文件中可以解析出选项,如 A, B, C 等,则认定该数据集为 mcq,否则认定为 qa。

                                                      • 默认 infer_method 为 gen。 

                                                      53AI,企业落地大模型首选服务商

                                                      产品:场景落地咨询+大模型应用平台+行业解决方案

                                                      承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

                                                      联系我们

                                                      售前咨询
                                                      186 6662 7370
                                                      预约演示
                                                      185 8882 0121

                                                      微信扫码

                                                      添加专属顾问

                                                      回到顶部

                                                      加载中...

                                                      扫码咨询