# C-Eval 评测脚本 此 C-Eval 评测脚本修改自[ymcui/Chinese-LLaMA-Alpaca](https://github.com/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 - ntrain:few_shot=True 时,指定 few-shot 实例的数量(5-shot:ntrain=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.json`和`summary.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 为正确的数量。