opencompass大模型评测

大模型评测介绍

已有大模型评测集

为了准确和公正地评估大模型的能力,国内外机构在大模型评测上开展了大量的尝试和探索。斯坦福大学提出了较为系统的评测框架HELM,从准确性,安全性,鲁棒性和公平性等维度开展模型评测。
纽约大学联合谷歌和Meta提出了SuperGLUE评测集,从推理能力,常识理解,问答能力等方面入手,构建了包括8个子任务的大语言模型评测数据集。
加州大学伯克利分校提出了MMLU测试集,构建了涵盖高中和大学的多项考试,来评估模型的知识能力和推理能力。
谷歌也提出了包含数理科学,编程代码,阅读理解,逻辑推理等子任务的评测集Big-Bench,涵盖200多个子任务,对模型能力进行系统化的评估。
在中文评测方面,国内的学术机构也提出了如CLUE,CUGE等评测数据集,从文本分类,阅读理解,逻辑推理等方面评测语言模型的中文能力。

OpenCompass提供设计一套全面、高效、可拓展的大模型评测方案,对模型能力、性能、安全性等进行全方位的评估。OpenCompass提供分布式自动化的评测系统,支持对(语言/多模态)大模型开展全面系统的能力评估。

大模型评测的意义

  • 不同模型,对于不同任务,使用公开统一的评测标准
  • 指导模型能力提升
  • 工程评估

评测任务和能力

传统NLP的能力:分类,生成等

LLM评测:
还有长文本能力,agent(tools)能力,多轮对话
情感认知能力等
请添加图片描述

包括基本统计性质,通用能力以及特色能力等

评测对象

本算法库的主要评测对象为语言大模型与多模态大模型。我们以语言大模型为例介绍评测的具体模型类型。

  • 基座模型:一般是经过海量的文本数据以自监督学习的方式进行训练获得的模型(如OpenAI的GPT-3,Meta的LLaMA),往往具有强大的文字续写能力。

  • 对话模型:一般是在的基座模型的基础上,经过指令微调或人类偏好对齐获得的模型(如OpenAI的ChatGPT、上海人工智能实验室的书生·浦语),能理解人类指令,具有较强的对话能力。

评测方法

OpenCompass采取客观评测与主观评测相结合的方法。
针对具有确定性答案的能力维度和场景,通过构造丰富完善的评测集,对模型能力进行综合评价。针对体现模型能力的开放式或半开放式的问题、模型安全问题等,采用主客观相结合的评测方式。

客观评测

  • 问答题
  • 分类题(选择题,判断题)

针对具有标准答案的客观问题,通过使用定量指标比较模型的输出与标准答案的差异,并根据结果衡量模型的性能。同时,由于大语言模型输出自由度较高,在评测阶段,我们需要对其输入和输出作一定的规范和设计,尽可能减少噪声输出在评测阶段的影响,才能对模型的能力有更加完整和客观的评价。

为了更好地激发出模型在题目测试领域的能力,并引导模型按照一定的模板输出答案,OpenCompass采用提示词工程 (prompt engineering)和语境学习(in-context learning)进行客观评测。

在客观评测的具体实践中,我们通常采用下列两种方式进行模型输出结果的评测:

  • *数据集配置通常有两种类型:‘ppl’ 和 ‘gen’,分别指示使用的评估方法。其中 ppl 表示辨别性评估,gen 表示生成性评估。
  • 判别式评测:该评测方式基于将问题与候选答案组合在一起,计算模型在所有组合上的困惑度(perplexity),并选择困惑度最小的答案作为模型的最终输出。例如,若模型在 问题? 答案1 上的困惑度为 0.1,在 问题? 答案2 上的困惑度为 0.2,最终我们会选择 答案1 作为模型的输出。

  • 生成式评测:该评测方式主要用于生成类任务,如语言翻译、程序生成、逻辑分析题等。具体实践时,使用问题作为模型的原始输入,并留白答案区域待模型进行后续补全。我们通常还需要对其输出进行后处理,以保证输出满足数据集的要求。

主观评测

