PyTorch深度学习与企业级项目实战-预训练语言模型GPT

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客

13个PyTorch深度学习案例简介-CSDN博客

《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com)

PyTorch深度学习算法与应用_夏天又到了的博客-CSDN博客

15.3.1  什么是预训练语言模型

尽管神经网络模型在自然语言处理任务中已取得较好的效果,但其相对于非神经网络模型的优势并没有像在计算机视觉领域那么明显。该现象的主要原因可归结于当前自然语言处理任务的数据集相对较小(除机器翻译任务外)。深度神经网络模型通常包含大量参数,因此在较小规模的训练集中易过拟合,且泛化性较差。通过海量无标注语料来预训练神经网络模型,可以学习到有益于下游自然语言处理任务的通用语言表示,并可以避免从零训练新模型。预训练模型一直被视为一种训练深度神经网络模型的高效策略。

随着深度学习的发展,模型参数显著增长,从而需要越来越大的数据集用于充分训练模型参数并预防过拟合。然而,大部分自然语言处理任务的标注成本极为高昂,尤其是句法和语义相关任务构建大规模标注数据集尤为困难。相比较而言,大规模无标注数据集相对易于构建。为更好地利用海量无标签文本数据,我们可以首先从这些数据中学到较好的文本表示,然后将其用于其他任务。许多研究已表明,在大规模无标注语料中训练的预训练语言模型得到的表示,可以使许多自然语言处理任务获得显著的性能提升。

预训练的优势可总结为以下几点:

(1)在海量文本中通过预训练可以学习到一种通用语言表示,并有助于完成下游任务。

(2)预训练可提供更好的模型初始化,从而具有更好的泛化性,并在下游任务上更快收敛。

(3)预训练可被看作在小数据集上避免过拟合的一种正则化方法。

15.3.2  GPT-2模型介绍

OpenAI 公司在2018年提出了一种生成式预训练(Generative Pre-Training,GPT)模型,用来提升自然语言理解任务的效果,正式将自然语言处理带入“预训练”时代。“预训练”时代意味着利用更大规模的文本数据以及更深层的神经网络模型,来学习更丰富的文本语义表示。同时,GPT的出现打破了自然语言处理各个任务之间的壁垒,使得搭建一个面向特定任务的自然语言处理模型不再需要了解非常多的任务背景,只需要根据任务的输入输出形式应用这些预训练语言模型,就能够达到一个不错的效果。因此,GPT提出了“生成式预训练+判别式任务精调”的自然语言处理新范式,使得自然语言处理模型的搭建变得不再复杂。预训练语言模型的出现,使得自然语言处理进入新的时代,也被认为是近些年来自然语言处理领域的里程碑事件。

GPT-2是GPT算法的“进化版”,比GPT参数扩大了10倍,数据量也扩大了10倍,它使用包含800万个网页的数据集,共有40GB。这个庞大的算法使用语言建模作为训练信号,以无监督的方式在大型数据集上训练一个Transformer模型,然后在更小的监督数据集上微调这个模型,以帮助它解决特定任务。

就GPT-2而言,它的训练目标很简单:根据所有给定文本中前面的单词预测下一个单词。与其他基于神经网络的语言模型相比,GPT-2具有许多独特的优点。首先,它采用自监督学习的方式进行训练,使其能够处理多种语言和任务。其次,GPT-2可以生成各种类型的文本,例如新闻、故事、对话和代码等。最后,GPT-2模型使用大量的预训练参数,使其具有强大的表现力和泛化能力。

所以,以往大家的工作模式是各个公司会自己在GitHub网站上下载代码,然后公司出钱“捞”数据、打标,工程师用自己公司的打标数据训练来完成业务的需求。但是随着Huggingface的成立,自然语言处理各大热门的中英文预训练模型都开源在下载网址https://huggingface.co/models(目前可以使用其镜像网站https://hf-mirror.com来访问相关模型)。现在大家的工作模式是算法工程师打开Huggingface网站,搜业务相关的预训练模型(这些模型都是大厂基于大量的数据训练好的模型)进行下载,算法工程师自己收集或者标记少量的数据,微调下载的模型。

