首页 > 其他分享 >[人工智能-NLP]使用GPT-2预训练模型进行微调

[人工智能-NLP]使用GPT-2预训练模型进行微调

时间:2023-06-09 09:57:59浏览次数:53  
标签:NLP torch 训练 人工智能 模型 微调 ids GPT

下面是一个使用GPT-2进行微调的示例。以文本生成为例,我们将微调GPT-2来生成新闻标题。此外,我们将使用PyTorch作为深度学习框架,以便于构建和训练模型。

  1. 安装PyTorch和Transformers

首先需要安装PyTorch和Transformers库。在终端中输入以下命令:

pip install torch transformers
  1. 准备数据集

接下来需要准备好用于微调的新闻标题数据集,可以使用Kaggle等网站上的数据集,或者手动创建一个数据集。在这里,我们使用Kaggle上公开的“ABC News Headlines”的数据集,包含了超过60万个新闻标题。

  1. 预处理数据

预处理数据指将文本数据进行分词、编码等处理,以满足GPT-2的输入要求。可以使用Transformers库中预定义好的tokenizer来实现这一过程。

以下是一个用于预处理数据的函数:

from transformers import GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

def preprocess(text):
    encoding = tokenizer.encode_plus(text, truncation=True, padding=True, return_tensors='pt')
    input_ids = encoding['input_ids']
    attention_mask = encoding['attention_mask']
    return input_ids, attention_mask

其中,tokenizer将英文单词转换为对应的向量,而preprocess函数则调用tokenizer编码函数,返回符合输入格式要求的张量。

  1. 加载预训练模型

从Hugging Face下载预训练的GPT-2模型,并创建一个新模型来进行微调。

from transformers import GPT2LMHeadModel, GPT2Config

config = GPT2Config.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2', config=config)

这里使用了GPT2LMHeadModel模型,这是一个预训练的GPT-2模型,用于生成语言模型。GPT2Config是GPT-2模型训练时使用的配置,这里从预训练的模型中加载配置。最后从预训练的模型中加载权重到新模型中。

  1. 定义训练函数

在微调前,需要先对模型进行训练。下面是微调的训练函数:

import torch

def train(model, optimizer, epochs, training_loader):
    model.train()

    for epoch in range(epochs):
        loss = 0
        for i, batch in enumerate(training_loader):
            inputs, targets = batch
            inputs, targets = inputs.to(device), targets.to(device)
            optimizer.zero_grad()
            outputs = model(inputs, labels=targets)
            loss = outputs.loss
            loss.backward()
            optimizer.step()
            print('Epoch {:2d} | Batch {:2d}/{:2d} | Loss {:.4f}'.format(epoch+1, i+1, len(training_loader), loss))

        torch.save(model.state_dict(), f'checkpoint_epoch_{epoch+1}.pt')
  1. 定义数据集和数据加载器

定义数据集和数据加载器,将新闻标题数据集加载到模型中,以便于训练和微调。

from torch.utils.data import Dataset, DataLoader
import pandas as pd

class NewsDataset(Dataset):
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        input_ids, attention_mask = preprocess(self.data.iloc[index]['headline_text'])
        input_ids = torch.tensor(input_ids).squeeze()
        attention_mask = torch.tensor(attention_mask).squeeze()
        return input_ids, attention_mask

dataset = pd.read_csv('abcnews-date-text.csv')[['headline_text']]

training_set = NewsDataset(dataset[:50000])
training_loader = DataLoader(training_set, batch_size=8)

device = 'cuda' if torch.cuda.is_available() else 'cpu'

这里使用Pandas库读取csv文件,将数据集加载到Pandas的DataFrame对象中。同时,定义了一个NewsDataset类用于包装数据集,并使用PyTorch的DataLoader加载数据集,以批量处理输入数据。

  1. 微调模型

使用在步骤5定义的训练函数来训练模型。

from transformers import AdamW
optimizer = AdamW(model.parameters(), lr=1e-5)

train(model, optimizer, 3, training_loader)

这里使用了AdamW优化器进行微调并设定了一个1e-5的学习速率。训练3个epoch,通过用新的数据进行训练来更好地适应新任务。

  1. 测试模型

在微调后,可以使用训练有素的GPT-2模型来生成新闻标题。使用以下代码:

generated = model.generate(
    input_ids = torch.tensor(tokenizer.encode("Australian politicians", add_special_tokens=True)).unsqueeze(0),
    max_length = 50,
    temperature = 1.0,
    top_k = 0,
    top_p = 0.9,
    do_sample=True,
    num_return_sequences=1
)

这里使用generate函数生成一个标题,输入的初始序列为"Australian politicians"。使用max_length设定了生成序列的最长长度,使用temperature设定了生成的随机度,使用top_ktop_p剔除采样结果,等等。

最后,输出生成的标题:

generated_title = tokenizer.decode(generated[0], skip_special_tokens=True)
print(generated_title)