语言表达生动精彩,变化丰富,大量的场景和能力无法凭借客观指标进行评测。针对如模型安全和模型语言能力的评测,以人的主观感受为主的评测更能体现模型的真实能力,并更符合大模型的实际使用场景。

  • 人类评价
    OpenCompass采取的主观评测方案是指借助受试者的主观判断对具有对话能力的大语言模型进行能力评测。在具体实践中,我们提前基于模型的能力维度构建主观测试问题集合,并将不同模型对于同一问题的不同回复展现给受试者,收集受试者基于主观感受的评分。
  • 模型评价
    评测大模型—Judge LLM
    由于主观测试成本高昂,本方案同时也采用使用性能优异的大语言模拟人类进行主观打分。
    在实际评测中,本文将采用真实人类专家的主观评测与基于模型打分的主观评测相结合的方式开展模型能力评估。
    在具体开展主观评测时,OpenComapss采用单模型回复满意度统计多模型满意度比较两种方式开展具体的评测工作。

prompt评测

测试对prompt的敏感性(模型鲁棒性)
如同一问题,不同问法,看回答是否一致正确
也有其他的prompt评测方法

其他

大模型评测的挑战

  • 缺少高质量中文评测集
  • 难以准确提取答案
  • 能力维度不足
  • 测试集混入训练集(数据污染):测试数据污染
  • 测试标准各异,不统一
  • 人工测试成本高昂

OpenCompass

OpenCompass中文—0.2.1 文档

其他评测工具

请添加图片描述

Bigbench

OpenCompass介绍

请添加图片描述
请添加图片描述

除了基础的LLM评测,OpenCompass还做了大模型评测的一些前沿探索:多模态评测(MMbench),垂直领域大模型评测(Lawbench,Medbench)

工具架构

请添加图片描述

  • 模型层:大模型评测所涉及的主要模型种类,OpenCompass以基座模型和对话模型作为重点评测对象。
  • 能力层:OpenCompass从本方案从通用能力和特色能力两个方面来进行评测维度设计。在模型通用能力方面,从语言、知识、理解、推理、安全等多个能力维度进行评测。在特色能力方面,从长文本、代码、工具、知识增强等维度进行评测。
  • 方法层:OpenCompass采用客观评测与主观评测两种评测方式。客观评测能便捷地评估模型在具有确定答案(如选择,填空,封闭式问答等)的任务上的能力,主观评测能评估用户对模型回复的真实满意度,OpenCompass采用基于模型辅助的主观评测和基于人类反馈的主观评测两种方式。
  • 工具层:OpenCompass提供丰富的功能支持自动化地开展大语言模型的高效评测。包括分布式评测技术,提示词工程,对接评测数据库,评测榜单发布,评测报告生成等诸多功能。

模型和数据

OpenCompass支持大部分国际/国内的主流模型的评测
已经支持了100+各数据集
支持自定义模型和数据集的评测

评测Pipeline

请添加图片描述

方法和能力

方法

  • 客观评测
  • 基于模型的主观评测
  • 基于人类反馈的主观评测
  • Prompt鲁棒性评测

能力

为准确、全面、系统化地评估大语言模型的能力,OpenCompass从通用人工智能的角度出发,结合学术界的前沿进展和工业界的最佳实践,提出一套面向实际应用的模型能力评价体系:通用能力+特色能力。

  • 通用能力(六个维度)
    • 学科综合能力
    • 知识能力
    • 语言能力
    • 理解能力
    • 推理能力
    • 安全能力
  • 特色能力
    除了基础的LLM评测,OpenCompass还做了大模型评测的一些前沿探索:多模态评测(MMbench),垂直领域大模型评测(Lawbench,Medbench)

OpenCompass实践

概览

在 OpenCompass 中评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化

配置:这是整个工作流的起点。您需要配置整个评估过程,选择要评估的模型和数据集。此外,还可以选择评估策略、计算后端等,并定义显示结果的方式。

推理与评估:在这个阶段,OpenCompass 将会开始对模型和数据集进行并行推理和评估。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。这两个过程会被拆分为多个同时运行的“任务”以提高效率,但请注意,如果计算资源有限,这种策略可能会使评测变得更慢。

可视化:评估完成后,OpenCompass 将结果整理成易读的表格,并将其保存为 CSV 和 TXT 文件。你也可以激活飞书状态上报功能,此后可以在飞书客户端中及时获得评测状态报告。

接下来,我们将展示 OpenCompass 的基础用法,展示书生浦语在 C-Eval 基准任务上的评估。它们的配置文件可以在 configs/eval_demo.py 中找到。

准备

环境安装(GPU)

conda create --name opencompass --clone=/root/share/conda_envs/internlm-base
source activate opencompass
git clone https://github.com/open-compass/opencompass
cd opencompass
pip install -e .

有部分第三方功能,如代码能力基准测试 Humaneval 以及 Llama格式的模型评测,可能需要额外步骤才能正常运行,如需评测,详细步骤请参考安装指南

数据准备

