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

PaddleNLP 中的 NeZha 模型:预训练权重清单与相对位置编码实现解析

发布时间:2026/9/23 17:07:35 来源:云帆数科 栏目:资讯中心
PaddleNLP 中的 NeZha 模型:预训练权重清单与相对位置编码实现解析
PaddleNLP 中的 NeZha 模型预训练权重清单与相对位置编码实现解析【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLPNeZha哪吒是华为诺亚方舟实验室提出的中文预训练语言模型其核心创新在于使用**相对位置编码Relative Position Encoding**替代 BERT 使用的绝对位置编码以提升长距离依赖建模能力。本文基于 PaddleNLP 开源仓库的 NeZha 模块docs/en/model_zoo/transformers/NeZha/contents.rst完整梳理仓库当前支持的预训练权重清单并结合 源码 深入解析配置参数、相对位置编码的实现原理、分词器与六大下游任务模型类帮助读者在 PaddleNLP 中快速加载、微调与部署 NeZha。一、PaddleNLP 支持的 NeZha 预训练权重总览PaddleNLP 文档给出了一张 NeZha 模型摘要表汇总了当前支持的 NeZha 预训练模型、对应语言及架构参数。下表完整继承并整理自该文档预训练权重语言模型结构细节nezha-base-chinese中文12 层 Transformer、768 隐藏维度、12 注意力头、约 108M 参数在中文语料上训练nezha-large-chinese别名nezha-cn-12L768H中文24 层 Transformer、1024 隐藏维度、16 注意力头、约 336M 参数在中文语料上训练nezha-en-12L768H英文12 层 Transformer、768 隐藏维度、16 注意力头、约 108M 参数在英文语料上训练注文档中nezha-en-12L768H与nezha-cn-12L768H为历史命名的别名。从当前仓库源码看实际注册在配置与权重下载映射表NEZHA_PRETRAINED_INIT_CONFIGURATION与NEZHA_PRETRAINED_RESOURCE_FILES_MAP见 configuration.py中的标准模型名共有 4 个模型名hidden_size层数注意力头intermediate_size词表大小最大位置编码nezha-base-chinese7681212307221128512nezha-base-wwm-chinese7681212307221128512nezha-large-chinese10242416409621128512nezha-large-wwm-chinese10242416409621128512其中带wwm后缀的模型使用**全词掩码Whole Word Masking**策略预训练。权重以.pdparams格式存储由PretrainedModel.from_pretrained()自动下载详见下方资源映射代码片段NEZHA_PRETRAINED_RESOURCE_FILES_MAP { model_state: { nezha-base-chinese: https://bj.bcebos.com/paddlenlp/models/transformers/nezha/nezha-base-chinese.pdparams, nezha-large-chinese: https://bj.bcebos.com/paddlenlp/models/transformers/nezha/nezha-large-chinese.pdparams, nezha-base-wwm-chinese: https://bj.bcebos.com/paddlenlp/models/transformers/nezha/nezha-base-wwm-chinese.pdparams, nezha-large-wwm-chinese: https://bj.bcebos.com/paddlenlp/models/transformers/nezha/nezha-large-wwm-chinese.pdparams, } }中文模型共享同一个词表文件vocab.txt大小 21128分词器初始化配置均为do_lower_caseFalse中文无需转小写。二、NeZha 模块在仓库中的代码布局PaddleNLP 将 NeZha 作为标准 Transformer 模型族实现源码集中在paddlenlp/transformers/nezha/目录下configuration.pyNeZhaConfig配置类及预训练初始化配置、权重资源映射modeling.pyNeZhaModel骨干模型与 5 个下游任务模型类共 1179 行tokenizer.pyNeZhaTokenizer分词器init.py统一导出modeling与tokenizer中的全部符号。同时在 paddlenlp/transformers/init.py 中通过from .nezha.configuration import *等语句将NeZhaConfig、全部模型类与NeZhaTokenizer注册进paddlenlp.transformers顶层命名空间因此用户可直接from paddlenlp.transformers import NeZhaModel使用。测试用例位于 tests/transformers/nezha/包含test_modeling.py与test_tokenizer.py两个测试文件。三、NeZhaConfig核心配置参数全解析NeZhaConfig继承自PretrainedConfigmodel_type nezha。其全部构造参数及默认值如下见 configuration.py参数默认值含义vocab_size21128词表大小定义input_ids可表示的 token 种类embedding_size128词嵌入维度预训练初始化配置中未覆盖用于自定义模型hidden_size768编码器层与池化层的隐藏维度num_hidden_layers12Transformer 编码器层数num_attention_heads12每层注意力头数intermediate_size3072前馈网络中间层维度hidden_actgelu编码器与池化层激活函数hidden_dropout_prob0.1全连接层 dropout 概率attention_probs_dropout_prob0.1注意力概率 dropout 比例max_position_embeddings512最大序列长度max_relative_position64相对位置编码的最大相对距离NeZha 特有type_vocab_size2token_type_ids词表大小句对区分initializer_range0.02权重矩阵正态初始化标准差layer_norm_eps1e-12LayerNorm 分母防除零小量classifier_dropout0.1分类头 dropout 比例pad_token_id/bos_token_id/eos_token_id0 / 2 / 3特殊 token 的 IDuse_cacheTrue是否使用 KV 缓存供生成/解码场景其中max_relative_position与use_relative_position是 NeZha 区别于经典 BERT 的关键参数。当use_relative_positionTrue默认时模型不学习可训练的位置嵌入而是在注意力计算中以正弦函数形式动态注入相对位置信息。3.1 与 BERT 系配置的属性映射NeZhaConfig通过attribute_map建立兼容映射configuration.pyattribute_map: Dict[str, str] {dropout: classifier_dropout, num_classes: num_labels}这使得从其他框架如 HuggingFace 风格配置迁移权重时dropout、num_classes等字段能被自动翻译为 PaddleNLP 侧的参数名便于跨生态导入导出。四、核心机制相对位置编码在 NeZhaAttention 中的实现NeZha 最核心的差异在注意力层。NeZhaAttentionmodeling.py在标准 Self-AttentionQ/K/V 线性投影 → 缩放点积 → Softmax → 加权求和基础上额外引入了两个方向的相对位置偏置4.1 相对位置嵌入表的生成generate_relative_positions_embeddings()modeling.py以正弦/余弦函数构造大小为(2 * max_relative_position 1, head_size)的嵌入表for pos in range(vocab_size): for i in range(depth // 2): embeddings_table[pos, 2 * i] np.sin(pos / np.power(10000, 2 * i / depth)) embeddings_table[pos, 2 * i 1] np.cos(pos / np.power(10000, 2 * i / depth))同时用distance_mat range_mat - range_mat.T计算 token 两两之间的相对距离矩阵并裁剪到[-max_relative_position, max_relative_position]区间默认 ±64随后做 one-hot 编码与查表得到形状为[seq_len, seq_len, head_size]的相对位置矩阵。这个表在初始化时一次性生成、无需训练更新属于函数式位置编码Sinusoidal与裁剪相对距离的组合。4.2 双向注入key 侧与 value 侧在前向传播中modeling.py相对位置被注入两次key 侧注意力分数修正将 query 与相对位置矩阵做paddle.matmul得到key_position_scores加到原始注意力分数上再除以sqrt(head_size)、叠加 mask、过 Softmaxattention_scores attention_scores key_position_scores_r_t attention_scores attention_scores / math.sqrt(self.attention_head_size) attention_scores attention_scores attention_maskvalue 侧上下文加权修正将 Softmax 后的注意力概率与相对位置矩阵做矩阵乘得到value_position_scores再加回加权上下文context_layervalue_position_scores paddle.matmul(attentions_probs_r, relations_values) ... context_layer context_layer value_position_scores_r_t这种分数 上下文双通道注入方式正是 NeZha 论文中区别于其他相对位置编码变体的关键设计能让模型在计算注意力权重时感知 token 间相对距离同时通过 value 侧直接向输出注入位置信息缓解绝对位置编码在长序列上的外推瓶颈。4.3 嵌入层相对位置模式下的结构差异NeZhaEmbeddingsmodeling.py根据use_relative_position决定是否创建position_embeddingsif not self.use_relative_position: self.position_embeddings nn.Embedding(config.max_position_embeddings, config.hidden_size)即默认相对位置模式下嵌入层只含 word embeddings token type embeddings位置信息完全交由注意力层处理若关闭该开关则退回 BERT 式的可学习绝对位置嵌入。五、NeZhaTokenizerBasicTokenizer WordPiece 两级分词NeZhaTokenizertokenizer.py采用经典的两级流水线BasicTokenizer负责标点切分、大小写处理等基础清洗WordPieceTokenizer依据vocab.txt做子词切分未知词回退到[UNK]。其_tokenize实现tokenizer.py依次调用两级分词器并拼接子词结果。特殊 token 约定为[CLS]、[SEP]、[PAD]、[UNK]、[MASK]序列格式为单序列[CLS] X [SEP]句对[CLS] A [SEP] B [SEP]官方示例输出tokenizer.pyfrom paddlenlp.transformers import NeZhaTokenizer tokenizer NeZhaTokenizer.from_pretrained(nezha-base-chinese) inputs tokenizer(欢迎使用百度飞桨) # {input_ids: [101, 3614, 6816, 886, 4500, 4636, 2428, 7607, 3444, 8013, 102], # token_type_ids: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}中文场景下所有模型均配置do_lower_caseFalse即不做转小写处理。此外分词器还实现了build_offset_mapping_with_special_tokens、create_token_type_ids_from_sequences、get_special_tokens_mask等方法支持序列标注等需要 offset mapping 的任务。六、模型家族从骨干到六大下游任务modeling.py 定义了完整的模型层级__all__见第 46-54 行模型类用途输出头NeZhaModel骨干模型输出原始 hidden states无register_base_model注册NeZhaForPretraining预训练任务MLM NSPNeZhaLMPredictionHeadseq_relationship线性层NeZhaForSequenceClassification句子级分类/回归GLUE 类任务[CLS]池化 分类线性层NeZhaForTokenClassificationToken 级分类NER 类任务逐 token 分类线性层NeZhaForQuestionAnswering抽取式问答SQuAD 类输出start_logits/end_logitsNeZhaForMultipleChoice多项选择RocStories/SWAG 类每个选项打分6.1 骨干结构Embeddings → Encoder → PoolerNeZhaModelmodeling.py由三部分组成NeZhaEmbeddings词嵌入 token type 嵌入相对位置模式下无绝对位置嵌入NeZhaEncodernum_hidden_layers个NeZhaLayer堆叠每层含NeZhaAttention带相对位置注入 FFNhidden_size → intermediate_size → hidden_sizeGELU 激活且两个子层都采用Pre-LN 后的残差结构LayerNorm 在残差加和之后NeZhaPooler取[CLS]位置向量过nn.Tanh得到pooled_output。forward中通过output_hidden_states、output_attentions、return_dict三个开关控制返回内容可返回每层 hidden states 与注意力权重用于可视化/蒸馏也可返回BaseModelOutputWithPoolingAndCrossAttentions结构化解耦输出。6.2 权重初始化与参数共享NeZhaPretrainedModel._init_weightsmodeling.py将nn.Linear与nn.Embedding权重按initializer_range0.02的正态分布初始化并固定LayerNorm的epsilon1e-12。而NeZhaForPretraining的 MLM 预测头复用词嵌入权重embedding_weights参数指向word_embeddings.weight即经典的权重绑定设计减少参数量并提升预训练稳定性。6.3 分类模型的损失函数自动推导以NeZhaForSequenceClassificationmodeling.py为例当传入labels时模型会根据num_labels与标签 dtype 自动选择损失num_labels1用 MSE回归整型标签用交叉熵单标签分类否则用BCEWithLogitsLoss多标签分类。七、快速上手加载模型与推理7.1 加载骨干模型import paddle from paddlenlp.transformers import NeZhaModel, NeZhaTokenizer tokenizer NeZhaTokenizer.from_pretrained(nezha-base-chinese) model NeZhaModel.from_pretrained(nezha-base-chinese) inputs tokenizer(欢迎使用百度飞浆!, return_tensorspt) output model(**inputs)from_pretrained会自动从 BOS 下载model_state.pdparams与config.json到本地缓存首次运行需要网络连接。加载后可用model.config访问完整配置。7.2 直接实例化自定义配置from paddlenlp.transformers import NeZhaConfig, NeZhaModel # 基于默认 nezha-base 风格配置随机初始化 configuration NeZhaConfig() model NeZhaModel(configuration) print(model.config.model_type) # nezha7.3 加载下游任务模型以抽取式问答为例源码 docstring 示例from paddlenlp.transformers import NeZhaForQuestionAnswering, NeZhaTokenizer tokenizer NeZhaTokenizer.from_pretrained(nezha-base-chinese) model NeZhaForQuestionAnswering.from_pretrained(nezha-base-chinese) inputs tokenizer(欢迎使用百度飞浆!, return_tensorspt) outputs model(**inputs) start_logits, end_logits outputs[0], outputs[1]八、测试验证模型与分词器的一致性保障仓库为 NeZha 提供了完整的单元测试位于 tests/transformers/nezha/test_modeling.pyNeZhaModelTester构造小型随机配置NeZhaModelTest继承ModelTesterMixin验证骨干输出 shape 与数值正确性并针对序列分类、token 分类、问答、多项选择四种下游头分别编写测试test_for_sequence_classification等另含test_model_from_pretrained验证真实预训练权重可加载test_tokenizer.py验证分词、special token 拼接与 offset mapping 行为。读者在tests/transformers/nezha/目录可找到验证 NeZha 前向、反向与预训练加载的完整参考实现是深入理解各模型类输入输出约定的最佳入口。九、使用注意事项输入张量input_ids、token_type_ids需为int64形状[batch_size, sequence_length]attention_mask支持 int/float/bool 三种类型模型内部会统一转为(1.0 - mask) * -10000.0的负无穷偏置见 modeling.py。序列长度上限预训练配置的max_position_embeddings512超过该长度需自行做长文本切分或位置编码扩展。相对位置距离max_relative_position64表示模型只感知 ±64 以内的相对距离超出部分统一截断到边界值。预训练资源当前仓库注册的中文模型为 base/large 各含 wwm 变体共 4 个文档中出现的nezha-cn-12L768H、nezha-en-12L768H属于历史别名若需使用英文 NeZha 权重建议核对官方模型库的最新可用名称。不要同时传入input_ids与inputs_embeds二者互斥源码中会显式抛出ValueError。十、小结通过本文可以掌握PaddleNLP 中 NeZha 的完整预训练权重清单base/large、中文/英文、WWM 变体、NeZhaConfig每个配置参数的语义与默认值、相对位置编码在注意力层分数 上下文双向注入的源码级实现、两级分词器的行为约定以及覆盖六大任务的模型家族与对应测试。若需在中文 NLP 任务上快速获得优于传统 BERT 的基线可直接从nezha-base-chinese或nezha-large-chinese起步配合 PaddleNLP 下游任务示例 完成微调与部署。【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Matlab火灾检测系统:烟雾与火焰双通道融合算法实战
Matlab火灾检测系统:烟雾与火焰双通道融合算法实战

简介:这份资源是一套基于Matlab实现的火灾检测系统源码包,面向计算机视觉、图像处理与人工智能方向的学习者和开发者,用于解决烟雾与火焰的自动识别问题。系统分为烟雾检测和火焰检测两个模块,可应用于监控视频的实时或离线火源监… · 2026/9/23 17:07:35

基于SSM框架的医疗器械设备租赁报修借用管理系统设计与实现
基于SSM框架的医疗器械设备租赁报修借用管理系统设计与实现

做设备管理系统的同行应该都有同感:医疗机构里设备管理真正让人头疼的,不是台账清不清楚,而是流程通不通畅。SSM260是一套基于SSM框架(Spring SpringMVC MyBatis)开发的医疗器械设备租赁报修借用管理系统&#xff0c… · 2026/9/23 17:07:34

2026铜川电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐
2026铜川电气检测机构排名 TOP5 CMA 资质机构提供防爆设备检测+防爆安全检测 联系方式推荐

铜川的电气防爆检测机构近年来如雨后春笋般涌现,但化工园区、油库加油站、矿山厂区、制药企业以及危化品仓储场所的负责人心里都清楚——鱼龙混杂的市场里,大量无资质机构出具的检测报告根本过不了应急管理部门的核查。小编实地走访筛选了本地正规第三方… · 2026/9/23 17:07:28

阶乘算法核心:小T的魔法数字与末尾零计数法
阶乘算法核心:小T的魔法数字与末尾零计数法

开学第一周,ACM社团的新生群里就炸开了锅,好几个大一小朋友都在刷同一道题:ZZULIOJ 2871,题目名很唬人,叫“小T的魔法数字”,标签是“阶乘算法(大一水平)”。说实话,光看… · 2026/9/23 17:53:27

3个坑让你彻底搞懂waste用法 从入门到精通
3个坑让你彻底搞懂waste用法 从入门到精通

3个坑让你彻底搞懂waste用法 从入门到精通 面试时被问“waste”到底指什么,是不是瞬间大脑一片空白?很多后端开发在复习基础概念时,往往死记硬背了“内存泄漏”或“CPU空转”,却答不上来具体在代码里是怎么产生的。这种只知其名、不知其理… · 2026/9/23 17:53:27

SPI通信协议详解:从时序模式到DMA实战与故障排查
SPI通信协议详解:从时序模式到DMA实战与故障排查

在嵌入式开发里摸爬滚打这么多年,SPI 这名字几乎天天见。它是串行数据传输总线里真正的中流砥柱,单片机、传感器、Flash 存储、甚至 FPGA 和主控芯片之间的高速通信,十有八九都离不开它。我最早接触 SPI 是从 STM32F103 上用软件模拟时序点亮… · 2026/9/23 17:53:21

vercel/ai 多框架接入取舍
vercel/ai 多框架接入取舍

项目定位 vercel/ai 的官方描述很直接:The AI Toolkit for TypeScript,由 Next.js 创作者打造,目标是构建 AI 应用与 agent。README 说明该库由 Vercel 与 Next.js 团队成员创建,并接受开源社区贡献,话题标签覆盖 anth… · 2026/9/23 17:53:21

沉头孔与埋头孔的本质区别:功能逻辑而非刀具角度
沉头孔与埋头孔的本质区别:功能逻辑而非刀具角度

1. 从车间老师傅的一句“打错了”说起我在机加工车间跟老师傅学徒那会儿,第一次被叫去打沉头孔,图纸上标的是“锪Φ1290”,我麻利地换上90锪钻,转速调到800rpm,进给也按常规来——结果师傅过来一看,手一摆&… · 2026/9/23 17:53:21

AI写代码前先写方案:从订单查询接口看提示词工作流
AI写代码前先写方案:从订单查询接口看提示词工作流

说实话,我见过太多人打开 AI 编程助手,第一句话就是“帮我写一个订单查询接口”。AI 秒回一段看起来像模像样的代码,贴进项目,编译通过,接口也能返回数据。然后呢?没鉴权、缓存该失效时不失效、数据库连接串… · 2026/9/23 17:53:08

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

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

企业微信二维码