上一篇文章介绍了入门huggingface预训练的新路历程,模型也通了,但毕竟手动写出来的都是bug,也遇到了比较多问题,比如模型保存与加载的过程就麻烦。

上一篇提到,在闲聊对话模型debug过程中,看到了如下代码

class GPT2LMHeadModel(GPT2PreTrainedModel):
    def __init__(self, config):
        super().__init__(config)
            self.transformer =GPT2Model(config)
            self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)

了解了预训练模型之后,这不就通了吗?前面是一个预训练的GPT2模型,后面是一个用于下游任务的线性层。人家都给咱写好了。

那么,就去看看这个GPT2LMHeadModel。

源码中,该模型一路继承GPT2PreTrainedModel,继承PreTrainedModel,该模型在transformers.modeling_utils中,该模型有save_pretrained 和 from_pretrained函数,不用我们在写什么保存模型读取模型的过程了。

而GPT2Model也就是我们前面古典小说里的模型结构,一样的,只不过这里是封装好的。包括词向量和位置向量、模型主体、曾归一化,都通过config的参数设置具体形状。

再去看看GPT2LMHeadModel的文档,

import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

那结合上一篇,这不就有了,最重要的tokenizer和model都给了,那我们就可以处理我们的数据转换成id,然后加载想要的预训练模型,在我们的数据上训练几个epoch(一般两三个就差不多了),用写好的save_pretrained保存模型即可。

到此,又有一个新的问题,如何通过config参数,设置模型,这样还能用预训练吗?感觉上来说,用config文件可以方便的定义自己的模型结构,应该是需要从头训练,再看再报。

GPT2论文 Language model s are unsup er vised multitask learn er s GPT2模型结构 transform er s库中的GPT2模型源码几部分分别为 GPT2LM Head Model 类、GPT2 Model 类、Block类、MLP类与Attention类 其中,一个 Transform er 的Block类中包含了Attention类与MLP类,而在GPT2 Model 类中又以Block类为基础 构建 了12层Block的模型主体结构 GPT2LM Head Model 主体为调用 Tensorflow2.x 和 Transform er s 库:Tensorflow2.x 是一种 深度学习 框架,而 Transform er s 库是用于 构建 和使用自然语言处理模型的 Python 库。GPT 模型是一种自然语言处理的技术,在文本生成等任务中表现出了非常优秀的效果。Tokeniz er :GPT 模型需要接受文本输入,您需要使用 GPT2Tokeniz er 类将文本转换为模型可用的标记。GPT 模型:GPT 模型是 预训练模型 ,您可以在 Transform er s 库中找到和下载相应的模型。 最近将huggingface的 transform er s库中的GPT2模型源码详细学习了一遍,因此将学习过程中,对于GPT2模型源码的一些学习笔记记录在此篇博客之中,以供之后参考。 GPT2模型是OpenAI组织在2018年于GPT模型的基础上发布的新 预训练模型 ,其论文原文为 language_ model s_are_unsup er vised_multitask_learn er s 一、GPT2与GPT的区别 GPT-2 模型结构详解 GPT-2 进行文本生成 OpenAI 在论文Improving Language Und er standing by Gen er ative Pre-Training中提出了 GPT 模型。GPT 模型是由单向 Transform er 的解码器 构建 的模型,OpenAI 团队在一个非常大的书籍数据集the Toronto Book C... 在之前的文章中,我们已经介绍了如何在 Tensorflow2.x 环境中使用 GPT 模型进行文本生成。本篇文章中,我们将进一步讨论 GPT-2 模型的进阶应用,包括如何使用 预训练模型 和微调模型来提高模型的质量和效果。GPT-2 模型是 GPT 模型的升级版,它 利用 了更多的数据和更强的计算能力进行训练,进而取得了更好的效果。GPT-2 模型使用了 transform er 模型架构,该架构由多个 transform er 模型组成。 用了新的数据集进行训练:百万级别的文本。同时模型规模也变大很多,参数量变为15亿(B ER T_LARGE参数量3.4亿)。规模变大这么多的情况下,作者发现和B ER T相比优势不大,所以选择了另一个观点作为切入点——Z er o-shot(简单来说就是,训练好一个模型,在任何一个场景都能直接使用,泛化性很好)。GPT-2的架构非常非常大,参数量也非常多。非常神奇的事情发生了,GPT-2在完全没有训练数据。 1手动加载GPT-2模型并实现语句与完整句子预测 使用GPT-2模型配套的PreTrainedTokeniz er 类,所需要加载的词表文件比B ER T模型多了一个m er ges文件。 1.1 代码实现:手动加载GPT-2模型并实现下一个单词预测---GPT2_make.py(第1部分) import torch from transform er s import GPT2Tokeniz er , GPT2LM Head Model # 案例描述: Transform e... Transform er s是一个先进的NLP框架,适用于pytorch和tensorflow2.0,这边使用的GPT2框架是一个OpenAI的先进技术,在上下文连贯性和情感表达上有相当好的表现,实际使用时可以直接从 transform er 库导入: from transform er s. model s.gpt2. model ing_gpt2 import GPT2Config, GPT2LM Head Model 其实OpenAI还推出了GPT3——1750亿的参数和千万级别的算力需求就不是笔记本显卡带的动的了。GPT2有 OpenAI 已将模型开源至上,在上面可以找到以下的GPT-2 预训练模型 :gpt2gpt2-largegpt2-xl其中,gpt2是最小的模型,参数量为124M;gpt2-medium, gpt2-large和gpt2-xl依次是参数量增大的模型。 尽可能简单和快速使用: 我们尽可能限制了要学习的面向对象抽象的类的数量,实际上几乎没有抽象,每个模型只需要使用三个标准类:配置、模型和tokeniz er , 所有这些类都可以通过使用公共的fro...