《昇思 25 天学习打卡营第 23 天 | 基于MindSpore的GPT-2文本摘要 》

《昇思 25 天学习打卡营第 23 天 | 基于MindSpore的GPT-2文本摘要 》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029


概述

文本摘要任务旨在从给定的文本中生成简短的摘要,同时保留关键信息。本案例使用MindSpore框架实现基于GPT-2模型的文本摘要。

实验环境配置

确保安装了MindSpore及相关库:

!pip install mindspore==2.2.14
!pip install tokenizers==0.15.0
!pip install mindnlp

数据集加载与处理

使用NLPCC2017摘要数据集,包含新闻正文及其摘要。

from mindnlp.utils import http_get
url = 'https://download.mindspore.cn/toolkits/mindnlp/dataset/text_generation/nlpcc2017/train_with_summ.txt'
path = http_get(url, './')

数据集分割

将数据集分为训练集和测试集:

from mindspore.dataset import TextFileDataset
dataset = TextFileDataset(str(path), shuffle=False)
train_dataset, test_dataset = dataset.split([0.9, 0.1], randomize=False)

数据预处理

使用BertTokenizer进行中文文本的分词和标记化处理。

from mindnlp.transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

定义数据处理流程,包括合并文本、填充至最大序列长度等。

def process_dataset(dataset, tokenizer, batch_size=6, max_seq_len=1024, shuffle=False):
    # ...
    return dataset
train_dataset = process_dataset(train_dataset, tokenizer, batch_size=4)

模型构建

构建GPT-2摘要模型,并对模型输出进行Shift Right操作以适应摘要任务。

from mindnlp.transformers import GPT2LMHeadModel

class GPT2ForSummarization(GPT2LMHeadModel):
    def construct(self, input_ids, attention_mask, labels):
        # ...
        return loss

动态学习率

定义动态学习率,使用线性预热和衰减策略。

from mindspore.nn.learning_rate_schedule import LearningRateSchedule

class LinearWithWarmUp(LearningRateSchedule):
    # ...

模型训练

设置训练参数,初始化模型、优化器和学习率调度器。

num_epochs = 1
warmup_steps = 2000
learning_rate = 1.5e-4

config = GPT2Config(vocab_size=len(tokenizer))
model = GPT2ForSummarization(config)

使用MindSpore的Trainer进行模型训练。

from mindnlp._legacy.engine import Trainer

trainer = Trainer(network=model, train_dataset=train_dataset, epochs=num_epochs, optimizer=optimizer)
trainer.run(tgt_columns="labels")

模型推理

加载训练好的模型,进行文本摘要生成。

model = GPT2LMHeadModel.from_pretrained('./checkpoint/gpt2_summarization_epoch_0.ckpt', config=config)
model.set_train(False)

定义推理数据处理流程,将输入文本转换为模型可接受的格式。

def process_test_dataset(dataset, tokenizer, batch_size=1, max_seq_len=1024, max_summary_len=100):
    # ...
    return dataset
test_dataset = process_test_dataset(test_dataset, tokenizer, batch_size=1)

使用模型生成摘要。

for (input_ids, raw_summary) in test_dataset.create_tuple_iterator():
    output_ids = model.generate(input_ids, max_new_tokens=50, num_beams=5, no_repeat_ngram_size=2)
    output_text = tokenizer.decode(output_ids[0].tolist())
    print(output_text)

GPT-2模型在文本摘要任务上展现出了强大的能力,但模型的训练和调优需要大量的计算资源和时间。在实际应用中,需要根据具体需求和资源情况选择合适的模型规模和训练策略。
此外,文本摘要的质量很大程度上依赖于预处理和后处理步骤。在本案例中,使用BertTokenizer进行中文文本的处理,这需要对分词器进行适当的配置以适应不同的文本结构。
最后,动态学习率的设置对模型的训练效果有显著影响。预热和衰减策略有助于模型在训练初期快速收敛,在训练后期避免过拟合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值