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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自存 关于RestController请求传参数 前端和后端相关

1.Get请求 Get请求传递参数一般是 1.通过PathVariable来映射 URL 绑定的占位符 后端 GetMapping("test/{id}")public R test(PathVariable Integer id){System.out.println(id);return R.success(id);}前端 export function test(id:any){return request({url:&q…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作菜单栏 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div cla…

RabbitMQ教程:工作队列(Work Queues)(二)

RabbitMQ教程&#xff1a;工作队列&#xff08;Work Queues&#xff09;&#xff08;二&#xff09; 一、引言 在快节奏的软件开发世界中&#xff0c;我们经常面临需要异步处理任务的场景&#xff0c;比如在Web应用中处理耗时的图片处理或数据分析任务。这些任务如果直接在用…

Node.js下载安装及环境配置教程

一、进入官网地址下载安装包 Node.js 中文网 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…

免费,WPS Office教育考试专用版

WPS Office教育考试专用版&#xff0c;不仅满足了考试需求&#xff0c;更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4

将 HTML 转换为 JSX:JSX 和 JSX 规则

JSX 是 JavaScript 的语法扩展。您可以在 JavaScript 文件中编写 HTML 格式。 它基于 Web、Html、Css 和 JavaScript。Web 开发人员将页面内容分别编写为 Html 文件&#xff0c;将设计编写为 Css 文件&#xff0c;将逻辑编写为 JavaScript 文件。 须知 &#xff1a; JSX 是一个…

数据结构-二叉树及其遍历

🚀欢迎来到我的【数据结构】专栏🚀 🙋我是小蜗,一名在职牛马。🐒我的博客主页​​​​​​ ➡️ ➡️ 小蜗向前冲的主页🙏🙏欢迎大家的关注,你们的关注是我创作的最大动力🙏🙏🌍前言 本篇文章咱们聊聊数据结构中的树,准确的说因该是只说一说二叉树以及相…

活动|华院计算作为联盟理事单位出席进博会全球人工智能合作论坛

第七届中国国际进口博览会&#xff08;进博会&#xff09;于11月5日至10日在上海举行&#xff0c;作为本次进博会的重要配套活动&#xff0c;首届人工智能全球合作论坛也于9日圆满落幕。本次论坛由全球招商中心委员会、人工智能全球合作论坛组委会主办&#xff0c;中国国际科技…

Selective attention improves transformer详细解读

Selective attention improves transformer Google 2024.10.3 一句话&#xff1a;简单且无需额外参数的选择性注意力机制&#xff0c;通过选择性忽略不相关信息并进行上下文剪枝&#xff0c;在不增加计算复杂度的情况下显著提升了Transformer模型的语言建模性能和推理效率。 论…

shell脚本(1)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shell脚本&#xff08;1&#xff09;脚本创建执行与变量使用_哔哩哔哩_bilibili 本文主要讲解shell脚本的创建、执行和变量的使用。 一、脚本执行…

本地 / 网络多绑定用例总结

原文连接&#xff1a;AUTOSAR_EXP_ARAComAPI的7章笔记&#xff08;4&#xff09; 情景设定 在前一节的基础上&#xff0c;假设有类似情景&#xff0c;区别在于服务实例 2 位于与 AP 产品相同以太网的不同 ECU 上&#xff0c;服务消费者及其代理驻留在 AP 产品 ECU 上。因以太网…

通用定时器---输出比较功能

目录 一、概念 二、输出比较的8种模式 三、输出比较输出PWM波形的基本结构 配置步骤 四、示例代码 一、概念 OC&#xff08;OutPut Compare&#xff09;输出比较。输出比较可以通过比较CNT与CCR寄存器的关系&#xff0c;来对输出电平进行置1/置0/翻转的操作&#xff0c;可…

CSS盒子的定位> (下篇)#固定定位#笔记

一、固定定位 1.概念 固定定位其实是绝对定位的子类别&#xff0c;一个设置了position&#xff1a;fixed的元素是相对于视窗固定的&#xff0c;就算页面文档发生了滚动&#xff0c;它也会一直待在相同的地方。 2.代码属性 CSS代码添加 position&#xff1a;fixed 水平方…

leetcode100:相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算

Gonzalez从集合角度定义膨胀和腐蚀&#xff0c;不易理解。 Through these definitions, you can interpret dilation and erosion as sliding neighborhood operations analogous to convolution (or spatial filtering). 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向…

【数据结构 | C++】整型关键字的平方探测法散列

整型关键字的平方探测法散列 将给定的无重复正整数序列插入一个散列表&#xff0c;输出每个输入的数字在表中的位置。所用的散列函数是 H(key)key%TSize&#xff0c;其中 TSize 是散列表的表长。要求用平方探测法&#xff08;只增不减&#xff0c;即H(Key)i^2&#xff09;解决冲…

24.11.15 Vue3

let newJson new Proxy(myJson,{get(target,prop){console.log(在读取${prop}属性);return target[prop];},set(target,prop,val){console.log(在设置${prop}属性值为${val});if(prop"name"){document.getElementById("myTitle").innerHTML val;}if(prop…

413: Quick Sort

解法&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e55; int a[N]; int n;int main(int argc, char** argv) {cin>>n;for (int i0;i<n;i) cin>>a[i];sort(a,an);for (int i0;i<n;i) cout<<a[i]<<" "…

麒麟kysec安全

一、kysec安全框架管理 开启kysec getstatus Copy security-switch --set default Copy 重启系统 reboot Copy 刷新页面&#xff0c;等待几分钟&#xff0c;即可完成文件的扫描。 查看kysec状态 getstatus Copy 切换到管理员身份&#xff08;密码&#xff1a;devuser…

在qml里如何使用C++ Qt数据模型QAbstractListModel

本篇博客用qml GridView来显示视频矩阵,然后加载本地的视频,需要用到C++ Qt的model, 代码环境Qt6.5.3 qml, 对应的视频讲解:https://edu.csdn.net/learn/40003/653975?spm=3001.4143 先看一下界面效果: 上图是用qml ScrollView和GridView做了一个可以滚动显示的视频矩阵列…