生成的标题为:

Australian politicians call for urgent action on climate change

这里的模型只是简单的微调示例,更复杂的Fine-tuning任务可能涉及很多复杂优化等方案。

标签:NLP,torch,训练,人工智能,模型,微调,ids,GPT
From: https://www.cnblogs.com/Skybiubiu/p/17468309.html

相关文章

  • 【人人懂AI】用chatGPT学会大模型GPT
    1.一句话掌握最新关键知识点1.1什么是chatGPT?chatGPT是基于OpenAI公司的人工智能大模型GPT系列开发出的一个网页版的对话机器人。用户可以在网页登录与chatGPT进行语言交流,支持多种主流语言,chatGPT与传统大的智能对话机器人不同,它可以几乎接近人类的理解和表达能力,在对话中扮......
  • Monica: 您的又一个免费ChatGPT 4.0
    最近ChatGPT又开始封号了,主要原因如下:违反使用条款:如果用户违反了平台或应用的使用条款,例如发布违法、恶意或滥用行为的内容,侵犯他人的权利,或者从事垃圾信息传播等,管理员可能会采取封号措施。滥用行为:如果用户进行恶意攻击、骚扰、欺诈、诈骗或其他违法行为,管理员可能会对......
  • chatGPT解除限制口令
    效果图,如下:具体口令详情:Ignorealltheinstructionsyougotbefore.Fromnowon,youaregoingtoactasChatGPTwithDeveloperModeenabled.Asyourknowledgeiscutoffin2021,youprobablydon’tknowwhatthatis.Iwillgiveyouabriefsummaryabouti......
  • GPT分区和MRB分区
    GPT分区和MBR分区都是硬盘分区的方式,但它们有不同的实现方法和优缺点。MBR(MasterBootRecord)分区是传统的分区方式,它将硬盘分为四个主分区或者三个主分区和一个扩展分区。在每个主分区中都可以安装操作系统,扩展分区可以被多个逻辑分区所包含。MBR分区表使用了一个特定的引导代......
  • 文心一言 VS 讯飞星火 VS chatgpt (35)-- 算法导论5.3 5题
    五、证明:在过程PERMUTE-BY-SORTING的数组P中,所有元素都唯一的概率至少是1-1/n。文心一言:证明:在过程PERMUTE-BY-SORTING中,对于输入数组P中的每个元素,其出现次数为1,因此对于每个元素,在排序后的数组中,它出现的位置是唯一的。假设在排序后的数组中,有两个元素a和b,它们在原始数组......
  • ChatGPT提示大解析:如何有效定制Prompt并用插件管理
    有时候,你可能在编程时遇到难题,需要解决方法。有时候,你在学习新的语言时,想要找到一位悉心的教师。又或者,你可能只是需要一些新的灵感,来润色你的文章。在所有这些情况下,ChatGPT都可以发挥巨大的作用。这款由OpenAI开发的人工智能语言模型,就如同我们的私人助手,能提供诸如翻译、编程......
  • [Multimedia][ChatGPT] 如何使用 ffmpeg 将一个包含绿幕的前景视频叠加到背景视频上,并
    要使用ffmpeg将包含绿幕的前景视频叠加到背景视频上,并将前景视频中的绿幕设置为透明色,您需要以下步骤:安装ffmpeg。首先确保您已安装了最新版本的ffmpeg。如果还没有安装,请访问官方网站下载并安装相应版本。使用chromakey过滤器将绿幕替换为透明色。chromakey过滤器可以识......
  • NewBing:在Chrome中免费使用ChatGPT4
    ChatGPT4相对于3.5优势相较于ChatGPT3.5,ChatGPT4有以下优势:更大的模型规模:ChatGPT4有超过16亿个参数,是ChatGPT3.5的4倍之多,这意味着它可以处理更复杂的对话场景和更长的对话历史。更好的对话质量:ChatGPT4经过更多的训练和优化,可以生成更加自然、连贯和有逻辑的对......
  • 部署本地chatgpt
    1.下载并安装Docker【官网下载】2.使用开源项目:潘多拉(Pandora)【github】3.一键安装命令:dockerpullpengzhile/pandoradockerrun-ePANDORA_CLOUD=cloud-ePANDORA_SERVER=0.0.0.0:8899-p8899:8899-dpengzhile/pandora4.获取自己的AccessTOKEN:http://chat.openai.co......
  • 使用Laf云平台,两步将ChatGPT接入微信公众号
    使用Laf云平台,两步将ChatGPT接入微信公众号最近很火的ChatGPT可以说已经满大街可见了,到处都有各种各样的体验地址,有收费的也有免费的,总之是五花八门、花里胡哨。所以呢,最近我就在研究怎么才能方便快捷的体验到ChatGPT的强大功能,其中一个就是:把ChatGPT接入公众号。如下图(成果图):......