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

PaddleNLP 千言-问题匹配鲁棒性评测:基于 ERNIE-Gram 与 R-Drop 的基线实战指南

发布时间:2026/9/25 18:05:13 来源:云帆数科 栏目:资讯中心
PaddleNLP 千言-问题匹配鲁棒性评测:基于 ERNIE-Gram 与 R-Drop 的基线实战指南
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文以 PaddleNLP 仓库中slm/examples/text_matching/question_matching示例为主线系统讲解 2021 CCF BDCI「千言-问题匹配鲁棒性评测」的基线方案如何使用 ERNIE-Gram 预训练模型、结合 R-Drop 正则化策略搭建单塔 Point-wise 匹配模型并给出完整的数据准备、训练、预测与提交评测流程。读完本文你将掌握一套可复现、可扩展的问题匹配鲁棒性评测基线并理解 R-Drop 的源码级实现原理。赛题背景为什么问题匹配需要「鲁棒性」评测问题匹配Question Matching任务的目标是判断两个自然问句之间的语义是否等价是自然语言处理领域的重要研究方向同时在信息检索、智能客服等真实业务场景中具有很高的商业价值。近年来神经网络模型虽然在一些标准的问题匹配评测集合上已取得与人类相仿甚至超越人类的准确性但在处理真实应用场景时性能会大幅下降——模型甚至会在人类很容易判断的简单问题上出错既影响产品体验也造成相应的经济损失。官方文档给出了四组典型失败样例问题1问题2标签(Label)Model婴儿吃什么蔬菜好婴儿吃什么绿色蔬菜好01关于牢房的电视剧关于监狱的电视剧10心率过快有什么问题心率过慢有什么问题01黑色裤子配什么上衣黑色上衣配什么裤子01可以看出真实场景中的问句往往带有口语化表达、错别字、近义词替换、词序调整等扰动模型在标准同分布测试集上的高准确率并不能真实反映其在开放场景下的能力。当前大多数问题匹配任务采用单一指标、在同分布的测试集上评测模型这种评测方式可能夸大模型能力且缺乏对模型鲁棒性的细粒度优劣势评估。本次评测正是聚焦于问题匹配模型在真实应用场景中的鲁棒性从词汇理解、句法结构、错别字、口语化、对话理解五个维度检测模型能力从而发现模型不足、推动语义匹配技术发展。竞赛基于千言数据集采用了哈尔滨工业大学深圳的LCQMC和BQ数据集、OPPO 的小布对话短文本数据集以及百度的DuQM数据集从多维度、多领域出发全面评价模型鲁棒性。基线评测效果ERNIE-Gram R-Drop 方案本项目分别基于 ERNIE-1.0、Bert-base-chinese、ERNIE-Gram 三个中文预训练模型训练了单塔 Point-wise 匹配模型其中基于 ERNIE-Gram 的模型效果显著优于另外两个预训练模型。在此基础上还在 ERNIE-Gram 之上评测了 R-Drop 正则化策略——该策略的核心思想是对同 1 个训练样本多次前向网络得到的输出加上正则化的 Loss 约束以稳定网络在不同 Dropout 随机路径下的输出分布。官方开源了效果最好的 2 个策略对应的 checkpoint 作为竞赛基线方案即 ERNIE-Gram 预训练模型、R-Drop 系数分别为 0.0 与 0.1 的两个模型可下载模型复现评测结果。各基线在开发集与 Test-A/B 上的准确率如下模型rdrop_coefdev acctest-A acctest-B accernie-1.0-base0.086.9676.2077.50bert-base-chinese0.086.9376.9077.60ernie-gram-zh0.087.6680.8081.20ernie-gram-zh0.187.9180.2080.80ernie-gram-zh0.287.4780.1081.00从表格可以看到rdrop_coef0.0的 ERNIE-Gram 在 Test-A/Test-B 上取得最高准确率而rdrop_coef0.1在开发集上最优87.91说明 R-Drop 系数需要在开发集上细致调优。ERNIE-Gram 是百度提出的基于显式 n-gram 掩码的预训练模型其模型配置定义可见于 paddlenlp/transformers/ernie_gram/configuration.py其中包含ernie-gram-zh预训练权重入口。注意仓库当前版本中train.py/predict.py默认加载的预训练模型为ernie-3.0-medium-zh见 train.py如需复现 README 中基于 ERNIE-Gram 的基线结果可将代码中的AutoModel.from_pretrained与AutoTokenizer.from_pretrained参数改为ernie-gram-zh。代码结构说明question_matching示例的代码结构十分精简四个 Python 文件各司其职question_matching/ ├── model.py # 匹配模型组网 ├── data.py # 训练样本的数据读取、转换逻辑 ├── predict.py # 模型预测脚本输出测试集的预测结果: 0,1 └── train.py # 模型训练评估model.py 定义QuestionMatching网络预训练模型 Dropout 二分类线性层并内嵌 R-Drop 双前向 KL 损失计算data.py 负责从 TSV 文本读取句子对、构造 DataLoader并提供convert_example将文本转换为 token idstrain.py 完成训练、验证集评估、checkpoint 保存与最优模型挑选predict.py 加载训练好的参数对测试集逐批预测输出 0/1 结果文件。数据准备本项目使用竞赛提供的LCQMC、BQ、OPPO这 3 个数据集的训练集合集作为训练集使用这 3 个数据集的验证集合集作为验证集。运行如下命令生成项目所需的训练集与验证集参赛时可探索其他训练/验证集组合不必与基线完全一致cat ./data/train/LCQMC/train ./data/train/BQ/train ./data/train/OPPO/train train.txt cat ./data/train/LCQMC/dev ./data/train/BQ/dev ./data/train/OPPO/dev dev.txt训练集数据格式为 3 列text_a \t text_b \t label样例如下喜欢打篮球的男生喜欢什么样的女生 爱打篮球的男生喜欢什么样的女生 1 我手机丢了我想换个手机 我想买个新手机求推荐 1 大家觉得她好看吗 大家觉得跑男好看吗 0 求秋色之空漫画全集 求秋色之空全集漫画 1 晚上睡觉带着耳机听音乐有什么害处吗 孕妇可以戴耳机听音乐吗? 0验证集数据格式与训练集相同开初婚未育证明怎么弄 初婚未育情况证明怎么开 1 谁知道她是网络美女吗 爱情这杯酒谁喝都会醉是什么歌 0 男孩喝女孩的尿的故事 怎样才知道是生男孩还是女孩 0 这种图片是用什么软件制作的 这种图片制作是用什么软件呢 1数据读取逻辑对应 data.py 中的read_text_pair按\t切分每行非测试模式要求 3 列并产出{query1, query2, label}测试模式则接受 2 列无标签。convert_example调用 tokenizer 将query1/query2编码为input_ids与token_type_ids句对输入训练时额外拼接label。模型训练运行如下命令即可复现基于 ERNIE-Gram 的基线模型4 卡 GPU 分布式训练$ unset CUDA_VISIBLE_DEVICES python -u -m paddle.distributed.launch --gpus 0,1,2,3 train.py \ --train_set train.txt \ --dev_set dev.txt \ --device gpu \ --eval_step 100 \ --save_dir ./checkpoints \ --train_batch_size 32 \ --learning_rate 2E-5 \ --rdrop_coef 0.0可配置参数说明对应 train.py 中的 argparse 定义常用参数如下参数说明默认值train_set训练集文件路径必填无dev_set验证集数据文件路径必填无rdrop_coefR-Drop 正则化 KL-Loss 的系数为 0.0 时不使用 R-Drop 策略0.0train_batch_size批处理大小需结合显存调整显存不足时适当调低32eval_batch_size验证/预测时的批大小128learning_rateFine-tune 的最大学习率5e-5weight_decay控制正则项力度的参数用于防止过拟合0.0epochs训练轮次3eval_step每隔多少训练 step 做一次验证集评估100save_step模型保存间隔 step 数10000max_seq_lengthtoken 化后最大输入序列长度超出截断、不足补齐256max_steps若大于 0指定总训练步数-1warmup_proportion学习率 warmup 比例如 0.1 表示前 10% 训练 step 中学习率从 0 线性增长到 learning_rate之后缓慢衰减0.0init_from_ckpt模型参数路径用于热启动/恢复模型训练Noneseed随机种子1000device训练设备可选cpu或gpu使用 gpu 时通过--gpus指定卡号gpu训练流程见do_train读取train_set/dev_set→ 加载预训练模型与 tokenizer → 构建 train/dev DataLoader → 初始化QuestionMatching模型 → 使用 AdamW 优化器bias 与 LayerNorm 参数不做 weight decay 带 warmup 的线性衰减学习率 → 每eval_step步在验证集上评估准确率。其中 warmup 调度由 PaddleNLP 的 LinearDecayWithWarmup 实现warmup 阶段学习率从 0 线性升至最大值之后从最大值线性衰减至 0。模型保存与最优模型选择程序运行时自动进行训练与评估并在训练过程中将模型保存到指定的save_dir中。每次在验证集上评估后程序会比较当前指标是否优于历史最优若优于则存储当前模型否则不存储。因此训练结束后模型存储路径下step 数最大的模型对应验证集指标最高的模型一般选择该模型进行预测。保存目录结构示例checkpoints/ ├── model_10000 │ ├── model_state.pdparams │ ├── tokenizer_config.json │ └── vocab.txt └── ...NOTE如需恢复模型训练可设置init_from_ckpt例如init_from_ckptcheckpoints/model_100/model_state.pdparams。加载逻辑见 train.py通过paddle.load读取 state dict 后调用model.set_dict注入。R-Drop 的模型组网与损失计算原理QuestionMatching的前向逻辑model.py清晰体现了 R-Drop 的实现方式输入句子对经过预训练模型得到cls_embedding1经 Dropout 后由二分类线性层产出logits1当rdrop_coef 0且非评估模式时对同一输入再走一次前向得到logits2并计算kl_loss RDropLoss(logits1, logits2)训练时总损失为交叉熵 kl_loss * rdrop_coef见 train.py评估时do_evaluateTrue跳过第二次前向仅返回logits1。对称 KL 损失由 PaddleNLP 的 RDropLoss 实现对p取log_softmax与q的softmax计算 KL 散度再反向计算一次最终取两者均值loss (p_loss q_loss) / 2。该损失约束两次带 Dropout 随机性的前向输出分布一致从而降低模型对随机 Dropout 路径的敏感度、提升泛化与鲁棒性。开始预测训练完成后在指定的 checkpoints 路径下会自动保存验证集评估指标最高的模型。运行如下命令生成预测结果$ unset CUDA_VISIBLE_DEVICES python -u \ predict.py \ --device gpu \ --params_path ./checkpoints/model_10000/model_state.pdparams \ --batch_size 128 \ --input_file ${test_set} \ --result_file predict_result其中test_set为竞赛测试集文件其数据格式为 2 列text_a \t text_b无标签。predict.py会按批加载数据、逐批前向得到 logitspredict.py随后np.argmax(y_probs, axis1)取预测类别逐行写入结果文件每行一个 0 或 1。输出预测结果示例0 1 0 1提交进行评测将生成的predict_result文件按照竞赛要求格式化命名后提交至评测平台即可在 Test-A/Test-B 上获得与基线一致的评测结果用于验证复现效果并进一步探索改进方案如调整 R-Drop 系数、更换预训练模型、尝试多模型融合等。Reference[1] Liang, Xiaobo, Lijun Wu, Juntao Li, Yue Wang, Qi Meng, Tao Qin, Wei Chen, Min Zhang, and Tie-Yan Liu. R-Drop: Regularized Dropout for Neural Networks. ArXiv:2106.14448 [Cs], June 28, 2021.进一步阅读与复现资源模型组网可参考 model.py数据转换逻辑见 data.py训练与预测脚本分别为 train.py 与 predict.pyR-Drop 损失通用实现位于 paddlenlp/losses/rdrop.py。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 单塔文本匹配实战基于 ERNIE-Gram 的 Point-wise 与 Pair-wise 训练范式PaddleNLP 单塔文本匹配实战基于 ERNIE Gram 的 Point wise 与 Pair wise 训练范式 本文是 PaddleNLP 仓库中人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 中 ERNIE-Gram 静态图参数名匹配与权重转换指南matching_param_namePaddleNLP 中 ERNIE Gram 静态图参数名匹配与权重转换指南matching_param_name 导读 ERNIE Gram 是百度开源的人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP基于 JAX 的优化器鲁棒性评估实战深入解析 robust_optim 项目基于 JAX 的优化器鲁棒性评估实战深入解析 robust_optim 项目 导读 robust_optim 是 Google Research 开源仓库 g人工智能深度学习NLP计算机视觉强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