GPT-2的整体结构如图15-7所示,GPT-2是以Transformer为基础构建的,是目前最先进的自然语言处理预训练模型之一,能够根据上文预测下一个单词,所以它就可以利用预训练已经学到的知识来生成文本,比如生成新闻。也可以使用另一些数据进行微调,生成有特定格式或者主题的文本,比如诗歌、戏剧。

图15-7

15.3.3  PyTorch-Transformers库介绍

PyTorch-Transformers(此前叫作Pytorch-Pretrained-Bert)是一个面向自然语言处理的、当前性能最高的预训练模型开源库。该开源库现在包含PyTorch实现、预训练模型权重、运行脚本和以下模型的转换工具:

  1. 谷歌的 BERT,论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,论文作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee,Kristina Toutanova
  2. OpenAI 的GPT,论文:Improving Language Understanding by Generative Pre-Training,论文作者:Alec Radford, Karthik Narasimhan, Tim Salimans,Ilya Sutskever。
  3. OpenAI 的 GPT-2,论文:Language Models are Unsupervised Multitask Learners,论文作者:Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever。
  4. 谷歌和 CMU 的 Transformer-XL ,论文:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context,论文作者:Zihang Dai*, Zhilin Yang*, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov。
  5. 谷歌和 CMU 的XLNet,论文:XLNet: Generalized Autoregressive Pretraining for Language Understanding,论文作者:Zhilin Yang*, Zihang Dai*, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov, Quoc V. Le。
  6. Facebook的 XLM,论文:Cross-lingual Language Model Pretraining,论文作者:Guillaume Lample,Alexis Conneau。

简而言之,就是一个目前最先进的、用于自然语言处理的预训练模型库。它通过命令pip install pytorch-transformers进行安装。

以下是实现加载GPT-2模型并实现下一个单词预测的功能代码:

############pytorch_transformers_demo.py##############
# 案例描述:Transformers库中的GPT-2模型,用它实现下一词预测功能
# 导入必要的库
import torch
from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel
# 自动加载预训练模型tokenizer (权重)
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
# 对文本输入进行编码
text = "What is the fastest car in the"
indexed_tokens = tokenizer.encode(text)
# 将输入语句转换为张量
tokens_tensor = torch.tensor([indexed_tokens])
# 加载预训练模型 (weights)
model = GPT2LMHeadModel.from_pretrained('gpt2')
#将模型设置为evaluation模式,关闭DropOut模块
model.eval()
DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tokens_tensor = tokens_tensor.to(DEVICE)
model.to(DEVICE)
# 如果你有GPU,把所有东西都放在CUDA上,如果没有GPU,就只能用CPU跑# 预测所有的tokens
with torch.no_grad():outputs = model(tokens_tensor)predictions = outputs[0]
# 得到预测的单词
predicted_index = torch.argmax(predictions[0, -1, :]).item()
predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])
# 打印预测单词
print(predicted_text)

代码很直观,我们将文本标记为数字序列并将其索引,然后将其传递给GPT2LMHeadModel。代码运行后结果如下,该模型成功地预测出了下一个单词world:

100%|██████████| 1042301/1042301 [00:04<00:00, 238071.80B/s]
100%|██████████| 456318/456318 [00:01<00:00, 325186.65B/s]
100%|██████████| 665/665 [00:00<?, ?B/s]
100%|██████████| 548118077/548118077 [22:36<00:00, 403989.53B/s]What is the fastest car in the world

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

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

相关文章

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度&#xff1a;1,方向&#xff1a;Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接&#xff1a;攻防世界Web方向新手模式第16题。 打开一看给了很多提示&#xff0c;什么language在index.php的第九行&#xff0c;flag在flag.php中&#xff0c;但事情显…

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题

前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器&#xff0c;并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据&#xff0c;如果网络不通&#xff0c;卡个几十秒&#xff0c;会让用户觉得非常的不爽&#xff0c;本文从技术调研的角度讲解解决此类问…

基于OpenCV的自制Python访客识别程序

这是我用Pyqt5&#xff0c;基于OpenCV做的一个Python访客识别程序&#xff0c;它具体包括如下5个功能&#xff1a; 1、选择媒体菜单&#xff0c;可以打开本地摄像头&#xff1b;如果知道rtsp地址&#xff0c;则可以直接访问局域网内的网络串流。 2、选择播放菜单&#xff0c;…

SQL集合运算

