新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleNLP XLM 跨语言模型实战:基于 XNLI 的自然语言推断微调与评估

发布时间:2026/9/26 15:56:54来源:尧图网络
PaddleNLP XLM 跨语言模型实战:基于 XNLI 的自然语言推断微调与评估
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文以 PaddleNLP 开源仓库slm/model_zoo/xlm为例系统讲解 XLMCross-lingual Language Model跨语言模型的原理、三种预训练任务CLM/MLM/TLM、PaddleNLP 中的实现架构与注意事项并给出在 XNLI 数据集上完整可运行的单卡训练、多卡训练与 15 语言评估方案。读者读完可以掌握 XLM 模型在 Paddle 生态下的加载、分词、微调与跨语言评估的完整实战流程。XLM 模型简介面向跨语言迁移的预训练范式XLM论文《Cross-lingual Language Model Pretraining》出自 facebook 团队发表于 NeurIPS 2019是一个跨语言预训练模型。其核心思想是把 BERT 式的预训练方法扩展到多种语言通过单语数据上的无监督方法与平行语料上的监督方法训练出共享的多语言表示从而支持跨语言迁移模型只在一个语言如英语上微调即可泛化到其他语言。论文的两种方法分别依赖两类目标无监督方法仅使用单语语料通过因果语言建模CLM或掩码语言建模MLM训练监督方法使用平行双语语料通过新增的翻译语言建模TLM目标训练让模型在学习掩码词预测的同时获得翻译对齐信息。原论文报告的效果作为背景信息该方法在跨语言分类任务上取得当时的最优结果在 XNLI 上以 4.9% 的绝对精度提升刷新了当时的 SOTA在无监督机器翻译 WMT16 英德上取得 34.3 BLEU在有监督 WMT16 罗马尼亚语-英语上取得 38.5 BLEU。本仓库不负责复现这些预训练数值而是提供基于开源预训练权重在 XNLI 上的微调与评估。XLM 论文一共提出三种预训练任务理解它们是读懂后续代码的关键CLMCausal Language Model无监督单语单向LM 训练任务即使用 Transformer 对语言模型做单向因果训练只能利用左侧上下文。MLMMasked Language Model无监督单语双向LM 训练任务与 BERT 一致随机掩码部分 token 并预测。TLMTranslation Language Model有监督翻译 LM 训练任务拼接平行双语语料后执行 MLM期望模型学到翻译对齐信息。这是 XLM 区别于 BERT 的关键创新。上图来自本目录的 framework.jpg左侧 MLM 任务输入为单语言en序列掩码位置需要根据上下文恢复右侧 TLM 任务输入混排了 en/fr 两种语言掩码 token 需要借助另一语言的上下文来预测例如借助法语上下文预测英语的curtains、were这正是 TLM 学习跨语言对齐的方式。从论文到代码PaddleNLP 中的 XLM 实现本目录slm/model_zoo/xlm下包含 XLM 在 XNLI 任务上的完整训练与验证内容目录结构如下slm/model_zoo/xlm/ ├── README.md # README 文档 ├── framework.jpg # 预训练任务示意框架图 ├── xnli_train.py # 自然语言推断训练代码 └── xnli_eval.py # 自然语言推断评估代码模型本体、分词器与配置位于paddlenlp/transformers/xlm/包含四个核心文件configuration.pyXLMConfig与全部预训练权重的初始化配置modeling.pyXLMModel、XLMWithLMHeadModel、XLMForSequenceClassification等模型实现tokenizer.pyXLMTokenizer多语言分词器__init__.py模块导出。XLMModel 的模型结构从 modeling.py 的XLMModel.__init__可以看到标准 Transformer 编码器结构词嵌入与位置嵌入embeddingsvocab_size × hidden_size与position_embeddings位置嵌入可选择正弦式SinusoidalPositionalEmbedding见 modeling.py或可学习式语言嵌入当n_langs 1且use_lang_embeddings为真时额外引入lang_embeddings前向时tensor tensor self.lang_embeddings(langs)见 modeling.py这是 XLM 区分语种、实现跨语言共享表示的关键机制Transformer 层每个层由MultiHeadAttention、两个LayerNorm层内使用 Pre-LN 式残差、TransformerFFN中间维度为 hidden_size×4组成激活函数由config.hidden_act决定默认为 gelu模型仅实现为 encoderif not config.is_encoder: raise NotImplementedError。预训练模型与配置XLM_PRETRAINED_INIT_CONFIGURATION见 configuration.py列出了本仓库支持的 10 个 XLM 预训练权重及其架构参数下表节选关键几项模型名vocab_sizehidden_size层数注意力头n_langsxlm-mlm-en-204830145204812161xlm-mlm-ende-1024646991024682xlm-mlm-enfr-1024641391024682xlm-mlm-enro-1024645921024682xlm-mlm-tlm-xnli15-102495000102412815xlm-mlm-xnli15-102495000102412815xlm-clm-enfr-1024641391024682xlm-clm-ende-1024646991024682xlm-mlm-17-12802000001280161617xlm-mlm-100-128020000012801616100其中xlm-mlm-tlm-xnli15-1024同时使用了 MLM 与 TLM 目标预训练、覆盖 XNLI 的 15 种语言正是本目录微调示例使用的模型。各权重还内置了lang2id语言名到 id映射例如xlm-mlm-tlm-xnli15-1024中en的 id 为 4、zh为 14见 configuration.py。所有预训练模型的最大输入长度为 512max_position_embeddings: 512。模型加载时直接使用from_pretrained预训练权重与vocab.json、merges.txt资源映射见 configuration.py 与 tokenizer.py。可用于多种下游任务的头modeling.py除裸模型外还导出了多种带任务头的模型__all__见 modeling.pyXLMWithLMHeadModelLM 头XLMPredLayer权重与输入嵌入绑定tied embeddings用于 MLM/TLM 预训练XLMForSequenceClassification序列分类头取序列第一个 tokens的隐状态过nn.Linear(hidden_size, num_classes)见 modeling.pyXNLI 微调即使用该类XLMForTokenClassificationtoken 级分类如 NERXLMForQuestionAnsweringSimple抽取式问答输出 start/end logitsXLMForMultipleChoice多项选择。模型实现的注意点与 facebook 官方实现的差异本仓库在复现过程中主要参考了 huggingface 的实现因此与 facebook 官方实现存在以下三点差异实际使用时务必留意token_pair 任务的特殊标记不同huggingface 的 tokenizer 会额外添加s A /s B /s标记而 facebook 的 tokenizer 添加的是/s A /s B /s。本仓库遵循 huggingface 的实现区别在于第一个特殊标记使用s而不是/s。对应代码见 tokenizer.py 的build_inputs_with_special_tokens单序列格式为s X /s双序列如蕴含判断的 premise hypothesis格式为s A /s B /s。不使用 token_type_idfacebook 的 XLM 模型并未使用token_type_id参数因此使用 tokenizer 时需要人工传入return_token_type_idsFalse即tokenizer(text, return_token_type_idsFalse)这样输出中不会包含token_type_id。在 xnli_train.py 的convert_example中可以看到这一写法同时显式返回input_ids与attention_mask作为模型输入。XLMPredLayer 未实现 adaptive softmax考虑到现有已开源预训练权重的 XLM 模型在XLMPredLayer处并未使用adaptive_softmax本仓库仅实现了带cross_entropy的XLMPredLayer见 modeling.py。它的前向逻辑是投影得到词表 logits若提供labels则计算F.cross_entropy平均损失。XLMTokenizer 多语言分词与依赖安装XLM 的多语言分词流程见 tokenizer.py 的_tokenize分语言差异化处理绝大多数语言走 Moses 流水线replace_unicode_punct→ Moses 标点归一化 → 去除不可打印字符 → Moses 分词泰语th使用 PyThaiNLP 分词日语ja使用 KyTea 分词中文zh使用 jieba 分词后接 Moses 流水线分词后可选的do_lowercase_and_remove_accent会统一小写并去除重音最后经过 BPEbpe方法见 tokenizer.py产出子词。convert_tokens_to_string会把/w还原为空格。因此运行 XNLI 训练/评估脚本前需要安装对应的分词依赖# sacremosesMoses 分词器绝大多数语言必需 pip install sacremoses # Thai tokenizer pip install pythainlp # Japanese tokenizerKyTea需要先编译安装 git clone https://github.com/neubig/kytea.git cd kytea autoreconf -i ./configure --prefix$HOME/local make make install pip install kytea # Chinese tokenizer pip install jieba说明原版 XLM 中文分词使用 Stanford Segmenter但由于 JVM 开销较大且将被弃用本仓库与 huggingface 一致改用更快的 jieba。如果需要与原版完全一致的行为可以先用 XLM 官方预处理脚本在外部完成分词再以bypass_tokenizerTrue跳过内置分词见 tokenizer.py 的说明。XLMTokenizer会自动根据预训练权重初始化lang2id/id2lang映射见 tokenizer.py例如xlm-mlm-tlm-xnli15-1024的lang2id覆盖 ar/bg/de/el/en/es/fr/hi/ru/sw/th/tr/ur/vi/zh 共 15 种语言。训练与评估代码中正是通过tokenizer.lang2id[language]构造语言 id 张量。XNLI 自然语言推断任务实战数据集介绍XNLI 是 MNLI 的子集且已被翻译成 14 种不同的语言包含一些低资源语言。与 MNLI 一样目标是预测文本蕴含关系判断句子 A 与句子 B 之间是蕴含entailment、矛盾contradiction还是中性neutral。本示例采用 cross-lingual-transfer 设置仅用英语训练集微调然后在全部 15 种语言的测试集上评估以检验模型的跨语言迁移能力。通用参数释义xnli_train.py/xnli_eval.py通过argparse解析参数定义见 xnli_train.py各参数含义与默认值如下参数默认值释义model_name_or_path必填Fine-tuning 使用的预训练模型及 tokenizer目前支持如xlm-mlm-tlm-xnli15-1024若模型保存在本地可填目录地址如./checkpoint/model_xx/output_dir必填仅训练模型保存路径max_seq_length256最大句子长度超过截断不足 paddinglearning_rate2e-6基础学习率本代码未使用学习率 warmup 与衰减dropout0.1Dropout 比例num_train_epochs5训练轮数logging_steps200日志打印间隔步数save_steps24544模型保存及评估间隔步数batch_size8每次迭代每张卡上的样本数adam_epsilon1e-8Adam 优化器的 epsilonmax_steps-1最大训练步数若num_train_epochs轮的总步数大于该值达到max_steps后提前结束seed42随机数种子devicegpu训练设备gpu/xpu百度昆仑卡/cpuuse_ampFalse是否启用自动混合精度训练scale_loss2**15自动混合精度训练的 loss 缩放系数说明save_steps默认值 24544 对应 XNLI 英语训练集按 batch_size8 划分后的单 epoch 步数因此默认配置下每轮训练末尾会触发一次全 15 语言的评估并保存最优模型。单卡训练python xnli_train.py \ --batch_size 8 \ --model_name_or_path xlm-mlm-tlm-xnli15-1024 \ --save_steps 24544 \ --output_dir outputs首次运行会自动下载预训练权重、vocab.json与merges.txt到本地缓存。训练时数据加载细节英语训练集通过load_dataset(xnli, en, splitstrain)加载xnli_train.py用DistributedBatchSampler分片Tuple(Pad(input_ids), Pad(attention_mask), Stack(labels))完成批内 padding 与堆叠。单卡评估python xnli_eval.py \ --batch_size 8 \ --model_name_or_path outputs/best_model评估脚本会依次对 15 种语言ar、bg、de、el、en、es、fr、hi、ru、sw、th、tr、ur、vi、zh见 xnli_eval.py 的all_languages列表加载测试集并计算 Accuracy最后打印各语言精度与均值test mean acc。多卡训练python -m paddle.distributed.launch --gpus 0,1 --log_dir outputs xnli_train.py \ --batch_size 8 \ --model_name_or_path xlm-mlm-tlm-xnli15-1024 \ --save_steps 24544 \ --output_dir outputs多卡模式下脚本会调用paddle.distributed.init_parallel_env()并将模型包装为paddle.DataParallel见 xnli_train.pybatch_size仍表示每张卡上的样本数日志中的rank_id可用于区分各进程输出。训练核心流程源码解析理解以下三点即可完全掌握训练脚本的内部逻辑语言嵌入的构造无论训练还是评估代码都会用lang_ids paddle.ones_like(input_ids) * tokenizer.lang2id[language]为每个样本构造语言 id训练时固定为英语en与input_ids、attention_mask一起喂给模型xnli_train.py。AMP 混合精度当use_ampTrue时前向置于paddle.amp.auto_cast(custom_white_list[layer_norm, softmax, gelu])中并用paddle.amp.GradScaler(init_loss_scalingargs.scale_loss)做梯度缩放xnli_train.py。周期性多语言评估与最优模型保存每当global_step % save_steps 0或达到总步数时脚本会遍历 15 种语言逐一构建测试 DataLoader 并计算精度取均值后与历史最优比较若刷新最优则在output_dir/best_model下保存模型与 tokenizerxnli_train.py。注意评估时测试集 batch_size 会放大为训练 batch_size 的 4 倍xnli_train.py。评估结果在 XNLI 数据集上微调 cross-lingual-transfer 类型的自然语言推断任务后测试集上的精度如下该结果来自本目录 README.mdModelenfresdeelbgrutrarvithzhhiswurAvgXLM84.679.279.876.976.677.676.271.773.874.571.174.868.869.265.874.7可见英语84.6显著高于平均而低资源语言如 ur 65.8、sw 69.2仍有差距这正是跨语言迁移中典型的“英语高、低资源低”分布。测试与验证仓库在 tests/transformers/xlm/test_modeling.py 提供了 XLM 的自动化测试XLMModelTester负责构建小型随机初始化的模型配置XLMModelTest继承通用ModelTesterMixin覆盖 forward 输出形状、XLMForMultipleChoice、XLMForQuestionAnsweringSimple、XLMForSequenceClassification、XLMForTokenClassification、XLMWithLMHeadModel等各任务头的正确性以及通过from_pretrained加载真实预训练权重的冒烟测试test_modeling.pytests/transformers/xlm/test_tokenizer.py 则覆盖多语言分词的边界行为。读者在修改或二次开发 XLM 相关代码后可参照这些用例回归验证。引用本文所述实现复现过程中主要参考了 huggingface 的 XLM 实现与 facebook 团队的官方 XLM 实现具体差异已在“模型实现的注意点”一节说明。XLM 论文的 Bibtex 引用如下article{lample2019cross, title{Cross-lingual Language Model Pretraining}, author{Lample, Guillaume and Conneau, Alexis}, journal{Advances in Neural Information Processing Systems (NeurIPS)}, year{2019} }赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐基于jiant项目实现跨语言自然语言推理(XNLI)任务基于jiant项目实现跨语言自然语言推理 XNLI 任务 什么是XNLI任务 跨语言自然语言推理 XNLI 是一项重要的多语言理解基准测试它扩展了原始的英语自使用 lm-evaluation-harness 评估跨语言自然语言推断XNLI 任务配置与源码解析使用 lm evaluation harness 评估跨语言自然语言推断XNLI 任务配置与源码解析 导读 本文以 lm evaluation harness人工智能模型评测AI 评测基于BERT的自然语言推理微调实战指南基于BERT的自然语言推理微调实战指南 自然语言推理 Natural Language Inference, NLI 是自然语言处理中的一项重要任务旨在判断两文档教程人工智能深度学习NLP计算机视觉强化学习上一篇免费浏览器资源嗅探工具猫抓5分钟装好完整网页视频一次下全下一篇Vulnserver 上手手册三步跑通你的 Windows 溢出练习靶场创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【AI】AI编程助手配置指南:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine 接入 TaoToken 统一 Key 2026/9/26 16:37:20

