PaddleNLP SKEP 模型汇总与实战指南:预训练权重、配置详解与下游任务使用
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本篇指南以 PaddleNLP 仓库 中 SKEP 模型文档 为主体系统梳理 PaddleNLP 当前支持的 SKEPSentiment Knowledge Enhanced Pre-training情感知识增强预训练系列模型的预训练权重、模型规模与语言类型并结合仓库源码configuration.py、modeling.py、tokenizer.py与测试用例test_modeling.py深入讲解配置参数含义、模型架构、下游任务适配与实战调用方式。读完本文你将能够快速选取合适的 SKEP 预训练权重理解其内部超参数的作用并直接在情感分类、情感要素抽取如 SKEP-ERNIE 用于情感分析任务流等场景中完成加载与微调。一、SKEP 模型与预训练权重总览SKEP 是面向情感分析场景的预训练模型。PaddleNLP 在其模型库中提供了基于 ERNIE 与 RoBERTa 两种骨干网络训练的 SKEP 大模型权重覆盖中文与英文两种语言。根据 PaddleNLP 官方模型汇总文档当前支持的 SKEP 预训练权重如下表所示预训练权重Pretrained Weight语言Language模型细节Details of the Modelskep_ernie_1.0_large_ch中文24 层、1024 隐层维度、16 注意力头、约 336M 参数基于 ERNIE 模型ernie_1.0训练skep_ernie_2.0_large_en英文24 层、1024 隐层维度、16 注意力头、约 336M 参数基于 ERNIE 模型ernie_2.0_large_en训练skep_roberta_large_en英文24 层、1024 隐层维度、16 注意力头、约 355M 参数基于 RoBERTa 模型roberta_large_en训练上述三个权重分别覆盖「中文情感分析」「英文 ERNIE 骨干」「英文 RoBERTa 骨干」三种需求是 PaddleNLP 生态中 SKEP 系列的标准预训练入口。在 SKEP 预训练配置 中这三个权重名均被注册在SKEP_PRETRAINED_INIT_CONFIGURATION与SKEP_PRETRAINED_RESOURCE_FILES_MAP中可直接通过from_pretrained加载。二、预训练权重的架构配置详解虽然三个权重同为「24 层、1024 隐层、16 头」的大模型规格但它们在词表大小、位置编码长度、激活函数与 token_type 处理上存在关键差异。下表数据全部取自 configuration.py 中的SKEP_PRETRAINED_INIT_CONFIGURATION配置项skep_ernie_1.0_large_chskep_ernie_2.0_large_enskep_roberta_large_envocab_size128003052250265hidden_size102410241024num_hidden_layers242424num_attention_heads161616intermediate_size409640964096hidden_actrelugelugeluhidden_dropout_prob0.10.10.1attention_probs_dropout_prob0.10.10.1max_position_embeddings512512514type_vocab_size440initializer_range0.020.020.02pad_token_id001这些差异直接决定了模型的输入处理方式中文权重skep_ernie_1.0_large_ch词表较小12800使用relu激活并保留 4 类token_type_ids可用于区分上下句等片段信息pad_token_id 0。英文 ERNIE 权重skep_ernie_2.0_large_en词表扩大为 30522与标准 ERNIE 英文词表一致激活函数改为gelu同样保留 4 类 token type。英文 RoBERTa 权重skep_roberta_large_en词表最大50265GPT-2 风格的 BPE 词表max_position_embeddings为 514比另外两者多 2用于容纳 BOS/EOS 特殊标记且type_vocab_size 0——意味着该模型不使用 token type embeddings输入 token_type_ids 会被忽略详见下文「嵌入层实现」。从模型参数规模看文档标注的中文/英文 ERNIE 骨干版本约 336M 参数RoBERTa 骨干版本约 355M 参数这与其更大的词表嵌入矩阵一致。三、SkepConfigSKEP 模型配置类的字段与默认值SkepConfig继承自 PaddleNLP 的PretrainedConfig见 configuration.py用于定义 SKEP 模型的完整架构。其构造参数的默认值即对应skep_ernie_1.0_large_ch的规格核心字段含义如下参数默认值说明vocab_size12800词表大小决定inputs_ids可表示的 token 数量hidden_size1024嵌入层、编码器层与池化层的隐层维度num_hidden_layers24Transformer 编码器层数num_attention_heads16每层注意力头数intermediate_size4096前馈网络FFN中间维度输入先由hidden_size投影到intermediate_size再投影回来hidden_actrelu编码器与池化层使用的非线性激活函数支持gelu、relu等 Paddle 支持的激活函数hidden_dropout_prob0.1嵌入层与编码器中全连接层的 dropout 概率attention_probs_dropout_prob0.1多头注意力中注意力权重的 dropout 概率max_position_embeddings512最大序列长度可设为 512/1024/2048 等type_vocab_size4传入SKEPModel的token_type_ids的词表大小initializer_range0.02正态初始化器的标准差pad_token_id0填充 token 在词表中的索引SkepConfig还定义了属性映射attribute_map {dropout: classifier_dropout, num_classes: num_labels}兼容统一配置接口。在代码中实例化一个默认配置即可得到一个 SKEP-large 风格模型from paddlenlp.transformers import SKEPModel, SkepConfig # 初始化一个 SKEP 配置默认对应 skep_ernie_1.0_large_ch 规格 configuration SkepConfig() # 用该配置初始化一个随机权重的模型 model SKEPModel(configuration) # 读取模型配置 configuration model.config四、模型架构与嵌入层实现要点SKEP 的模型结构在 modeling.py 中实现核心组件包括SkepEmbeddings词嵌入 位置嵌入 可选token type 嵌入的组合层见 modeling.py。SkepPooler对首 token 隐层状态做线性变换 tanh激活的池化层见 modeling.py。SkepPretrainedModel/SkepModel通过register_base_model注册的基座模型见 modeling.py。三个下游任务头SkepForSequenceClassification、SkepForTokenClassification、SkepCrfForTokenClassification。从源码看SkepEmbeddings有一个值得注意的实现细节当type_vocab_size 0时即 RoBERTa 骨干版本模型不会创建token_type_embeddings此时若仍传入token_type_ids会打印警告 There is no need to pass the token type ids to SKEP based on RoBERTa model 并直接忽略该输入见 modeling.py。因此在使用skep_roberta_large_en时无需构造 token_type_ids。另外SkepModel的注意力掩码支持past_key_values_length增量推理位置编码可通过paddle.cumsum动态生成见 modeling.py为序列长度变化与缓存式生成提供了灵活性。五、下游任务分类头与 CRF 结构SKEP 在 PaddleNLP 中不仅提供基座模型还封装了三种常用的任务头全部位于 modeling.py1. SkepForSequenceClassification序列分类在池化输出之上叠加一个线性分类器适用于情感二分类/多分类等整句判别任务见 modeling.py。其前向逻辑为SkepModel输出 → 取pooled_output位置 1→ dropout →nn.Linear(hidden_size, num_labels)得到 logits。当传入labels时会按problem_type自动选择损失函数num_labels 1→ 回归任务使用MSELoss标签为整数且num_labels 1→ 单标签分类使用CrossEntropyLoss标签为浮点多标签场景→ 使用BCEWithLogitsLoss。官方示例取自源码 docstringimport paddle from paddlenlp.transformers import SkepForSequenceClassification, SkepTokenizer tokenizer SkepTokenizer.from_pretrained(skep_ernie_2.0_large_en) model SkepForSequenceClassification.from_pretrained(skep_ernie_2.0_large_en) inputs tokenizer(Welcome to use PaddlePaddle and PaddleNLP!) inputs {k: paddle.to_tensor([v]) for (k, v) in inputs.items()} logits model(**inputs)2. SkepForTokenClassificationToken 级分类在编码器输出的每个位置的隐层状态上叠加线性分类器适用于命名实体识别等序列标注任务见 modeling.py。与前者的区别在于分类器的输入不是池化输出而是逐位置的hidden_states标签形状为(batch_size, sequence_length)。3. SkepCrfForTokenClassificationCRF 增强的序列标注该变体在 token 分类的基础上引入条件随机场CRF解码见 modeling.py。从导入依赖可以看到模型通过paddlenlp.layers.crf.LinearChainCrf与LinearChainCrfLoss实现线性链 CRF并使用 Viterbi 解码Paddle 版本 ≥ 2.2.0 时使用paddle.text.ViterbiDecoder否则回退到 PaddleNLP 自带的paddlenlp.layers.crf.ViterbiDecoder见 modeling.py。CRF 头能够显式建模标签之间的转移约束在情感要素aspect/opinion抽取这类标签强相关任务上通常能获得更一致的标注序列。六、Tokenizer 说明SKEP 使用SkepTokenizer见 tokenizer.py其__all__中仅导出该类。对于英文 RoBERTa 骨干版本分词器内部使用 GPT-2 风格的 BPE 编码BpeEncoder实现了bytes_to_unicode、get_pairs与字节级 BPE 合并算法见 tokenizer.py默认 unk token 为|endoftext|对于中文 ERNIE 骨干版本则基于 WordPiece/基本分词逻辑。实际使用时统一通过SkepTokenizer.from_pretrained(skep_ernie_1.0_large_ch)等接口按权重名加载对应分词器无需关心内部实现差异。七、实战加载权重并微调综合上述信息一个完整的 SKEP 实战流程如下import paddle from paddlenlp.transformers import ( SkepTokenizer, SkepForSequenceClassification, ) # 1. 选择权重中文情感分类用 skep_ernie_1.0_large_ch model_name skep_ernie_1.0_large_ch # 2. 加载分词器与模型自动下载预训练权重 tokenizer SkepTokenizer.from_pretrained(model_name) model SkepForSequenceClassification.from_pretrained(model_name, num_labels2) # 3. 构造输入分类任务可不传 token_type_idsERNIE 骨干会补零 inputs tokenizer(这款手机性价比很高非常满意) inputs {k: paddle.to_tensor([v]) for k, v in inputs.items()} # 4. 前向推理 model.eval() with paddle.no_grad(): logits model(**inputs) print(logits)仓库中的单元测试完整覆盖了上述能力tests/transformers/skep/test_modeling.py对SkepModel、SkepForSequenceClassification、SkepForTokenClassification、SkepCrfForTokenClassification四类模型进行前向与梯度测试测试器默认以小规模配置如 5 层、32 隐层快速验证逻辑正确性见 test_modeling.pytests/transformers/skep/test_tokenizer.py验证分词器行为此外tests/taskflow/test_sentiment_analysis.py表明 SKEP 也被用于 PaddleNLP Taskflow 的情感分析能力中。八、小结如何选择合适的 SKEP 权重使用场景推荐权重关键考虑中文情感分析/情感要素抽取skep_ernie_1.0_large_ch中文词表12800relu激活约 336M 参数英文情感分类ERNIE 骨干skep_ernie_2.0_large_en英文词表30522gelu激活约 336M 参数英文序列标注/需要 BPE 分词skep_roberta_large_enGPT-2 风格 BPE 词表50265约 355M 参数无 token type选择时只需关注语言与分词风格中文任务固定选用skep_ernie_1.0_large_ch英文任务若需 token type 语义如句子对任务选用skep_ernie_2.0_large_en若以 RoBERTa 风格 BPE 输入为主则选用skep_roberta_large_en。所有权重均可通过 PaddleNLP 的from_pretrained统一接口加载配合SkepConfig可进一步调整序列长度、dropout 等训练超参数实现开箱即用的 SKEP 下游任务微调。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP SqueezeBERT 模型汇总与实战指南预训练权重、分组卷积架构与下游任务使用PaddleNLP SqueezeBERT 模型汇总与实战指南预训练权重、分组卷积架构与下游任务使用 本文以 PaddleNLP 官方模型汇总文档 docs人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP ELECTRA 模型库深度指南预训练权重汇总、源码实现与下游任务实战PaddleNLP ELECTRA 模型库深度指南预训练权重汇总、源码实现与下游任务实战 导读 本文以 PaddleNLP 官方模型库文档 https://l人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP LayoutLM 模型汇总与实战指南预训练权重、配置解析与源码级使用详解PaddleNLP LayoutLM 模型汇总与实战指南预训练权重、配置解析与源码级使用详解 本文聚焦 PaddleNLP 中对微软 LayoutLM 系列模人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考