Skip to content

ceval_zh

Xin Yao edited this page Jan 30, 2024 · 5 revisions

C-Eval推理脚本

本项目在C-Eval评测数据集上测试了相关模型效果,其中测试集包含12.3K个选择题,涵盖52个学科。

接下来将介绍C-Eval数据集的预测方法。

数据准备

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

wget https://huggingface.co/datasets/ceval/ceval-exam/resolve/main/ceval-exam.zip
unzip ceval-exam.zip -d data

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

运行预测脚本

运行以下脚本:

model_path=path/to/chinese-mixtral
output_path=path/to/your_output_dir

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

参数说明

  • model_path:待评测模型所在目录(完整的Chinese-Mixtral或Chinese-Mixtral-Instruct模型,非LoRA)

  • cot:是否使用chain-of-thought

  • few_shot:是否使用few-shot

  • ntrainfew_shot=True时,指定few-shot实例的数量(5-shot:ntrain=5);few_shot=False时该项不起作用

  • with_prompt:模型输入是否包含针对mixtral模型的指令模板

  • 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集上测试

  • load_in_4bit:以4bit量化形式加载模型

  • use_flash_attention_2:使用flash-attn2加速推理,否则使用SDPA加速。

评测输出

  • 模型预测完成后,生成目录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.35958395,
        "num": 1346,
      "correct": 484.0
    }

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

⚠️ 注意,当在测试集上预测时(do_test=True),因为没有测试集标签,scorecorrect将为0,为正常现象。 测试集结果需要将submission.json文件提交至C-Eval官方进行获取,具体请参考C-Eval官方提交流程。