ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleNLP 中使用 BART 进行文本摘要:模型原理、微调与生成实践

PaddleNLP 中使用 BART 进行文本摘要:模型原理、微调与生成实践 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读本文围绕 slm/examples/text_summarization/bart/README.md 所介绍的 BART 文本摘要示例系统讲解 BART 作为 Seq2Seq 降噪自编码器的模型原理、在 PaddlePaddle 2.2 上的 PaddleNLP 实现、CNN/DailyMail 数据集上的微调流程与摘要生成方法并深入剖析 paddlenlp/transformers/bart 目录下的源码实现。读完本文你将掌握 BART 的结构特性、如何加载预训练模型、如何配置BartConfig完成微调以及如何调用BartForConditionalGeneration进行摘要生成。BART 模型简介BARTBidirectional and Auto-Regressive Transformer是一种Seq2Seq 结构的降噪自编码器denoising autoencoder。其核心训练思想是对原始文本施加多种噪声进行破坏corrupt再让模型学习重建reconstruct原文从而在编码器-解码器框架中同时习得双向语境理解与自回归生成能力。从结构上看BART 使用标准的 Transformer 架构可以看作三类预训练模型的统一泛化形式BERT 的泛化BART 的编码器是双向的bidirectional encoder能够像 BERT 一样建模左右双向上下文GPT 的泛化BART 的解码器是从左到右自回归的left-to-right decoder具备 GPT 式的生成能力其他预训练结构的泛化通过统一的双向编码 自回归解码组合BART 在文本生成类任务如摘要、翻译、对话上表现出色。这种破坏-重建的预训练目标使得 BART 天然适合下游生成类任务文本摘要正是其代表性应用场景之一。本项目概览PaddleNLP 中的 BART 摘要示例slm/examples/text_summarization/bart/README.md所描述的项目是BART 在 PaddlePaddle 2.2 上开源实现的文本摘要示例覆盖了在CNN/DailyMail数据集上进行**微调fine-tuning与摘要生成generation**的完整代码路径。CNN/DailyMail 是英文抽象式摘要领域最经典的基准数据集之一训练样本由新闻报道原文与人工撰写的摘要句对组成用于评估模型在长文档压缩与信息抽取方面的能力。项目以该数据集为微调目标直接面向输入新闻正文、输出简洁摘要这一真实任务形态。在当前仓库中与 BART 直接相关的实现位于模型与配置paddlenlp/transformers/bart/modeling.py、paddlenlp/transformers/bart/configuration.py分词器paddlenlp/transformers/bart/tokenizer.py单元测试tests/transformers/bart/test_modeling.py、tests/transformers/bart/test_tokenizer.py下面分别从预训练权重、模型配置、模型结构、分词器与生成链路几个层面展开。预训练权重与配置BartConfig内置预训练模型清单在 configuration.py 中PaddleNLP 内置了两档 BART 预训练配置bart-base与bart-large对应两套预设超参数参数bart-basebart-largevocab_size5026550265d_model7681024num_encoder_layers/num_decoder_layers6 / 612 / 12encoder_attention_heads/decoder_attention_heads12 / 1216 / 16encoder_ffn_dim/decoder_ffn_dim3072 / 30724096 / 4096dropout/attention_dropout/activation_dropout0.1 / 0.1 / 0.10.1 / 0.1 / 0.1activation_functiongelugelumax_position_embeddings10241024init_std0.020.02scale_embeddingFalseFalse特殊 token idbos/pad/eos/forced_eos/decoder_start0 / 1 / 2 / 2 / 20 / 1 / 2 / 2 / 2两类配置共享 50265 词表与相同的特殊 token 定义bos_token_id0、pad_token_id1、eos_token_id2、forced_eos_token_id2、decoder_start_token_id2。其中decoder_start_token_id2意味着解码器以/seos作为起始 tokenforced_eos_token_id保证生成达到max_length时强制以 eos 收尾。对应的预训练权重映射表BART_PRETRAINED_RESOURCE_FILES_MAP中登记了bart-base.pdparams与bart-large.pdparamsBartModel与BartForConditionalGeneration可通过from_pretrained(bart-base)的方式自动下载加载。BartConfig 关键参数语义BartConfig见 configuration.py继承自PretrainedConfigmodel_type bart。其核心参数在实例化 BART 模型时直接决定架构vocab_size词表大小决定 embedding 矩阵与 LM 输出头的维度默认 50265d_model编码器/解码器各层的隐藏维度默认 768encoder_layers/decoder_layers编码器与解码器的 Transformer 层数默认均为 6注意源码中通过attribute_map将num_encoder_layers等别名映射到encoder_layers/decoder_layers保证与社区配置的兼容encoder_attention_heads/decoder_attention_heads编码器与解码器的注意力头数默认 12encoder_ffn_dim/decoder_ffn_dim编码器与解码器前馈网络的中间维度默认 3072activation_function前馈网络使用的非线性激活函数支持gelu、relu及 PaddlePaddle 支持的激活函数默认geludropout/attention_dropout/activation_dropout全连接层、注意力概率、激活输出的 dropout 比率默认均为 0.1max_position_embeddings模型可接受的最大序列长度默认 1024预训练配置中 base 与 large 均为 1024init_std所有权重矩阵初始化时截断正态分布的标准差默认 0.02scale_embedding是否按d_model的平方根缩放 embedding默认Falseis_encoder_decoderTrue、decoder_start_token_id2、forced_eos_token_id2表明模型为编解码结构并指定解码起始与强制结束 tokenforced_bos_token_id可选配置用于部分摘要任务强制首 token 生成s源码中为兼容旧版 CNN 模型保留了force_bos_token_to_be_generated的向后兼容处理。模型结构源码解析modeling.py 中实现了完整的 BART 模型族顶层类定义包括BartPretrainedModel基类封装权重加载与初始化逻辑BartLearnedPositionalEmbedding可学习位置编码BartEncoder/BartDecoder双向编码器 / 自回归解码器BartModel完整编解码主干BartForConditionalGeneration条件生成模型文本摘要的实际入口以及BartForSequenceClassification、BartForQuestionAnswering等其他任务头BartModel编码器-解码器主干BartModel由BartEncoder与BartDecoder组成二者均基于标准 Transformer 层多头自注意力 前馈网络 LayerNorm 残差连接并共享底层的 token embeddingshared位置编码采用BartLearnedPositionalEmbedding。前向时编码器对input_ids进行双向编码得到encoder_output解码器在此基础上结合decoder_input_ids做自回归解码。BartForConditionalGeneration摘要生成的入口BartForConditionalGenerationmodeling.py在主干之上叠加语言建模头内部持有一个BartModel并创建形状为[vocab_size, d_model]的lm_head_weight参数配合final_logits_bias偏置构成 LM 输出头get_encoder()/get_decoder()暴露编码器与解码器便于与生成框架协同forward接收input_ids、attention_mask、decoder_input_ids、decoder_attention_mask、encoder_output、labels等输入labels用于计算掩码语言建模损失索引为 -100 的 token 被忽略不参与 loss当labelsNone时返回形状为[batch_size, sequence_length, vocab_size]的lm_logits可直接用于解码采样返回值为Seq2SeqLMOutputreturn_dictTrue时或对应元组use_cache开启时可返回 KV cache 加速自回归。快速解码FasterBARTprepare_fast_entry展示了 BART 的快速解码接入点通过FasterBART位于paddlenlp.ops在具备自定义 decoding 库的环境下启用加速解码支持use_fp16_decoding、decoding_lib、enable_fast_encoder等开关。同时源码明确约束了快速解码的适用边界仅支持 top-k 采样或 top-p 采样中的一种二者不能同时启用暂不支持repetition_penalty ! 1.0暂不支持min_length ! 0暂不支持非空的forced_bos_token_id。在常规 CPU/GPU 环境中直接使用标准自回归解码路径即可上述限制仅在启用快速解码时生效。BartTokenizerbyte-level BPE 分词BART 的分词器BartTokenizertokenizer.py基于byte-level Byte-Pair-EncodingBPE继承自GPTTokenizer特殊 token 为sbos/cls、/seos/sep等。其实现要点bytes_to_unicode()构建 UTF-8 字节到 Unicode 字符的可逆映射表这是 byte-level BPE 处理任意文本包括未登录字符的基础get_pairs(word)生成词内相邻符号二元组是标准 BPE merge 过程的核心步骤加载时需提供vocab_file词表映射与merges_filemerge 规则与预训练词表配套使用PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES将bart-base/bart-large的位置编码长度标记为 1024与配置一致。配套的 tests/transformers/bart/test_tokenizer.py 与 tests/transformers/bart/test_modeling.py 覆盖了分词往返一致性、特殊 token 处理、模型前向与生成等关键路径可作为自定义 BART 摘要训练的回归验证参考。文本摘要实战加载、微调与生成1. 加载预训练模型与分词器使用from_pretrained即可加载内置权重import paddle from paddlenlp.transformers import BartForConditionalGeneration, BartTokenizer # 加载 bart-base 预训练权重自动下载 model BartForConditionalGeneration.from_pretrained(bart-base) tokenizer BartTokenizer.from_pretrained(bart-base)bart-base与bart-large均登记在BART_PRETRAINED_INIT_CONFIGURATION与BART_PRETRAINED_RESOURCE_FILES_MAP中可直接指定名称加载。2. 数据准备与微调微调目标为 CNN/DailyMail 数据集的新闻正文 → 摘要句对。训练时构造编解码输入def encode_fn(text, summary): # 编码器输入正文 eos src_ids tokenizer(text, max_length1024, truncationTrue)[input_ids] # 解码器输入摘要前移一位并补 eos作为 decoder_input_ids tgt_ids tokenizer(summary, max_length128, truncationTrue)[input_ids] return src_ids, tgt_ids训练时将labels传入BartForConditionalGeneration.forward模型会自动对摘要 token 计算交叉熵损失-100位置被忽略。注意解码器以decoder_start_token_id2起始因此摘要 token 序列需整体右移一位置入decoder_input_ids。3. 摘要生成微调完成后使用generate接口进行自回归摘要生成可配置的典型参数包括max_length生成摘要的最大长度生成结束时由forced_eos_token_id保证以 eos 收尾min_length最小长度约束num_beamsbeam search 的束宽1 时启用 beam searchdecode_strategygreedy_search/sampling/beam_search等top_k/top_p采样策略下的截断与核采样参数repetition_penalty重复惩罚系数抑制摘要中词语重复no_repeat_ngram_size禁止 n-gram 重复。示例inputs tokenizer( The quick brown fox jumps over the lazy dog ., return_tensorspd, max_length1024, truncationTrue, ) summary_ids model.generate( input_idsinputs[input_ids], max_length64, num_beams4, decode_strategybeam_search, repetition_penalty1.2, )[0] summary tokenizer.decode(summary_ids[0], skip_special_tokensTrue) print(summary)值得注意的是若启用快速解码路径FasterBART当前源码只支持单一 top-k 或 top-p 采样、repetition_penalty1.0且min_length0的组合复杂解码参数请使用标准generate路径。4. 性能与验收参考从源码结构可以推断bart-based_model768、6 层编码器 6 层解码器适合在单卡/CPU 环境快速验证流程bart-larged_model1024、1212 层吞吐更高但显存与算力需求明显增大。项目 README 未给出具体评测数值实际训练时建议以 CNN/DailyMail 验证集的 ROUGE 指标ROUGE-1/2/L作为摘要质量验收标准并结合 tests/transformers/bart/test_modeling.py 中的生成用例确认解码链路正确。小结BART 是双向编码 自回归解码的 Seq2Seq 降噪自编码器是 BERT 与 GPT 结构的统一泛化PaddleNLP 在paddlenlp/transformers/bart下完整提供了BartConfig、BartModel、BartForConditionalGeneration与BartTokenizer内置bart-base/bart-large预训练权重slm/examples/text_summarization/bart/README.md所示的示例项目基于 PaddlePaddle 2.2聚焦 CNN/DailyMail 数据集的微调与摘要生成实操上通过from_pretrained加载权重、以正文 → 摘要句对构造编解码输入完成微调再用generate结合 beam search、重复惩罚等参数产出摘要启用快速解码FasterBART时需注意其对解码策略的参数约束常规场景使用标准生成路径即可。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐Transformers 摘要生成实战指南基于 T5 微调 BillSum 法律文本摘要模型Transformers 摘要生成实战指南基于 T5 微调 BillSum 法律文本摘要模型 摘要生成Summarization是 Transfor人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态BART模型文本摘要从原理到实战的终极完整指南BART模型文本摘要从原理到实战的终极完整指南 在当今信息爆炸的时代如何从海量文本中快速提取核心信息成为迫切需求。BART模型文本摘要技术应运而生它通过深教程DeepSpeed加速BART文本摘要三小时打造专业级摘要模型DeepSpeed加速BART文本摘要三小时打造专业级摘要模型 还在为训练文本摘要模型耗时过长而烦恼DeepSpeed让BART模型微调变得前所未有的简单高示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表