Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00
..

C-Eval 评测脚本

此 C-Eval 评测脚本修改自ymcui/Chinese-LLaMA-Alpaca项目。

数据准备

从 C-Eval 官方指定路径下载评测数据集,并解压至 data 文件夹:

wget https://modelscope.oss-cn-beijing.aliyuncs.com/open_data/c-eval/ceval-exam.zip
unzip ceval-exam.zip -d data

将 data 文件夹放置于本项目的 scripts/ceval 目录下。

运行预测脚本

运行以下脚本:

cd scripts/ceval
python eval.py \
    --model_name_or_path /path/to/your/model \
    --cot False \
    --few_shot False \
    --with_prompt True \
    --constrained_decoding True \
    --temperature 0.2 \
    --n_times 1 \
    --ntrain 5 \
    --do_save_csv False \
    --do_test False \
    --output_dir ${output_path} \

参数说明

  • model_path:待评测模型所在目录(合并 LoRA 后的 HF 格式模型)
  • cot:是否使用 chain-of-thought
  • few_shot:是否使用 few-shot
  • ntrainfew_shot=True 时,指定 few-shot 实例的数量(5-shotntrain=5);few_shot=False 时该项不起作用
  • with_prompt:模型输入是否包含针对 Alpaca 模型的指令模板
  • constrained_decoding:由于 C-Eval 评测的标准答案格式为选项'A'/'B'/'C'/'D',所以我们提供了两种从模型生成内容中抽取答案的方案:
    • 当 constrained_decoding=True,计算模型生成的第一个 token 分别为'A', 'B', 'C', 'D'的概率,选择其中概率最大的一个作为答案
    • 当 constrained_decoding=False,用正则表达式从模型生成内容中提取答案
  • temperature:模型解码时的温度
  • n_times:指定评测的重复次数,将在 output_dir 下生成指定次数的文件夹
  • do_save_csv:是否将模型生成结果、提取的答案等内容保存在 csv 文件中
  • output_dir:指定评测结果的输出路径
  • do_test:在 valid 或 test 集上测试:当 do_test=False,在 valid 集上测试;当 do_test=True,在 test 集上测试

评测输出

模型预测完成后,生成目录outputs/take*,其中*代表数字,范围为0至n_times-1,分别储存了n_times次解码的结果。

outputs/take*下包含submission.jsonsummary.json两个 json 文件。若do_save_csv=True,还将包含52个保存的模型生成结果、提取的答案等内容的 csv 文件。

submission.json为依据官方提交规范生成的存储模型评测答案的文件,形式如:

{
    "computer_network": {
        "0": "A",
        "1": "B",
        ...
    },
      "marxism": {
        "0": "B",
        "1": "A",
        ...
      },
      ...
}

summary.json 包含模型在52个主题下、4个大类下和总体平均的评测结果。例如,json 文件最后的 All 字段中会显示总体平均效果:

  "All": {
    "score": 0.36701337295690933,
    "num": 1346,
  "correct": 494.0
}

其中 score 为准确率,num 为测试的总样本条数,correct 为正确的数量。