《昇思 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 GPT2LMHeadModelclass GPT2ForSummarization(GPT2LMHeadModel):def construct(self, input_ids, attention_mask, labels):# ...return loss

动态学习率

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

from mindspore.nn.learning_rate_schedule import LearningRateScheduleclass LinearWithWarmUp(LearningRateSchedule):# ...

模型训练

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

num_epochs = 1
warmup_steps = 2000
learning_rate = 1.5e-4config = GPT2Config(vocab_size=len(tokenizer))
model = GPT2ForSummarization(config)

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

from mindnlp._legacy.engine import Trainertrainer = 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进行中文文本的处理,这需要对分词器进行适当的配置以适应不同的文本结构。
最后,动态学习率的设置对模型的训练效果有显著影响。预热和衰减策略有助于模型在训练初期快速收敛,在训练后期避免过拟合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站打包封装成app,提高用户体验和商业价值

网站打包封装成app的优势 随着移动互联网的普及,用户对移动应用的需求越来越高。网站打包封装成app可以满足用户的需求,提高用户体验和商业价值。 我的朋友是一名电商平台的运营负责人,他曾经告诉我,他们的网站流量主要来自移动…

由bext安装“异常”引出的话题:windows上转义字符的工作原理

由bext安装“异常”引出的话题:Windows上转义字符的工作原理,与ai“闲扯”不经意学习知识点。 (笔记模板由python脚本于2024年07月25日 19:21:13创建,本篇笔记适合喜欢用ai学习的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff…

GitLab添加TortoiseGIT生成SSH Key

文章目录 前言一、PuTTYgen二、GitLab 前言 GitLab是一个用于托管代码仓库和项目管理的Web平台,公司搭建自己的gitlab来管理代码,我们在clone代码的时候可以选择http协议,也可以选择ssh协议来拉取代码。 SSH (Secure Shell)是一种通过网络进…

【脚本】清空指定文件夹内容

main执行一次,1.txt就会写入一些东西。 原来的想法是覆盖重写,结果却是接着往后面写,检查源代码有点费事,不如在每次程序执行前,先直接清空文件夹! 部分代码: 修改路径就能用。 import os im…

微信小程序-自定义tabBar

通过官网给出的示例自己实现了自定义的tabBar,但结果发现 无法监听页面生命周期函数 结语:原想的是实现不一样的效果(如下) 故尝试了自定义tabBar,虽然做出来了,但也发现这个做法存在不足: 在…

记一次Mycat分库分表实践

接了个活,又搞分库分表。 一、分库分表 在系统的研发过程中,随着数据量的不断增长,单库单表已无法满足数据的存储需求,此时就需要对数据库进行分库分表操作。 分库分表是随着业务的不断发展,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存储到不同服务…

Golang | 腾讯一面

go的调度 Golang的调度器采用M:N调度模型,其中M代表用户级别的线程(也就是goroutine),而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine。 Go调度器使用了三种队列来…

vue3 常用的知识点

setup:容许在script当中书写组合式API 并且vue3的template不再要求唯一的根元素 <script setup>const name app; </script>组合式API的用法&#xff1a; 可以直接在script标签中定义变量或者函数&#xff0c;然后直接在template当中使用 <template>{{mes…

编程类精品GPTs

文章目录 编程类精品GPTs前言种类ChatGPT - GrimoireProfessional-coder-auto-programming 总结 编程类精品GPTs 前言 代码类的AI, 主要看以下要点: 面对含糊不清的需求是否能引导出完整的需求面对完整的需求是否能分步编写代码完成需求编写的代码是否具有可读性和可扩展性 …

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…

java 开发学习总结

一&#xff0c;注解 Bean是一个注解,用于告诉 Spring 框架将标注的方法返回的对象注册为一个 Bean。 Bean注解的方法名作为对象的名字。 Bean 一般和 Component或者Configuration 一起使用。 Component 注解的类中不能定义类内部依赖的Bean注解的方法。Configuration可以。 Con…

【ARM】MDK-ARM软件开发工具的最终用户许可协议获取

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解MDK-ARM系列产品内软件开发工具的最终用户许可协议的获取。 2、 问题场景 对于部分外企客户需要软件开发工具的最终用户许可协议作为产品资料&#xff0c;以便附录并说明。 3、软硬件环境 1&#xff09;、软件…

Shell编程之正则表达式与文本处理器2--sed

目录 一、sed 工具 1. 概述 2. sed 原理 3、常用操作选项 3.1 常用选项 3.2 操作命令 4. sed 的使用 5. 具体操作 5.1 打印输出 p 5.1.1 显示范围、单行、指定行输出、指定往后加几行输出 5.1.2 显示奇偶行 5.1.3 将指定内容的行打印出来 5.1.4 只输出行号…

ESP32和mDNS学习

目录 mDNS的作用mDNS涉及到的标准文件组播地址IPv4 多播地址IPv6 多播地址预先定义好的组播地址 mDNS调试工具例程mDNS如何开发和使用注册服务查询服务 mDNS的作用 mDNS 是一种组播 UDP 服务&#xff0c;用来提供本地网络服务和主机发现。 你要和设备通信&#xff0c;需要记住…

python通过omniORBpy调用CORBA

omniORB参考地址&#xff1a; omniORB omniORB - Browse Files at SourceForge.net omniORB - Browse /omniORBpy/omniORBpy-4.3.0 at SourceForge.net Windows 普通使用好像不需要安装omniorb。就对接北向接口业务需要使用python3.10的windows包&#xff0c;但目前好像没有…

【CI/CD】docker + Nginx自动化构建部署

CI/CD是什么 CI/CD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09;的缩写&#xff0c;它们是现代软件开发中用于自动化软件交付过程的实践。 1、…

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改&#xff0c;起服务。三、访问web&#xff0c;个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下&#xff0c;恢复GitLab4、停止新gitlab数据连接服务5、恢复备…

GO-学习-03-基本数据类型

数据类型&#xff1a;基本数据类型和复合数据类型 基本数据类型&#xff1a;整型、浮点型、布尔型、字符串 复合数据类型&#xff1a;数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 整型&#xff1a; package main import "fmt" im…

远程调试 Python 脚本

这段代码用于远程调试 Python 脚本&#xff0c;特别是通过 Visual Studio Code&#xff08;VS Code&#xff09;的远程调试功能。它会在指定的服务器 IP 和端口上等待调试器的连接。以下是每一行代码的详细介绍及中文注释&#xff1a; # 检查是否提供了服务器 IP 和端口 if ar…

【个人笔记】一个例子理解工厂模式

工厂模式优点&#xff1a;创建时类名过长或者参数过多或者创建很麻烦等情况时用&#xff0c;可以减少重复代码&#xff0c;简化对象的创建过程&#xff0c;避免暴露创建逻辑&#xff0c;也适用于需要统一管理所有创建对象的情况&#xff0c;比如线程池的工厂类Executors 简单工…