# 解压评测数据集到 data/ 处
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/code/opencompass
unzip OpenCompassData-core-20231110.zip

# 将会在opencompass下看到data文件夹

OpenCompass使用概述

文件目录

重要的文件目录

-opencompass
	-config # 要运行配置.py的文件
	-data   # 数据文件夹
	-outputs # 输出文件夹
	-opencompass #核心功能和工具文件夹
	-tools #用户工具文件夹:方便用户使用的工具(如查看支持的模型等)
	-run.py # 运行文件

查看支持的数据集和模型

# 列出所有跟 internlm 及 ceval 相关的配置
python tools/list_configs.py internlm ceval

将会看到

+--------------------------+--------------------------------------------------------+
| Model                    | Config Path                                            |
|--------------------------+--------------------------------------------------------|
| hf_internlm_20b          | configs/models/hf_internlm/hf_internlm_20b.py          |
| hf_internlm_7b           | configs/models/hf_internlm/hf_internlm_7b.py           |
| hf_internlm_chat_20b     | configs/models/hf_internlm/hf_internlm_chat_20b.py     |
| hf_internlm_chat_7b      | configs/models/hf_internlm/hf_internlm_chat_7b.py      |
| hf_internlm_chat_7b_8k   | configs/models/hf_internlm/hf_internlm_chat_7b_8k.py   |
| hf_internlm_chat_7b_v1_1 | configs/models/hf_internlm/hf_internlm_chat_7b_v1_1.py |
| internlm_7b              | configs/models/internlm/internlm_7b.py                 |
| ms_internlm_chat_7b_8k   | configs/models/ms_internlm/ms_internlm_chat_7b_8k.py   |
+--------------------------+--------------------------------------------------------+
+----------------------------+------------------------------------------------------+
| Dataset                    | Config Path                                          |
|----------------------------+------------------------------------------------------|
| ceval_clean_ppl            | configs/datasets/ceval/ceval_clean_ppl.py            |
| ceval_gen                  | configs/datasets/ceval/ceval_gen.py                  |
| ceval_gen_2daf24           | configs/datasets/ceval/ceval_gen_2daf24.py           |
| ceval_gen_5f30c7           | configs/datasets/ceval/ceval_gen_5f30c7.py           |
| ceval_ppl                  | configs/datasets/ceval/ceval_ppl.py                  |
| ceval_ppl_578f8d           | configs/datasets/ceval/ceval_ppl_578f8d.py           |
| ceval_ppl_93e5ce           | configs/datasets/ceval/ceval_ppl_93e5ce.py           |
| ceval_zero_shot_gen_bd40ef | configs/datasets/ceval/ceval_zero_shot_gen_bd40ef.py |
+----------------------------+------------------------------------------------------+

启动评测