集合论是SQL语言的根基。 1 集合运算 注意事项&#xff1a; 1&#xff09;SQL能操作具有重复行的集合&#xff0c;可以通过可选项ALL来支持。 如果直接使用UNION或INTERSECT&#xff0c;结果里不会出现重复的行。如果想在结果里留下重复行&#xff0c;可以加上可选项ALL。写…

Gartner发布安全平台创新洞察:安全平台需具备的11项常见服务

安全和风险管理领导者的任务是管理多个安全供应商和复杂的基础设施堆栈。本研究提供了有关安全平台优势和风险的见解&#xff0c;并提供了为组织选择合适平台的建议。 主要发现 自适应和行为安全防御需要跨安全基础设施组件进行更多的协调&#xff0c;而目前孤立的异构供应商架…

基于海思soc的智能产品开发(两个图像处理来源)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于图像&#xff0c;大家能够想到的一般就是sensor&#xff0c;也就是摄像头。其实对于图像来说&#xff0c;还有另外一个来源&#xff0c;那就是…

如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息

目录 前言一、什么是Web Scraper API二、Web Scraper API 的优势&#xff1a;三、Web Scraper API 适用场景四、实践案例目标需求视频讲解1、选择Web Scraper API2、登录注册3、进入用户控制面板4、选择API5、触发数据收集 API6、获取爬虫结果7、分析爬虫结果&#xff08;1&…

微信小程序中使用离线版阿里云矢量图标

前言 阿里矢量图库提供的在线链接服务仅供平台体验和调试使用&#xff0c;平台不承诺服务的稳定性&#xff0c;企业客户需下载字体包自行发布使用并做好备份。 1.下载图标 将阿里矢量图库的图标先下载下来 解压如下 2.转换格式 贴一个地址用于转换格式&#xff1a;Onlin…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统&#xff08;ROS, Robot Operating System&#xff09;是一个用于开发机器人应用的开源框架&#xff0c;它提供了一系列功能丰富的库和工具&#xff0c;能够帮助开发者构建和控制机器人。 当前&#xff0c;ROS1的最新版本为Noetic Ninjemys&#xff0c;专为…

封装一个省市区的筛选组件

筛选功能&#xff1a;只能单选&#xff08;如需多选需要添加show-checkbox多选框属性&#xff09;&#xff0c;选中省传递省的ID&#xff0c;选中市传递省、市的ID&#xff0c; 选中区传递省市区的ID 父组件&#xff1a; <el-form-item><div style"width: 240px;…

python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态

import argparse # 用于解析命令行参数 from socket import * # 导入 socket 库的所有内容&#xff0c;用于网络通信 from threading import * # 导入 threading 库的所有内容&#xff0c;用于多线程操作 # 创建一个信号量&#xff0c;初始值为 1&#xff0c;用于线程同步&…

OceanStor Pacific系列 8.1.0 功能架构

功能架构 华为OceanStor Pacific系列提供基于三层的分布式存储架构&#xff0c;融合分布式文件、对象、大数据和块多个服务形态&#xff0c;支持文件、对象、大数据服务部署在一个集群&#xff0c;并统一管理。 华为OceanStor Pacific系列整体功能架构由存储接口层、存储服务…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中&#xff0c;企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心&#xff0c;新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策&#xff0c;为企业提供了理想的服务器托管解决方案&#xff0c;助…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象&#xff0c;是用于传输数据的对象&#xff0c;通常在服务层与表现层之间传递数据&#xff0c;DTO 通常用于…

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间&#xff08;一般流处理都会有两个时间&#xff1a;事件发生的事件&am…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

软件工程师简历(精选篇)

【#软件工程师简历#】 一份专业而精准的软件工程师简历&#xff0c;不仅能够全面展示技术实力和项目经验&#xff0c;更是赢得理想工作机会的重要敲门砖。那么&#xff0c;如何撰写一份令人印象深刻的软件工程师简历呢&#xff1f;以下是幻主简历整理的软件工程师简历&#xf…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

vscode远程连接服务器并启用tmux挂载进程

使用vscode连接远程服务器&#xff0c;有时候由于主机问题&#xff0c;比如中断&#xff0c;断网&#xff0c;超时&#xff0c;重启&#xff0c;关机等等情况&#xff0c;导致进程中断&#xff0c;如果是一个长时间的进程&#xff0c;会很麻烦&#xff0c;毕竟不能长时间一直盯…