PaddleNLP RoFormer 模型全解析:预训练权重清单、配置参数与旋转位置编码源码实现
人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载RoFormer 是苏剑林提出的一种将**旋转位置编码Rotary Position Embedding, RoPE**引入 Transformer 的预训练语言模型在 PaddleNLP 中提供了中英文多规格的预训练权重与完整的建模实现。本文基于docs/en/model_zoo/transformers/RoFormer/contents.rst的模型清单展开并结合 configuration.py、modeling.py、tokenizer.py 及 tests/transformers/roformer 测试用例逐项讲解每个预训练权重的结构参数、RoFormer-S 生成模型的训练配置以及旋转位置编码在多头注意力中的底层实现帮助你完成从模型选型到直接调用的全流程。一、RoFormer 预训练权重总览PaddleNLP 当前共支持 10 个 RoFormer 预训练权重覆盖中文词级 / 字级 / 相似度微调变体与英文判别器 / 生成器两类场景。下表汇总了每个权重对应的预训练权重名称、语言以及模型结构细节预训练权重语言模型详情roformer-chinese-small中文6 层、384 隐藏维、6 头注意力约 30M 参数RoFormer 中文 Small 模型roformer-chinese-base中文12 层、768 隐藏维、12 头注意力约 124M 参数RoFormer 中文 Base 模型roformer-chinese-char-small中文6 层、384 隐藏维、6 头注意力约 15M 参数RoFormer 中文 Char字级Small 模型roformer-chinese-char-base中文12 层、768 隐藏维、12 头注意力约 95M 参数RoFormer 中文 Char字级Base 模型roformer-chinese-sim-char-ft-small中文12 层、768 隐藏维、12 头注意力约 95M 参数RoFormer 中文相似度微调字级 Ft Small 模型roformer-chinese-sim-char-ft-base中文12 层、768 隐藏维、12 头注意力约 95M 参数RoFormer 中文相似度微调字级 Ft Base 模型roformer-chinese-sim-char-small中文12 层、768 隐藏维、12 头注意力约 95M 参数RoFormer 中文相似度字级 Small 模型roformer-chinese-sim-char-base中文12 层、768 隐藏维、12 头注意力约 95M 参数RoFormer 中文相似度字级 Base 模型roformer-english-small-discriminator英文12 层、256 隐藏维、4 头注意力约 13M 参数RoFormer 英文 Small 判别器roformer-english-small-generator英文12 层、256 隐藏维、4 头注意力约 13M 参数RoFormer 英文 Small 生成器注roformer-chinese-sim-char-*系列为在相似度任务上进一步微调fine-tuned的字级模型pool_act被设置为linear并定义了eos_token_id见下文源码解析。这些权重的加载入口统一通过RoFormerModel.from_pretrained(...)自动完成其对应的初始化配置与权重下载映射定义在 configuration.py 的ROFORMER_PRETRAINED_INIT_CONFIGURATION与ROFORMER_PRETRAINED_RESOURCE_FILES_MAP中词表文件vocab.txt的下载映射则定义在 tokenizer.py。二、各预训练权重的精确配置参数源码级原文档的模型详情表是层数/隐藏维/头数/参数量级别的概览而每个权重在仓库中都有精确到每个超参数的初始化配置。以下内容直接来源于 configuration.py 的ROFORMER_PRETRAINED_INIT_CONFIGURATION可在from_pretrained时自动生效配置项chinese-smallchinese-basechar-smallchar-basesim-char-ft-basesim-char-baseenglish-small-discriminatorenglish-small-generatorvocab_size5000050000120001200012000120003052230522embedding_size384768384768768768128128hidden_size38476838476876876825664num_hidden_layers61261212121212num_attention_heads612612121241intermediate_size1536307215363072307230721024256hidden_actgelugelugelugelugelugelugelugelumax_position_embeddings5121536512512512512128128type_vocab_size22222222initializer_range0.020.020.020.020.020.020.020.02pad_token_id00000000rotary_valueFalseFalseFalseFalseFalseFalseTrueTrueeos_token_id----102102--pool_acttanhtanhtanhtanhlinearlineartanhtanh从表中可以读出几个关键差异词级 vs 字级roformer-chinese-small/base的vocab_size为 50000词级配合 jieba 分词char系列vocab_size为 12000字级无需 jieba。英文小模型roformer-english-small-discriminator的hidden_size256、4 头roformer-english-small-generator的hidden_size64、1 头两者rotary_valueTrue即对 Value 也施加旋转位置编码其max_position_embeddings仅为 128对应原文档上下文窗口 512/128的限制。roformer-chinese-base是唯一支持 1536 长上下文的模型max_position_embeddings1536其余中文模型为 512。相似度微调系列sim-char-*设置了eos_token_id102与pool_actlinear这与它们作为生成/相似度模型的特殊用途有关。RoFormerConfig 参数说明RoFormerConfig继承自PretrainedConfig在 configuration.py 中定义核心构造参数及默认值如下参数默认值说明vocab_size30522词表大小决定input_ids可表示的 token 数embedding_size768词嵌入维度默认与hidden_size一致若不同则自动插入embeddings_project投影层hidden_size768编码器层与池化层的维度num_hidden_layers12Transformer 编码器层数num_attention_heads12每层注意力头数intermediate_size3072FFN 中间层维度hidden_actgelu编码器与池化层激活函数支持gelu、relu、silu、gelu_newhidden_dropout_prob0.1全连接层 dropout 概率attention_probs_dropout_prob0.1注意力权重 dropout 概率max_position_embeddings1536最大序列长度type_vocab_size2token_type_ids的段 ID 词表大小initializer_range0.02权重初始化截断正态分布标准差layer_norm_eps1e-12LayerNorm 的 epsilonpad_token_id0padding token 的 ideos_token_id102eos token 的 idpool_acttanh池化层激活函数rotary_valueFalse是否对 Value 施加旋转位置编码model_type roformer并通过attribute_map将dropout映射到classifier_dropout、num_classes映射到num_labels便于与通用训练框架对接。三、RoFormer-S 英文小型生成模型完整训练配置原文档针对英文场景的 RoFormer-S即roformer-english-small-generator所对应的开源配置给出了一张完整的训练配置表现完整保留并整理如下配置项参数说明Layers / Hidden / Heads12 / 64 / 112 层 Transformer、64 维隐藏层、1 个注意力头Parameters5M总参数量约 5 百万ArchitectureRoFormer-S基于旋转位置编码的小型生成式架构适用于英文场景Training DataOpenWebText基于公开网络文本约 40GB进行预训练Training Steps100k在 8xV100 GPU 上训练约 10 万步Batch Size128每步处理 128 个样本Context Window512支持最大 512 个 token 的上下文窗口OptimizerAdamW使用 AdamW 优化器学习率 5e-5权重衰减 0.01LicenseApache 2.0模型权重遵循 Apache 2.0 协议Recommended UseText Generation适用于开放域文本生成、问答、摘要等任务Limitations512 tokens受限于上下文长度可能无法处理超长文本Ethical Considerations-可能生成存在偏见或不准确内容需谨慎使用该表中的大部分超参数可以在仓库配置中找到对应实现roformer-english-small-generator的hidden_size64、num_attention_heads1与12/64/1完全一致见 configuration.py在 modeling.py 中RoFormerForCausalLM提供了从左到右的语言建模next token prediction头配合prepare_inputs_for_generation与update_model_kwargs_for_generation方法modeling.py即构成文本生成推荐用途的推理链路。四、架构与源码级原理旋转位置编码如何融入多头注意力RoFormer 的核心创新在于用**旋转位置编码RoPE**替代传统 Transformer 的绝对位置嵌入。在 PaddleNLP 的 modeling.py 中这条链路由三个组件构成1.RotaryPositionEmbedding旋转位置编码层定义于 modeling.pyclass RotaryPositionEmbedding(nn.Layer): def __init__(self, dim, max_position_embeddings512): super().__init__() inv_freq 1.0 / (10000 ** (paddle.arange(0, dim, 2, dtypepaddle.get_default_dtype()) / dim)) t paddle.arange(max_position_embeddings, dtypepaddle.get_default_dtype()) freqs paddle.matmul(t.unsqueeze(1), inv_freq.unsqueeze(0)) self.register_buffer(sin, freqs.sin(), persistableFalse) self.register_buffer(cos, freqs.cos(), persistableFalse)实现要点频率计算inv_freq 1 / (10000^(2i/dim))与原始 RoPE 论文一致即沿维度方向从高频到低频递减的旋转角频率预计算 sin/cos 表对位置t与频率做外积后一次性预计算sin、cos缓冲max_position_embeddings决定了位置表长度旋转操作forward输入形状为[batch_size, num_heads, seqlen, head_dim]将最后一维按奇偶下标拆分为x1, x2执行二维旋转x1, x2 x[..., 0::2], x[..., 1::2] return paddle.stack([x1 * cos - x2 * sin, x1 * sin x2 * cos], axis-1).flatten(-2, -1)这对应矩阵形式[cos_nθ, -sin_nθ; sin_nθ, cos_nθ] · [x1, x2]ᵀ即对每个位置施加与位置 n 相关的旋转使得相对位置信息被内嵌进点积注意力中这也是 RoFormer 无需可学习位置嵌入表的原因。2.MultiHeadAttentionWithRotary带旋转的注意力定义于 modeling.py继承nn.MultiHeadAttention并注入旋转位置编码class MultiHeadAttentionWithRotary(nn.MultiHeadAttention): def __init__(self, embed_dim, num_heads, dropout0.0, kdimNone, vdimNone, need_weightsFalse, rotary_valueFalse, max_position_embeddings512): super().__init__(embed_dim, num_heads, dropout, kdim, vdim, need_weights) self.rotary_value rotary_value self.rotary RotaryPositionEmbedding(self.head_dim, max_position_embeddings) def _prepare_qkv(self, query, key, value, cacheNone): q self.q_proj(query) q paddle.reshape(xq, shape[0, 0, self.num_heads, self.head_dim]) q paddle.transpose(xq, perm[0, 2, 1, 3]) k, v self.compute_kv(key, value) offset 0 if cache is None else cache.k.shape[2] # rotary q,k,v q self.rotary(q, offsetoffset) k self.rotary(k, offsetoffset) if self.rotary_value: v self.rotary(v, offsetoffset) ...关键设计旋转作用于 Q、K可选 Vrotary_valueTrue时对 V 也施加旋转这正是英文 small 系列discriminator/generator的配置推理缓存偏移offset解码时通过offset cache.k.shape[2]从预计算表中切片保证增量解码时新 token 的旋转角度与历史位置正确衔接Cache 拼接解码自注意力场景下将新 K/V 与历史cache.k/cache.v沿序列维拼接实现 KV-Cache 加速。3.TransformerEncoderLayerWithRotary与RoFormerModelTransformerEncoderLayerWithRotarymodeling.py将上述旋转注意力替换进标准nn.TransformerEncoderLayer并把rotary_value、max_position_embeddings记录到_config。RoFormerModelmodeling.py进一步组装RoFormerEmbeddings词嵌入 token_type 段嵌入 LayerNorm Dropoutmodeling.py没有可学习的位置嵌入表当embedding_size ! hidden_size时自动插入embeddings_project线性投影层编码器为多层TransformerEncoderLayerWithRotary堆叠RoFormerPoolermodeling.py取首 token[CLS]的隐藏状态经线性层 pool_act激活得到池化输出默认attention_mask生成逻辑当未显式传入 mask 时自动把pad_token_id位置置为-1e4modeling.py。五、面向任务的下游模型家族RoFormerPretrainedModelmodeling.py是下载与权重映射的抽象基类base_model_prefix roformer并通过_get_name_mappings定义了从 HuggingFace 权重名到 Paddle 权重名的完整映射含transpose转置规则兼容 HF 权重直接转换。在此基础上PaddleNLP 提供了 7 个可直接使用的模型类模型类任务场景输出结构关键实现位置RoFormerModel基础编码器输出 raw hidden-statesBaseModelOutputWithPoolingAndCrossAttentionsmodeling.pyRoFormerForSequenceClassificationGLUE 等分类/回归任务SequenceClassifierOutput支持单标签/多标签分类与回归三种 lossmodeling.pyRoFormerForTokenClassificationNER 等序列标注任务TokenClassifierOutputmodeling.pyRoFormerForQuestionAnsweringSQuAD 等抽取式问答QuestionAnsweringModelOutputstart/end logits平均 span lossmodeling.pyRoFormerForMultipleChoiceRocStories/SWAG 等多项选择MultipleChoiceModelOutputlogits 重塑为[batch, num_choices]modeling.pyRoFormerForMaskedLM掩码语言建模BERT 式预训练MaskedLMOutputLM 头与词嵌入权重共享modeling.pyRoFormerForCausalLM自回归文本生成CausalLMOutputWithCrossAttentions含生成专用输入预处理modeling.py其中RoFormerForMaskedLM与RoFormerForCausalLM共用RoFormerOnlyMLMHead/RoFormerLMPredictionHeadmodeling.py并通过embedding_weightsself.roformer.embeddings.word_embeddings.weight实现LM 头与词嵌入权重共享tied embeddings。六、分词器jieba 词级与字级两种模式RoFormer 中文模型分为词级与字级两种对应的分词策略也不同均由RoFormerTokenizertokenizer.py统一提供词级模型roformer-chinese-small/baseuse_jiebaTrue使用JiebaBasicTokenizer先经 jieba 预分词HMMFalse词表中已有的整词保留、否则按单字拆分tokenizer.py字级模型roformer-chinese-char-*、sim-char-*与英文模型use_jiebaFalse直接使用BasicTokenizerWordpieceTokenizer的经典 BERT 式流水线特殊 token[UNK]、[SEP]、[PAD]、[CLS]、[MASK]输入格式为单句[CLS] X [SEP]、句对[CLS] A [SEP] B [SEP]tokenizer.py各权重的最大输入长度记录在max_model_input_sizes/PRETRAINED_POSITIONAL_EMBEDDINGS_SIZEStokenizer.py中中文模型 512roformer-chinese-base为 1536英文模型 128。七、快速上手加载权重并推理以下示例均来自仓库源码 docstring可直接复制运行首次执行会通过from_pretrained自动下载权重与词表。基础编码器import paddle from paddlenlp.transformers import RoFormerModel, RoFormerTokenizer tokenizer RoFormerTokenizer.from_pretrained(roformer-chinese-char-base) model RoFormerModel.from_pretrained(roformer-chinese-char-base) tokenized_inputs tokenizer(欢迎使用百度飞桨!, return_tensorspd) output model(**tokenized_inputs)掩码语言建模from paddlenlp.transformers import RoFormerForMaskedLM, RoFormerTokenizer tokenizer RoFormerTokenizer.from_pretrained(roformer-chinese-char-base) model RoFormerForMaskedLM.from_pretrained(roformer-chinese-char-base) tokenized_inputs tokenizer(欢迎使用百度飞桨!, return_tensorspd) logits model(**tokenized_inputs)自回归文本生成CausalLMfrom paddlenlp.transformers import RoFormerForCausalLM, RoFormerTokenizer tokenizer RoFormerTokenizer.from_pretrained(roformer-chinese-sim-char-ft-base) model RoFormerForCausalLM.from_pretrained(roformer-chinese-sim-char-ft-base) tokenized_inputs tokenizer(欢迎使用百度飞桨!, return_tensorspd) logits model(**tokenized_inputs) print(logits.shape) # [1, 11, 12000]RoFormerForCausalLM的输出形状为[batch_size, seq_len, vocab_size]其中 vocab 维度为 12000字级词表验证了前文配置表中vocab_size12000的设定。多项选择from paddlenlp.transformers import RoFormerForMultipleChoice, RoFormerTokenizer tokenizer RoFormerTokenizer.from_pretrained(roformer-chinese-char-base) model RoFormerForMultipleChoice.from_pretrained(roformer-chinese-char-base) data [ {question: 如何打开ipad屏幕, answer1: 按音量按钮。, answer2: 按下锁定按钮。, label: 1}, {question: 如何缩进一些文本, answer1: 在开始写之前留一些空格。, answer2: 按空格键。, label: 0}, ] text, text_pair [], [] for d in data: text.append(d[question]); text_pair.append(d[answer1]) text.append(d[question]); text_pair.append(d[answer2]) tokenized_inputs tokenizer(text, text_pair, paddingTrue, return_tensorspd) reshaped_logits model(**tokenized_inputs) print(reshaped_logits.shape) # [2, 2]同理序列分类、Token 分类、抽取式问答分别使用RoFormerForSequenceClassification、RoFormerForTokenClassification、RoFormerForQuestionAnswering传入labels或start_positions/end_positions即可自动计算相应损失可直接接入 PaddleNLP 训练器 进行下游微调。八、测试与验证仓库为 RoFormer 提供了完整的单元测试可作为模型可复现性的验证依据tests/transformers/roformer/test_modeling.py基于ModelTesterMixinConfigTester覆盖RoFormerModel及全部 6 个下游任务模型的输入输出形状、loss 计算与参数初始化其RoFormerModelTester的默认参数batch_size2, seq_length7, hidden_size36, num_hidden_layers6, num_attention_heads6等可用于小规模快速回归tests/transformers/roformer/test_tokenizer.py验证 jieba 词级与字级分词、特殊 token 拼接、offset mapping 等行为。结语本文以 RoFormer 模型清单 为主线完整整理了 PaddleNLP 中 10 个 RoFormer 预训练权重的结构与配置、RoFormer-S 英文生成模型的训练规格并结合源码剖析了旋转位置编码的数学实现、其在多头注意力与 KV-Cache 解码中的衔接方式以及 7 个任务模型与双模式分词器的用法。无论你是要做中文语义相似度、抽取式问答、序列标注还是轻量级英文文本生成都可以依据文中参数表快速选定权重并借助from_pretrained一键加载直接使用。赞分享人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 中的 NeZha 模型预训练权重清单与相对位置编码实现解析PaddleNLP 中的 NeZha 模型预训练权重清单与相对位置编码实现解析 NeZha哪吒是华为诺亚方舟实验室提出的中文预训练语言模型其核心创新在于人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测Obsidian英雄联盟WAD文件编辑的终极免费解决方案Obsidian英雄联盟WAD文件编辑的终极免费解决方案 如果你是《英雄联盟》的模组开发者、游戏资源研究者或是想要深入了解游戏内部结构的玩家那么你一定会遇人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测番茄小说下载器完整指南免费开源工具实现小说离线阅读自由番茄小说下载器完整指南免费开源工具实现小说离线阅读自由 你是否曾经因为网络信号不佳而无法继续阅读番茄小说或者厌倦了阅读过程中频繁弹出的广告干扰番茄小说下载人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测上一篇如何永久保存微信聊天记录3步实现数据自由与智能分析下一篇如何在浏览器中零代码构建AI模型Teachable Machine终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考