《动手学深度学习》第二版:可运行的深度学习操作系统
《动手学深度学习》第二版:可运行的深度学习操作系统

1. 这不是一本普通教材:它是一套可运行的深度学习操作系统如果你在搜索引擎里输入“李沐 深度学习”,排在最前面的几乎必然是《动手学深度学习》。但很多人点进去后发现——这根本不是传统意义上“翻着看”的课本,而是一套自带引擎、能直接启… · 2026/9/25 18:04:49

Torch-FL 实战:让多元 AI 芯片即插即用 PyTorch
Torch-FL 实战:让多元 AI 芯片即插即用 PyTorch

1. 多元芯片跑 PyTorch 的真实困境搞过深度学习部署的人大概都有这种体会:手里攒了一堆不同品牌的加速卡,想在同一套 PyTorch 训练脚本里把它们都用起来,结果发现每换一种芯片就得改一遍代码、重装一遍环境、重新调一遍算子。这事儿说起来简单… · 2026/9/25 18:04:49

基于Python的搜索引擎设计与实现:从爬虫到倒排索引的完整实战
基于Python的搜索引擎设计与实现:从爬虫到倒排索引的完整实战

做毕设的时候,我选了“基于Python的搜索引擎设计与实现”这个题目。说实话,刚开始心里挺没底的,因为搜索引擎这东西听起来就像是个巨头才能搞的项目,百度谷歌那是多大的工程。但真正把一个能用的搜索引擎从零写出来之后&#xff0… · 2026/9/25 18:04:43