【AI】AI编程助手配置指南:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine 接入 TaoToken 统一 Key

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

阅读更多 →
红盟云卡PHP发卡网部署与支付联调实战指南 2026/9/26 16:37:20

红盟云卡PHP发卡网部署与支付联调实战指南

简介:这是一套面向PHP开发者与个人站长的轻量级虚拟商品自动发卡系统源码,适用于搭建微信/支付宝收款的在线密钥分发平台,解决小规模数字商品(如软件授权、会员卡密、API密钥)的自动化售卖与交付问题。资源共2000个文件…

阅读更多 →
Substrate运行时设计原理与企业级区块链开发实战 2026/9/26 16:37:20

Substrate运行时设计原理与企业级区块链开发实战

1. 这不是“另一个区块链框架”:Substrate 是什么,它真正解决的是哪类人的哪类问题Substrate 这个词最近在开发者社区、技术会议甚至投资人简报里出现频率陡增,但很多人第一次听到时,下意识反应是:“哦,又一…

阅读更多 →
Qt+OpenGL加载GLB/OBJ模型:从文件解析到GPU渲染的完整工程实践 2026/9/26 16:37:20

Qt+OpenGL加载GLB/OBJ模型:从文件解析到GPU渲染的完整工程实践

简介:这是一份面向Qt与OpenGL开发者的三维模型加载示例工程,帮助解决在Qt窗口中加载并显示glb、obj等常见模型格式的问题。工程基于模型解析库完成文件读取,配合界面框架与OpenGL渲染管线,适合需要快速实现模型导入、缩放旋转、光…

阅读更多 →
web前端技术Mongoose详解:TaoToken统一Key接入Node与MongoDB的ODM配置骨架 2026/9/26 16:37:14

web前端技术Mongoose详解:TaoToken统一Key接入Node与MongoDB的ODM配置骨架

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

阅读更多 →
养龙虾、油价、专业调整、AI办公:热闹背后的底层逻辑 2026/9/26 16:37:14

养龙虾、油价、专业调整、AI办公:热闹背后的底层逻辑

1. 全网爆火的“养龙虾”,到底在养什么?最近“养龙虾”这个词频繁刷屏,从短视频平台的热搜到微信群里的讨论,几乎处处都能看到有人在“养龙虾”。但你仔细看会发现,真正在鱼塘边、稻田里挥汗如雨的养殖户其实没几个&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