- 模型评测
- 人工智能
- 大模型
- AI 评测
【免费下载链接】opencompass
OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100+ datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.
导读
本文以 OpenCompass 仓库中的 SciCode 数据集说明文档 为核心,系统讲解如何在该评测平台上配置、运行并评估这一由科学家整理的科研代码生成基准。你将掌握with_bg参数背后的背景信息注入机制、scicode_gen系列配置文件的完整结构、run.py命令行参数的实际含义,以及SciCodeEvaluator从代码提取、HDF5 测试数据读取到子问题/主问题双指标打分的完整评估链路。
SciCode 基准概览:从真实科研问题到评测任务
SciCode(Science Code)是一个专门评估语言模型(LMs)为真实科学研究问题编写代码能力的挑战性基准。根据 README 文档 的描述,它具备以下核心特征:
- 覆盖广泛:涵盖 6 大领域的 16 个子领域,包括物理(Physics)、数学(Math)、材料科学(Material Science)、生物学(Biology)、化学(Chemistry)等;
- 来源于真实研究:与以往由"考试式问答对"构成的基准不同,SciCode 的问题直接由真实科研问题转化而来;
- 天然的任务分解结构:每个 SciCode 主问题自然分解为多个子问题(subproblems),每个子问题都涉及知识回忆(knowledge recall)、推理(reasoning)与代码合成(code synthesis);
- 规模:总计 80 个高难度主问题分解出 338 个子问题;
- 可选科学背景描述:数据集提供了可选的背景信息描述,用于评测模型在有/无科学背景知识条件下的表现差异;
- 标注完善:包含科学家标注的参考答案(gold-standard solutions)与用于评估的测试用例。
文档同时给出了一个极具参考价值的结论:在最具挑战性的设置(最真实场景)下,当时测试表现最好的模型 Claude3.5-Sonnet 也仅能解决 4.6% 的问题。这直观说明 SciCode 对当前 LLM 的科研代码能力构成了显著挑战,也印证了其评测价值——它模拟了科学家"识别关键科学概念与事实,再将其转化为计算与仿真代码"的日常工作流程。
数据准备:下载与目录结构
在运行评测之前,需要先准备 SciCode 数据集。OpenCompass 通过 datasets_info.py 维护了数据下载映射,/scicode对应的数据包地址为http://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/scicode.zip,可通过数据下载机制将其解压到本地数据目录。
从配置与源码可以确认,数据集在本地需要按以下结构存放(相对于仓库根目录):
data/scicode/SciCode_datasets.json:无背景信息(w/o background)版本的评测样本;data/scicode/SciCode_datasets_with_background.json:带背景信息(w/ background)版本的评测样本;data/scicode/test_data/{step_id}.h5:各子问题对应的 HDF5 格式测试数据文件。
其中 HDF5 测试数据需要单独获取。在 scicode.py 的process_hdf5_to_tuple函数中,如果文件缺失会直接断言报错,并给出明确提示:需要手动下载scicode_test_data.zip并将解压出的test_data.h5放入./data/scicode/test_data/目录。
配置文件解析:scicode_gen 系列
配置入口与版本差异
OpenCompass 在opencompass/configs/datasets/scicode/目录下提供了多个配置文件:
| 文件 | 说明 |
|---|---|
| scicode_gen.py | 入口配置,通过read_base()复用scicode_gen_085b98的SciCode_datasets |
| scicode_gen_085b98.py | 无背景(w/o background)完整配置,max_out_len=4096 |
| scicode_wbg_gen_085b98.py | 带背景(w/ background)完整配置 |
| scicode_gen_62c139.py | 较早版本的配置,未设置max_out_len |
以 scicode_gen_085b98.py 为例,配置由三部分核心组件构成:
SciCode_reader_cfg = dict(input_columns=['prompt'], output_column=None) SciCode_infer_cfg = dict( ice_template=dict( type=PromptTemplate, template='', ), retriever=dict(type=ZeroRetriever), inferencer=dict(type=ChatInferencer, infer_mode='every', max_out_len=4096)) SciCode_eval_cfg = dict(evaluator=dict(type=SciCodeEvaluator, dataset_path='./data/scicode', with_bg=False)) SciCode_datasets = [ dict( abbr='SciCode', type=SciCodeDataset, path='./data/scicode', with_bg=False, reader_cfg=SciCode_reader_cfg, infer_cfg=SciCode_infer_cfg, eval_cfg=SciCode_eval_cfg) ]各部分的作用如下:
reader_cfg:以数据样本中的prompt字段作为推理输入列,无监督输出列,即直接向模型下发完整任务描述;infer_cfg:ice_template为空字符串模板,搭配ZeroRetriever(零样本、不做示例检索),ChatInferencer以infer_mode='every'对每个样本逐条推理,并设置max_out_len=4096——这一输出长度上限远大于 CLI 默认的 256,是因为科研代码题要求模型生成完整可执行的 Python 脚本;eval_cfg:指定SciCodeEvaluator作为评估器,dataset_path='./data/scicode'指向本地数据目录;SciCode_datasets列表项:注册数据集abbr(缩写名,用于结果汇总与报告展示)、type=SciCodeDataset与数据集路径。
with_bg 参数:控制背景信息注入
README 明确指出:通过修改配置文件中的with_bg参数,即可切换 w/ background 评测设置。这一参数贯穿数据加载与评估两个环节:
- 在 SciCodeDataset.load 中,
with_bg=True时读取SciCode_datasets_with_background.json,否则读取SciCode_datasets.json; - 在 SciCodeEvaluator 的初始化中同样依据
with_bg选择对应的 JSON 文件。
scicode_wbg_gen_085b98.py 就是带背景版本的完整示例:其abbr改为SciCode_with_background,with_bg=True贯穿数据集与评估器配置。实际使用中,只需复制该文件并修改with_bg字段,即可在两种设置之间切换。
命令行运行:完整命令与参数详解
README 给出了使用 HuggingFace 模型直接运行 SciCode 评测的完整命令:
python run.py --datasets scicode_gen --hf-num-gpus 1 --hf-type chat --hf-path meta-llama/Meta-Llama-3-8B-Instruct --debug --model-kwargs device_map='auto' trust_remote_code=True --batch-size 1对照 CLI 参数定义,各参数含义如下:
| 参数 | 含义 | 默认值 |
|---|---|---|
--datasets scicode_gen | 指定要运行的数据集配置(对应opencompass/configs/datasets/scicode/scicode_gen.py的模块名) | 无 |
--hf-num-gpus 1 | 为 HuggingFace 模型分配的 GPU 数量 | 1 |
--hf-type chat | HuggingFace 模型类型,可选base或chat,chat对应对话式推理 | chat |
--hf-path meta-llama/Meta-Llama-3-8B-Instruct | 模型路径或 HuggingFace 模型标识 | 必填 |
--debug | 以调试模式运行(便于观察中间结果与排错) | 关闭 |
--model-kwargs device_map='auto' trust_remote_code=True | 以键值对方式传递模型加载参数:device_map='auto'自动分配设备,trust_remote_code=True允许加载依赖自定义代码的模型 | {} |
--batch-size 1 | 推理批大小,SciCode 题目较长且需要逐题完整生成,设为 1 可稳定单样本生成 | 8 |
需要说明的是,CLI 参数中--models可以组合多个模型进行对比评测,而--max-out-len的 CLI 默认值仅为 256,若直接覆盖infer_cfg时务必记得保持 4096 级别的长输出设置,否则模型可能在代码生成中途被截断。运行结束后,评测结果会按配置中的abbr(如SciCode)写入输出目录,供汇总模块读取。
评估原理:SciCodeEvaluator 源码级解析
SciCode 的评估并非简单的文本匹配,而是在真实 Python 环境中执行模型生成的代码,并与科学家标注的测试数据比对。整个链路实现在 opencompass/datasets/scicode.py 中,可分为四个阶段:
1. Python 脚本提取
模型的原始回复通常以 markdown 代码块形式返回,extract_python_script 会定位```python与```标记截取代码段;若回复中不存在代码块标记则视为未遵循指令,返回空字符串(该样本判为失败)。提取后还会用正则^\s*(import .*|from .*\s+import\s+.*)去除代码开头的 import 语句——因为所有子问题的代码会被拼接进同一个文件,import 由数据集统一提供。
2. 子问题代码拼接与测试文件生成
在score方法中,评估器对每个主问题做如下处理:
- 读取该样本的
id与import字段(统一导入语句),为每个子问题提取出的脚本按顺序拼接; - 依据数据集自带的
test字段逐子问题生成测试文件,文件命名为{problem_id}-{sub_idx+1}.py; - 测试文件末尾会追加
from opencompass.datasets.scicode import process_hdf5_to_tuple,并通过process_hdf5_to_tuple('{problem_id}.{sub_idx+1}', len(test_lst))从 HDF5 文件中读取期望的目标值,再逐行写入测试断言逻辑。
源码中还存在针对特定问题的特例处理:当problem_id == '13' and sub_idx >= 5、problem_id == '62' and sub_idx >= 0、problem_id == '76' and sub_idx >= 2时会对子问题下标额外加一,用于对齐这些题目的真实测试结构。
3. HDF5 测试数据解析
process_hdf5_to_tuple(L98-L140)负责从./data/scicode/test_data/{step_id}.h5读取每个测试样本,支持标量、字节串、列表、稀疏矩阵(COO/CSR/BSR)与嵌套字典等多种数据类型,通过h5py逐层还原为 Python 对象。
4. 数值比对与并发执行
生成的测试脚本由run_script以subprocess方式在独立进程中执行,单脚本超时上限为 120 秒(返回码 2 表示超时),异常退出返回 1,成功执行返回 0。所有脚本通过ThreadPoolExecutor并发调度,避免串行执行拖慢整体评估。
数值比对阶段使用了多种容差策略:字典与矩阵通过np.allclose比较(默认atol=1e-8, rtol=1e-5);sympy.Symbol与字符串按值相等比较;scipy.sparse稀疏矩阵会先转为稠密数组再比较(are_csc_matrix_close)。
最终打分产出两个核心指标:
sub_accuracy(子问题准确率):所有子问题中运行成功(返回码 0)的比例;accuracy(主问题准确率):一个主问题只有当其全部子问题均运行成功时才计为正确,因此该指标显著更严苛。
这解释了 README 参考性能表中两个指标数值差异巨大的原因——主问题准确率要求整条子问题链全部通过。
结果汇总:summarizer 配置
评测完成后,可以通过 summarizer 配置 自动汇总报告。该配置声明了四个数据集指标项:
['SciCode_with_background', 'accuracy'] ['SciCode_with_background', 'sub_accuracy'] ['SciCode_wo_background', 'accuracy'] ['SciCode_wo_background', 'sub_accuracy']对应的 分组定义 将SciCode、SciCode_with_background、SciCode_wo_background三个汇总组分别聚合各自的accuracy与sub_accuracy,便于在最终报告中将带背景与不带背景两种设置的结果并排对比,直接复现 README 中的参考性能表格。
参考性能与预期结果
README 给出了 4 个模型配置的参考表现,可作为复现实验的对照基线(w/o Background为无背景设置,w/ Background为注入科学背景信息的设置):
| 模型 | 条件 | 子问题准确率 | 主问题准确率 |
|---|---|---|---|
| Llama-3-70B-Instruct | w/o Background | 21.53% | 4.62% |
| Llama-3-70B-Instruct | w/ Background | 24.31% | 7.69% |
| Qwen2-72B-Instruct | w/o Background | 16.67% | 1.54% |
| Qwen2-72B-Instruct | w/ Background | 19.79% | 1.54% |
可以观察到两个规律:其一,注入科学背景信息后各模型的子问题准确率普遍提升;其二,主问题准确率整体处于个位数水平,充分反映 SciCode 作为"研究级代码基准"的极高难度。复现时建议使用与基线一致的--hf-type chat、较长max_out_len与--batch-size 1设置,以获得可比的评估结果。
引用信息
如果在研究工作中使用 SciCode 基准,可按 README 中给出的 BibTeX 条目引用:
@misc{tian2024scicode, title={SciCode: A Research Coding Benchmark Curated by Scientists}, author={Minyang Tian and Luyu Gao and Shizhuo Dylan Zhang and Xinan Chen and Cunwei Fan and Xuefei Guo and Roland Haas and Pan Ji and Kittithat Krongchon and Yao Li and Shengyan Liu and Di Luo and Yutao Ma and Hao Tong and Kha Trinh and Chenyu Tian and Zihan Wang and Bohao Wu and Yanyu Xiong and Shengzhu Yin and Minhui Zhu and Kilian Lieret and Yanxin Lu and Genglin Liu and Yufeng Du and Tianhua Tao and Ofir Press and Jamie Callan and Eliu Huerta and Hao Peng}, year={2024}, eprint={2407.13168}, archivePrefix={arXiv}, primaryClass={cs.AI} }总结
通过本文,你可以完整掌握在 OpenCompass 上运行 SciCode 科研编程评测的全流程:从数据集与 HDF5 测试文件的准备,到scicode_gen系列配置中with_bg、reader_cfg、infer_cfg、eval_cfg的逐项含义,再到run.py命令行参数的实战用法,以及底层SciCodeEvaluator真实执行代码、数值比对与双指标打分的评估原理。结合 README、数据集实现 与 汇总配置 三处源码,即可在自己的实验环境中复现参考性能,并将 SciCode 纳入日常模型能力评测体系。
- 模型评测
- 人工智能
- 大模型
- AI 评测
【免费下载链接】opencompass
OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100+ datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.
相关推荐
OpenCompass 集成 ATLAS 基准:前沿科学推理评估与 LLM-as-a-Judge 评测实战
OpenCompass 集成 ATLAS 基准:前沿科学推理评估与 LLM as a Judge 评测实战 ATLAS 是面向前沿科学推理的高难度多学科评测基准
模型评测人工智能大模型AI 评测OpenCompass MATH 数学推理基准评估指南:配置、评测流程与源码解析
OpenCompass MATH 数学推理基准评估指南:配置、评测流程与源码解析 MATH 是 OpenCompass 内置的高难度数学推理基准之一,用于评估大
模型评测人工智能大模型AI 评测OpenCompass 高考基准 GaokaoBench 评测指南:配置、Prompt 设计、评分原理与模型成绩全解析
OpenCompass 高考基准 GaokaoBench 评测指南:配置、Prompt 设计、评分原理与模型成绩全解析 OpenCompass 在 openco
模型评测人工智能大模型AI 评测
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考