【ChatGPT】ChatGPT是如何训练得到的?

这篇具有很好参考价值的文章主要介绍了【ChatGPT】ChatGPT是如何训练得到的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

ChatGPT是一种基于语言模型的聊天机器人,它使用了GPT(Generative Pre-trained Transformer)的深度学习架构来生成与用户的对话。GPT是一种使用Transformer编码器和解码器的预训练模型,它已被广泛用于生成自然语言文本的各种应用程序,例如文本生成,机器翻译和语言理解。

【ChatGPT】ChatGPT是如何训练得到的?,chatgpt,chatgpt,人工智能 

在本文中,我们将探讨如何使用Python和PyTorch来训练ChatGPT,以及如何使用已经训练的模型来生成对话。

 1.准备数据

在训练ChatGPT之前,我们需要准备一个大型的对话数据集。这个数据集应该包含足够的对话,覆盖各种主题和领域,以及各种不同的对话风格。这个数据集可以是从多个来源收集的,例如电影脚本,电视节目,社交媒体上的聊天记录等。

在本文中,我们将使用Cornell Movie Dialogs Corpus,一个包含电影对话的大型数据集。这个数据集包含超过22,000个对话,涵盖了多个主题和风格。

我们可以使用以下代码下载和解压缩Cornell Movie Dialogs Corpus,这个数据集也可以从[这里](https://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html)手动下载。

import os
import urllib.request
import zipfile

DATA_URL = 'http://www.cs.cornell.edu/~cristian/data/cornell_movie_dialogs_corpus.zip'
DATA_DIR = './cornell_movie_dialogs_corpus'
DATA_FILE = os.path.join(DATA_DIR, 'cornell_movie_dialogs_corpus.zip')

if not os.path.exists(DATA_DIR):
    os.makedirs(DATA_DIR)

if not os.path.exists(DATA_FILE):
    print('Downloading data...')
    urllib.request.urlretrieve(DATA_URL, DATA_FILE)

print('Extracting data...')
with zipfile.ZipFile(DATA_FILE, 'r') as zip_ref:
    zip_ref.extractall(DATA_DIR)

 2.数据预处理

在准备好数据集之后,我们需要对数据进行预处理,以便将其转换为模型可以处理的格式。在本教程中,我们使用了一个简单的预处理步骤,该步骤包括下列几步:

  • 将数据拆分成句子pairs(上下文,回答)
  • 去除标点符号和特殊字符
  • 将所有的单词转换成小写
  • 将单词映射到一个整数ID
  • 将句子填充到相同的长度
下面是用于预处理数据的代码:
import re
import random
import numpy as np
import torch

def load_conversations():
    id2line = {}
    with open(os.path.join(DATA_DIR, 'movie_lines.txt'), errors='ignore') as f:
        for line in f:
            parts = line.strip().split(' +++$+++ ')
            id2line[parts[0]] = parts[4]

    inputs = []
    outputs = []
    with open(os.path.join(DATA_DIR, 'movie_conversations.txt'), 'r') as f:
        for line in f:
            parts = line.strip().split(' +++$+++ ')
            conversation = [id2line[id] for id in parts[3][1:-1].split(',')]
            for i in range(len(conversation) - 1):
                inputs.append(conversation[i])
                outputs.append(conversation[i+1])
    return inputs, outputs

def preprocess_sentence(sentence):
    sentence = re.sub(r"([?.!,])", r" \1 ", sentence)
    sentence = re.sub(r"[^a-zA-Z?.!,]+", r" ", sentence)
    sentence = sentence.lower()
    return sentence

def tokenize_sentence(sentence, word2index):
    tokenized = []
    for word in sentence.split(' '):
        if word not in word2index:
            continue
        tokenized.append(word2index[word])
    return tokenized

def preprocess_data(inputs, outputs, max_length=20):
    pairs = []
    for i in range(len(inputs)):
        input_sentence = preprocess_sentence(inputs[i])
        output_sentence = preprocess_sentence(outputs[i])
        pairs.append((input_sentence, output_sentence))

    word_counts = {}
    for pair in pairs:
        for sentence in pair:
            for word in sentence.split(' '):
                if word not in word_counts:
                    word_counts[word] = 0
                word_counts[word] += 1

    word2index = {}
    index2word = {0: '<pad>', 1: '<start>', 2: '<end>', 3: '<unk>'}
    index = 4
    for word, count in word_counts.items():
        if count >= 10:
            word2index[word] = index
            index2word[index] = word
            index += 1

    inputs_tokenized = []
    outputs_tokenized = []
    for pair in pairs:
        input_sentence, output_sentence = pair
        input_tokenized = [1] + tokenize_sentence(input_sentence, word2index) + [2]
        output_tokenized = [1] + tokenize_sentence(output_sentence, word2index) + [2]
        if len(input_tokenized) <= max_length and len(output_tokenized) <= max_length:
            inputs_tokenized.append(input_tokenized)
            outputs_tokenized.append(output_tokenized)

    inputs_padded = torch.nn.utils.rnn.pad_sequence(inputs_tokenized, batch_first=True, padding_value=0)
    outputs_padded = torch.nn.utils.rnn.pad_sequence(outputs_tokenized, batch_first=True, padding_value=0)
    return inputs_padded, outputs_padded, word2index, index2word

 3.训练模型

在完成数据预处理之后,我们可以开始训练ChatGPT模型。对于本文中的示例,我们将使用PyTorch深度学习框架来实现ChatGPT模型。

首先,我们需要定义一个Encoder-Decoder模型结构。这个结构包括一个GPT解码器,它将输入的上下文句子转换为一个回答句子。GPT解码器由多个Transformer解码器堆叠而成,每个解码器都包括多头注意力和前馈神经网络层。


import torch.nn as nn
from transformers import GPT2LMHeadModel

class EncoderDecoder(nn.Module):
    def __init__(self, num_tokens, embedding_dim=256, hidden_dim=512, num_layers=2, max_length=20):
        super().__init__()
        
        self.embedding = nn.Embedding(num_tokens, embedding_dim)
        self.decoder = nn.ModuleList([GPT2LMHeadModel.from_pretrained('gpt2') for _ in range(num_layers)])
        self.max_length = max_length

    def forward(self, inputs, targets=None):
        inputs_embedded = self.embedding(inputs)
        outputs = inputs_embedded
        for decoder in self.decoder:
            outputs = decoder(inputs_embedded=outputs)[0]
        return outputs

    def generate(self, inputs, temperature=1.0):
        inputs_embedded = self.embedding(inputs)
        input_length = inputs.shape[1]
        output = inputs_embedded
        for decoder in self.decoder:
            output = decoder(inputs_embedded=output)[0][:, input_length-1, :]
            output_logits = output / temperature
            output_probs = nn.functional.softmax(output_logits, dim=-1)
            output_token = torch.multinomial(output_probs, num_samples=1)
            output_token_embedded = self.embedding(output_token)
            output = torch.cat([output, output_token_embedded], dim=1)
        return output[:, input_length:, :]

然后,我们需要定义一个训练函数,该函数将使用梯度下降方法优化模型参数,并将每个epoch的损失和正确率记录到一个日志文件中。文章来源地址https://www.toymoban.com/news/detail-623982.html


def train(model, inputs, targets, optimizer, criterion):
    model.train()
    optimizer.zero_grad()
    outputs = model(inputs, targets[:, :-1])
    loss = criterion(outputs.reshape(-1, outputs.shape[-1]), targets[:, 1:].reshape(-1))
    loss.backward()
    optimizer.step()
    return loss.item()

def evaluate(model, inputs, targets, criterion):
    model.eval()
    with torch.no_grad():
        outputs = model(inputs, targets[:, :-1])
        loss = criterion(outputs.reshape(-1, outputs.shape[-1]), targets[:, 1:].reshape(-1))
    return loss.item()

def train_model(model, inputs, targets, word2index, index2word, num_epochs=10, batch_size=64, lr=1e-3):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu

到了这里,关于【ChatGPT】ChatGPT是如何训练得到的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能】chatgpt

    2022年11月30日 自然语言生成式模型 2023年3月2日 2023年3月14日CPT-4 用途 分类 生成 翻译 转换 总结 完成完形填空 事实回应 中间插入文字 编辑文本角色转换 核心概念 提示词的设计 展示和讲述 搜索功能测试 搜索结果测试 提供质量数据 作为测试工程师我该学习什么提高我的收入

    2024年02月08日
    浏览(56)
  • 浅谈ChatGPT(人工智能)

    ChatGPT (全名:Chat Generative Pre-trained Transformer),是美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能

    2023年04月12日
    浏览(42)
  • 人工智能交互革命:探索ChatGPT的无限可能 第4章 ChatGPT-智能客服

    智能客服是一种利用人工智能技术,为客户提供在线服务和支持的解决方案。它能够通过自然语言处理、机器学习等技术,识别和理解客户的问题,并提供针对性的解决方案。智能客服可以通过多种渠道提供服务,包括网站、社交媒体、短信、电话等。 智能客服的发展可以追

    2023年04月25日
    浏览(61)
  • ChatGPT:人工智能开启智能交流新篇章

    一、ChatGPT:智能交流的新里程碑 ChatGPT是OpenAI基于GPT技术的最新版本,采用深度学习模型,通过预训练和微调的方式,使其能够理解和生成自然语言,从而实现与人类更自然、流畅的对话和交流。 二、ChatGPT的技术原理与优势 基于GPT技术:GPT技术是一种基于变换器(Transform

    2024年02月15日
    浏览(61)
  • 关于ChatGPT人工智能浅谈

            现今ChatGPT已经向我们展示了其强大的数据收集分析和处理能力,这点随着其不断的学习训练会越来越强。ChatGPT这类生成式人工智能在数据收集分析和处理能力这方面远远超过人类,虽然它目前还不能完全做到按人类的方式对数据进行利用(这类生成式人工智能目前

    2024年02月05日
    浏览(45)
  • ChatGPT会被人工智能干掉吗?

    ChatGPT是美国“开放人工智能研究中心”2022年11月30日发布的聊天机器人程序,它是人工智能技术驱动的自然语言处理工具,能通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译

    2023年04月24日
    浏览(51)
  • ChatGPT:人工智能交互的未来之光

    一、ChatGPT:开启自然语言交流新纪元 ChatGPT 是基于 GPT(生成式预训练)技术的最新版本,它采用深度学习模型,通过在大规模文本数据上的预训练来理解自然语言,并生成具有连贯性和合理性的回复。ChatGPT 是一种通用的人工智能模型,能够在各种领域展现出卓越的表现,如

    2024年02月16日
    浏览(45)
  • 贝叶斯人工智能大脑与 ChatGPT

    🍉 CSDN 叶庭云 : https://yetingyun.blog.csdn.net/ 论文地址:https://arxiv.org/abs/2308.14732 这篇论文旨在研究 Chat Generative Pre-trained Transformer (ChatGPT)在贝叶斯推理情况下解决数学问题的能力。 从 Zhu, L., Gigerenzer, G. (2006). Children can solve Bayesian problems: The role of representation in mental computat

    2024年02月10日
    浏览(66)
  • ChatGPT:人工智能与人类交流的桥梁

    在人工智能的浪潮中,ChatGPT以其独特的交流能力成为了一个亮点。作为一个基于强大的GPT-4模型的聊天机器人,ChatGPT不仅仅是技术的展示,它更是人工智能与人类交流的桥梁。 ChatGPT的出现标志着人工智能在语言理解和生成方面的一次革命。它能够理解复杂的语言模式,提供

    2024年01月23日
    浏览(48)
  • ChatGPT:人工智能助手的新时代

    随着人工智能的不断发展,自然语言处理技术正逐渐成为我们与计算机交互的重要方式之一。其中,ChatGPT作为一种基于大规模预训练语言模型的对话生成系统,正引领着人工智能助手的新时代。本篇博客将介绍ChatGPT的原理、应用场景以及优势,帮助读者更好地了解和应用这

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包