学信奥的孩子有哪些数学优势
学信奥的孩子有哪些数学优势

学信奥的孩子,会在数学能力上形成6项普通校内学习很难练到的差异化优势,完全适配你家四年级孩子的理科成长节奏: 🧩 问题拆解能力远超同龄人 信奥题不会像校内数学那样把知识点直接标出来,而是把多类数学考点揉成复杂现… · 2026/9/25 18:40:22

免费安全的 - 二维码转换工具
免费安全的 - 二维码转换工具

AI编写小工具还是很方便的,做了一个二维码转换器,可以直接生成二维码,也可以安全的扫描二维码,展示二维码嵌入的文本信息。 欢迎大家尝试! 演示地址(多语言版)https://env-00jy6ton3kte-stati… · 2026/9/25 18:40:16

MySQL+Qt医疗预约系统源码解析与数据库设计实战
MySQL+Qt医疗预约系统源码解析与数据库设计实战

简介:这是一份基于MySQL和Qt开发的医疗预约系统完整项目,适合计算机相关专业学生用于课程大作业、毕业设计或初期项目立项演示。压缩包共22个文件,以cpp、h、ui、qrc等Qt工程文件为核心,配合png、jpg图片展示数据库表设计、ER图、… · 2026/9/25 18:40:09

让你的Claude Code从“能用”到“能打”:CLAUDE.md 配置实战
让你的Claude Code从“能用”到“能打”:CLAUDE.md 配置实战

/* 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 18:40:09

CPU底层原理:一条指令从取指到多核调度的完整链路
CPU底层原理:一条指令从取指到多核调度的完整链路

CPU 到底是怎么把程序跑起来的,很多人能背出“取指、译码、执行”六个字,但真到 CPU 跑满、缓存未命中、多核调度、天梯图选购的时候,又会开始凭感觉。这篇文章不铺垫背景,直接沿着一条指令从软件到硬件、从启动到完成的主线&… · 2026/9/25 18:40:03

SQL Server课程设计实战包:可部署、可答辩、带排错记录
SQL Server课程设计实战包:可部署、可答辩、带排错记录

简介:本资源是一份面向计算机相关专业学生的SQL Server课程设计实践材料,聚焦学生选课系统数据库的完整实现与教学解析,适用于课程设计、课程作业、项目演示及数据库初学者进阶学习。压缩包共6个文件,含1个核心SQL建库建表脚本&am… · 2026/9/25 18:40:03

数值优化(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

了解更多?预约专属演示

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

企业微信二维码