首页/新闻资讯/正文详情

PaddleNLP 评测指南:C-Eval 中文大模型评测脚本的完整使用与源码解析

发布时间:2026/9/25 3:35:51 来源:云帆数科 栏目:资讯中心
PaddleNLP 评测指南:C-Eval 中文大模型评测脚本的完整使用与源码解析
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文围绕 PaddleNLP 仓库中 slm/examples/benchmark/ceval/README.md 提供的 C-Eval 评测脚本展开覆盖从数据下载、目录组织到运行预测脚本的全部操作步骤并深入 eval.py、model_evaluator.py 的源码讲解约束解码、正则答案抽取、few-shot/CoT 提示构造等底层机制帮助读者独立完成中文大模型在 C-Eval 上的标准评测并正确解读输出结果。一、评测数据集准备C-Eval 是一个面向中文的学科能力评测基准涵盖 52 个学科subject按 subject_mapping.json 划分为 STEM理科、Social Science社科、Humanities人文学与 Other其他四大类。评测脚本修改自 ymcui/Chinese-LLaMA-Alpaca 项目文件头部注释见 eval.py评测口径与该社区实践保持一致。首先需要从 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文件夹放置到评测脚本所在目录下仓库中为 slm/examples/benchmark/ceval/README 中称为scripts/ceval目录。从 eval.py 的主循环可以看到脚本按如下相对路径读取数据subject_mapping.json与脚本同目录脚本启动时会断言其存在data/val/{subject}_val.csv默认评测的验证集data/test/{subject}_test.csv--do_test True时评测的测试集data/dev/{subject}_dev.csv--few_shot True时用于构造 few-shot 示例。subject_list直接由data/val目录下的*_val.csv文件列表动态生成因此data目录中缺少哪个学科的 CSV评测范围就会相应缩小。二、运行预测脚本与参数说明进入脚本目录后运行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} \结合 eval.py 中argparse的定义含各参数默认值完整参数说明如下参数类型/取值默认值说明--model_name_or_pathstr必填待评测模型所在目录合并 LoRA 后的 HF 格式模型--cotFalse/TrueFalse是否使用 chain-of-thought思维链示例格式--few_shotFalse/TrueTrue是否使用 few-shotFalse时ntrain不起作用--ntrain别名-kint5few-shot 实例数量5-shot 即ntrain5--with_promptFalse/TrueFalse模型输入是否包含针对 Alpaca 模型的指令模板--constrained_decodingFalse/TrueTrue答案抽取方案True走 logits 约束解码False走正则表达式抽取详见第四节--temperaturefloat0.2模型解码时的温度透传给ModelEvaluator并写入生成配置--n_timesint1评测重复次数在output_dir下生成take0~take{n_times-1}子目录--do_save_csvFalse/TrueFalse是否将模型生成结果、提取的答案等内容保存为 csv 文件--output_dirstr必填评测结果的输出路径--do_testFalse/TrueFalseFalse时在 val 集上测试本地可对照标准答案计算准确率True时在 test 集上测试盲测答案记为NA用于按官方提交规范产出submission.json两个值得注意的实现细节约束解码强制单轮当--constrained_decoding True时eval.py 中执行args.n_times max(args.n_times, 1)即按 logits 取最大值的约束解码是确定性过程重复多次没有意义代码会自动把次数钳制为 1。模型加载方式model_evaluator.py 中ModelEvaluator通过paddlenlp.transformers的AutoTokenizer与AutoModelForCausalLM以float16精度加载模型并额外编码出A/B/C/D四个 token 的 idA_id~D_id为约束解码方案做准备。因此要求模型路径必须是 PaddleNLP 可加载的 HF 格式权重目录。三、评测主流程eval.py 的实现eval.py 中main()的执行流程如下读取subject_mapping.json遍历data/val目录动态构建subject_list根据--do_test决定读取data/val/{subject}_val.csv还是data/test/{subject}_test.csv作为评测集开启 few-shot 时同时读取对应的dev集对每个学科调用evaluator.eval_subject(...)传入few_shot、cot、with_prompt、constrained_decoding等开关返回该学科的准确率correct_ratio与逐题答案answers将全部学科答案写入submission.json并按subject_mapping.json中每个学科的第三项类别归属聚合出 STEM / Social Science / Humanities / Other 四个大类的num与correct计算总体平均后把每个学科的score/num/correct、四大类结果和All汇总字段一并写入summary.json。n_times次评测由 eval.py 最外层的for i in range(args.n_times)驱动每次调用main(..., takei)结果分别落在take{i}子目录中便于对比多次解码采样解码开启时的波动。四、两种答案抽取方案C-Eval 的标准答案是A/B/C/D选项。--constrained_decoding参数控制两种不同的答案抽取策略对应 model_evaluator.py 中eval_subject的分支逻辑方案一constrained_decodingTruelogits 约束解码不进行自回归生成而是只前向一次取最后一个位置的 logits直接比较A、B、C、D四个 token 的得分并取 argmaxwith paddle.no_grad(): logits self.model(**inputs)[0][0, -1, :] choices_logits logits[[self.A_id, self.B_id, self.C_id, self.D_id]].numpy() assert not (np.any(np.isinf(choices_logits)) or np.any(np.isnan(choices_logits))) ans {0: A, 1: B, 2: C, 3: D}[np.argmax(choices_logits)]这种方式结果确定、速度快是官方推荐的评测模式其中的 NaN/Inf 断言用于尽早暴露权重或输入异常。方案二constrained_decodingFalse正则表达式抽取此时调用self.model.generate(...)进行完整自回归生成再由 extract_answer 按以下优先级从生成文本中抽取答案先匹配思维链结尾所以答案是(.?)。仅当匹配结果本身是 A~D 之一时生效依次尝试 8 个中文答案模板正则如答案是([ABCD])、选项([ABCD])正确、([ABCD])是正确的、选择([ABCD])等若都未命中取生成文本中第一个出现的[ABCD]字符再退化为在生成文本中查找四个选项内容文本re.escape后按|组合命中哪个选项内容即判为该选项全部失败时随机返回一个A~D。可以推断非约束解码模式适合评估模型自然输出是否可被解析其分数通常不高于约束解码模式因为正则抽取存在漏匹配风险。五、提示构造few-shot 与 Chain-of-Thought问题格式化format_example 负责把一行 CSV 数据拼成标准文本基础结构为题干 每个选项一行{题干} A. {选项A内容} B. {选项B内容} C. {选项C内容} D. {选项D内容} 答案在此基础上按开关变化cotTrue且作为 few-shot 示例时include_answerTrue答案部分扩展为答案让我们一步一步思考\n{explanation}\n所以答案是{answer}。利用 C-Eval 数据集中的explanation列构造思维链示例with_promptFalse默认时待评测题结尾为答案CoT 模式下为答案让我们一步一步思考\n1.即假设模型已被指令微调过、可直接接答案继续作答with_promptTrue时待评测题结尾改为答案是什么CoT 模式下为答案是什么让我们一步一步思考\n1.即针对 Alpaca 类模型的指令模板风格。few-shot 提示组装generate_few_shot_prompt 以固定引言开头以下是中国关于{subject}考试的单项选择题请选出其中的正确答案。随后从data/dev集取前k条k即--ntrain传-1时取 dev 集全部带答案的示例依次拼接最终输入为history question。基类 Evaluator 还定义了normalize_answer/exact_match等标准答案比对工具用于答案归一化去标点、统一空白、转小写后精确匹配。六、生成参数源码级补充非约束解码路径使用的生成配置在 model_evaluator.py 中是硬编码的命令行仅能调整其中temperatureself.generation_config dict( temperaturetemperature, # 由 --temperature 传入默认 0.2 top_k40, top_p0.9, do_sampleTrue, num_beams1, repetition_penalty1.1, max_new_tokens20, )即采样开启do_sampleTrue、top-k40、top-p0.9、重复惩罚 1.1、最多新生成 20 个 token。这也解释了为什么constrained_decodingFalse时才有必要用n_times重复评测——采样解码每次结果可能不同。七、评测输出解读评测完成后在output_dir下生成take*目录*为0至n_times-1的整数每个目录对应一次完整解码的结果内含submission.json按官方提交规范组织的答案文件结构为学科名 - 题号 - 选项例如{ computer_network: { 0: A, 1: B, ... }, marxism: { 0: B, 1: A, ... }, ... }当--do_test True时由于 test 集无标准答案model_evaluator.py 中answers被置为全NA该文件即为可提交到官方评测的盲测答案summary.json包含 52 个学科、4 个大类STEM / Social Science / Humanities / Other与总体平均的评测结果。每个条目的字段含义为score准确率、num测试样本条数、correct正确数量。文件末尾的All字段显示总体平均效果例如All: { score: 0.36701337295690933, num: 1346, correct: 494.0 }csv 文件可选当--do_save_csv True时每个学科额外输出一个保存模型生成结果model_output列与逐题正误correctness列的 csv 文件model_evaluator.py52 个学科共 52 个 csv便于人工抽查模型输出质量。八、实践建议与注意事项本脚本评测的是静态权重model_name_or_path指向的应为合并 LoRA 后的 HF 格式模型目录不能是未合并的 adapter 目录默认在 val 集上评测--do_test False本地即可对照标准答案得到分数需要产出官方口径的 test 集提交文件时才开--do_test True此时summary.json中的准确率仅作参考答案均为 NA正确数恒为 0约束解码--constrained_decoding True依赖模型词表中A~D为独立单 tokenModelEvaluator构造时用tokenizer.encode(A, add_special_tokensFalse)提取 id若使用非常规分词器需自行确认该假设成立脚本以相对路径读取data/与subject_mapping.json因此必须在 slm/examples/benchmark/ceval/ 目录内执行eval.py模型以float16加载显存需求随模型规模上升大模型评测建议评估单卡显存是否充足。配套文件索引README.md、eval.py、model_evaluator.py、evaluator.py、subject_mapping.json。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐如何使用C-Eval全面测评中文基础模型的终极指南如何使用C Eval全面测评中文基础模型的终极指南 C Eval是一个面向基础模型的中文评估套件旨在全面检验模型在跨学科领域的理解能力。该项目总计包含139大模型人工智能模型评测数据集C-Eval中文AI模型评估套件使用指南C Eval中文AI模型评估套件使用指南 C Eval是一个面向基础模型的中文评估套件旨在全面检验模型在跨学科领域的理解能力。该项目总计包含13948道多选题大模型人工智能模型评测数据集终极指南如何使用C-Eval评估大语言模型的中文能力终极指南如何使用C Eval评估大语言模型的中文能力 C Eval是一个全面的中文评估套件专为基础模型设计涵盖52个学科和四个难度级别共13948道选择大模型人工智能模型评测数据集上一篇Meltano性能优化终极清单提升ELT管道效率下一篇htmlq 安全合规GDPR 数据处理的最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

MindSpeed LLM流式推理实战:分布式在线生成完全指南
MindSpeed LLM流式推理实战:分布式在线生成完全指南

MindSpeed LLM流式推理实战:分布式在线生成完全指南 【免费下载链接】MindSpeed-LLM 昇腾LLM分布式训练框架 项目地址: https://gitcode.com/Ascend/MindSpeed-LLM MindSpeed-LLM 是面向昇腾 NPU 的 LLM 分布式训练框架,除训练外,它还… · 2026/9/25 3:35:51

Axure高保真原型设计:企业能源管理系统从需求到交互落地的关键实践
Axure高保真原型设计:企业能源管理系统从需求到交互落地的关键实践

1. 企业能源管理系统为什么值得用Axure做一版高保真原型1.1 能源管理项目里的两个典型断点在企业能源管理系统这个领域待久了,你会看到一种很常见的场面:业务部门说“我要实时看到全厂水电气热的用能情况”,开发部门理解的是“再堆一个报表页… · 2026/9/25 3:35:44

嵌入式音频编解码实战:libopus在MCU上的移植与性能调优
嵌入式音频编解码实战:libopus在MCU上的移植与性能调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:35:44

什么是谷歌2FA两步验证?如何开启?(保姆级教程)
什么是谷歌2FA两步验证?如何开启?(保姆级教程)

在网络安全日益重要的今天,仅仅依靠一个“强密码”已经无法完全保护账户安全。数据泄露、撞库攻击层出不穷,谷歌2FA(两步验证) 成为了保护数字资产的最后一道防线。 本文将详细介绍什么是两步验证,以及如何手把手开启谷歌账户的2FA功能。 什么是 2FA (Two-Factor Authenti… · 2026/9/25 4:00:39

Kinect V2点云方体体积测量:PCL七步流程与避坑指南
Kinect V2点云方体体积测量:PCL七步流程与避坑指南

简介:这份资源面向计算机视觉、机器人感知方向的毕业设计与课程设计学习者,提供基于Kinect V2深度相机与PCL点云库实现方体目标体积测量的完整工程。项目按捕获点云、空间裁剪、下采样、滤波、平面分割找地面、平面分割找目标顶面、计算面积高度及体积的… · 2026/9/25 4:00:39

谷歌账号登录2FA两步验证码获取教程
谷歌账号登录2FA两步验证码获取教程

很多人在登录自己买到的谷歌账号时,会发现账号开启了2FA,也就是两步验证,在登录时除了邮箱和密码外,需要额外输入一个验证码。 2FA有多种选项可以选,但一般会选择身份验证器(Authenticator)&… · 2026/9/25 4:00:33

实时数据可视化库选型与性能优化:ECharts、uPlot实战对比
实时数据可视化库选型与性能优化:ECharts、uPlot实战对比

做过几个实时监控大屏之后,我对“实时数据可视化库”这个需求算是又爱又怕。爱的是数据流动起来的那股生命力,怕的是实时这两个字背后几乎无穷无尽的坑。这篇文章就用我实际摸爬滚打的经验,跟各位聊聊实时可视化库的底层逻辑、选型思路&#… · 2026/9/25 4:00:27

2026重庆脑肿瘤活检全流程解析:从定位到分子病理
2026重庆脑肿瘤活检全流程解析:从定位到分子病理

脑肿瘤活检这个词,在神经外科圈子里天天被提起,但真要给患者家属讲清楚,很多人还是一头雾水。2026年,重庆的脑肿瘤诊疗正在从“凭影像猜”走向“拿组织说话”,立体定向活检、机器人辅助定位、术中快速病理这些词越来越… · 2026/9/25 4:00:20

GrowthBook Agent 指南体系:.agents/guides 如何为编码代理建立可执行的仓库规范
GrowthBook Agent 指南体系:.agents/guides 如何为编码代理建立可执行的仓库规范

后端前端数据分析数据可视化 【免费下载链接】growthbook Open Source Feature Flags, Experimentation, and Product Analytics 项目地址: https://gitcode.com/gh_mirrors/gr/growthbook 点击查看 免费下载 本篇技术文章基于 GrowthBook 仓库中的 .agents/guides… · 2026/9/25 4:00:14

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码