run.py是Opencompass的开始入口文件
可以通过[命令行+传参数运行](### 命令哼进行评测)
也可以通过[修改config文件+传递给run.py进行](### 修改配置文件)

命令行进行评测

确保按照上述步骤正确安装 OpenCompass 并准备好数据集后,可以通过以下命令评测 InternLM-Chat-7B 模型在 C-Eval 数据集上的性能。由于 OpenCompass 默认并行启动评估过程,我们可以在第一次运行时以 --debug 模式启动评估,并检查是否存在问题。在 --debug 模式下,任务将按顺序执行,并实时打印输出。

python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug

命令解析

--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 #加上后所有信息都会再终端打印,不加则会写到output的logs文件夹中
--reuse latest # 接着之前的结果继续进行推理
			   # latest就是接着时间戳最新的继续推导
--debug # 开启debug模式,所有输出都会打印到终端中;不加就是不开启debug模式,所有输出会被输入到outputs的logs中

如果一切正常,您应该看到屏幕上显示 “Starting inference process”:

[2024-01-12 18:23:55,076] [opencompass.openicl.icl_inferencer.icl_gen_inferencer] [INFO] Starting inference process...

评测完成后,将会看到:


dataset                                         version    metric         mode      opencompass.models.huggingface.HuggingFace_model_repos_internlm-chat-7b
----------------------------------------------  ---------  -------------  ------  -------------------------------------------------------------------------
ceval-computer_network                          db9ce2     accuracy       gen                                                                         31.58
ceval-operating_system                          1c2571     accuracy       gen                                                                         36.84
ceval-computer_architecture                     a74dad     accuracy       gen                                                                         28.57
ceval-college_programming                       4ca32a     accuracy       gen                                                                         32.43
ceval-college_physics                           963fa8     accuracy       gen                                                                         26.32
...... 
ceval                                           -          naive_average  gen                                                                         44.16

有关 run.py 支持的所有与 HuggingFace 相关的参数,请阅读 评测任务发起

修改配置文件

配置文件更方便批量测试
可以测多个模型和多个数据集
除了通过命令行配置实验外,OpenCompass 还允许用户在配置文件中编写实验的完整配置,并通过 run.py 直接运行它。配置文件是以 Python 格式组织的,并且必须包括 datasetsmodels 字段。

  • 修改整体配置文件
    示例测试配置在 configs/eval_demo.py 中。此配置通过 继承机制 引入所需的数据集和模型配置,并以所需格式组合 datasetsmodels 字段。
    from mmengine.config import read_base
    
    with read_base():
        from .datasets.siqa.siqa_gen import siqa_datasets
        from .datasets.winograd.winograd_ppl import winograd_datasets
        from .models.opt.hf_opt_125m import opt125m
        from .models.opt.hf_opt_350m import opt350m
    
    datasets = [*siqa_datasets, *winograd_datasets]
    models = [opt125m, opt350m]
    
    运行任务时,我们只需将配置文件的路径传递给 run.py
    python run.py configs/eval_demo.py
    
  • 修改模型配置文件
    OpenCompass 提供了一系列预定义的模型配置,位于 configs/models 下。以下是与 opt-350mconfigs/models/opt/hf_opt_350m.py)相关的配置片段:
    # 使用 `HuggingFaceCausalLM` 评估由 HuggingFace 的 `AutoModelForCausalLM` 支持的模型
    from opencompass.models import HuggingFaceCausalLM
    
    # OPT-350M
    opt350m = dict(
           type=HuggingFaceCausalLM,
           # `HuggingFaceCausalLM` 的初始化参数
           path='facebook/opt-350m',
           tokenizer_path='facebook/opt-350m',
           tokenizer_kwargs=dict(
               padding_side='left',
               truncation_side='left',
               proxies=None,
               trust_remote_code=True),
           model_kwargs=dict(device_map='auto'),
           # 下面是所有模型的共同参数,不特定于 HuggingFaceCausalLM
           abbr='opt350m',               # 结果显示的模型缩写
           max_seq_len=2048,             # 整个序列的最大长度
           max_out_len=100,              # 生成的最大 token 数
           batch_size=64,                # 批量大小
           run_cfg=dict(num_gpus=1),     # 该模型所需的 GPU 数量
        )
    
    使用配置时,我们可以通过命令行参数 --models 指定相关文件,或使用继承机制将模型配置导入到配置文件中的 models 列表中。
  • 修改数据集配置文件
    与模型类似,数据集的配置文件也提供在 configs/datasets 下。用户可以在命令行中使用 --datasets,或通过继承在配置文件中导入相关配置
    下面是来自 configs/eval_demo.py 的与数据集相关的配置片段:
    from mmengine.config import read_base  # 使用 mmengine.read_base() 读取基本配置
    
    with read_base():
        # 直接从预设的数据集配置中读取所需的数据集配置
        from .datasets.winograd.winograd_ppl import winograd_datasets  # 读取 Winograd 配置,基于 PPL(困惑度)进行评估
        from .datasets.siqa.siqa_gen import siqa_datasets  # 读取 SIQA 配置,基于生成进行评估
    
    datasets = [*siqa_datasets, *winograd_datasets]  # 最终的配置需要包含所需的评估数据集列表 'datasets'
    
    数据集配置通常有两种类型:‘ppl’ 和 ‘gen’,分别指示使用的评估方法。其中 ppl 表示辨别性评估,gen 表示生成性评估。
  • 通过配置文件启动评测
    python run.py --models hf_llama_7b --datasets base_medium
    

作业

基础作业

使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能
评测过程
请添加图片描述

生成的目录

.
|-- configs
|   `-- 20240127_235845.py
|-- logs
|   |-- eval
|   `-- infer
|-- predictions
|   `-- opencompass.models.huggingface.HuggingFace_Singa_Model_internlm-chat-7b
|-- results
|   `-- opencompass.models.huggingface.HuggingFace_Singa_Model_internlm-chat-7b
`-- summary
    |-- summary_20240127_235845.csv
    `-- summary_20240127_235845.txt
9 directories, 3 files

评测结果
请添加图片描述

进阶作业

  • 使用 OpenCompass 评测 InternLM2-Chat-7B 模型使用 LMDeploy 0.2.0 部署后在 C-Eval 数据集上的性能
  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值