赞
踩
GPT-1 是一种用于自然语言处理的机器学习模型,它是基于 Transformer 架构的。它是 OpenAI 在 2018 年发布的第一个 GPT 模型,有 1.17 亿个参数,比之前的语言模型有了显著的提升¹²。GPT-1 的一个优点是它能够根据给定的提示或上下文生成流畅和连贯的语言¹²。GPT-1 的训练数据是两个数据集的组合:Common Crawl,一个包含数十亿单词的网页数据集,和 BookCorpus 数据集,一个包含超过 11000 本不同类型的书籍的数据集。这些多样化的数据集使得 GPT-1 能够发展出强大的语言建模能力²。
Source: Conversation with Bing, 2023/5/12
(1) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
(2) Generative pre-trained transformer - Wikipedia. https://en.wikipedia.org/wiki/Generative_pre-trained_transformer.
(3) GitHub - akshat0123/GPT-1: Pytorch implementation of GPT-1. https://github.com/akshat0123/GPT-1.
GPT-1 的主要特点和优势是:
Source: Conversation with Bing, 2023/5/12
(1) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
(2) OpenAI GPT-n models: Shortcomings & Advantages in 2023 … https://research.aimultiple.com/gpt/.
(3) GPT-1, GPT-2 & GPT-3: Learn the Evolution of AI Language … https://360digitmg.com/blog/types-of-gpt-in-artificial-intelligence.
(4) What is GPT (GUID Partition Table) Disk and Advantage of It?. https://www.diskpart.com/gpt-mbr/gpt-guid-partition-table-disk-1203.html.
GPT-1 的主要局限和缺点是:
Source: Conversation with Bing, 2023/5/12
(1) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
(2) ChatGPT: A comprehensive review on background … https://www.sciencedirect.com/science/article/pii/S266734522300024X.
(3) OpenAI GPT-n models: Shortcomings & Advantages in 2023 … https://research.aimultiple.com/gpt/.
Source: Conversation with Bing, 2023/5/12
(1) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
(2) Generative pre-trained transformer - Wikipedia. https://en.wikipedia.org/wiki/Generative_pre-trained_transformer.
(3) GPT models explained. Open AI’s GPT-1,GPT-2,GPT-3 … https://medium.com/walmartglobaltech/the-journey-of-open-ai-gpt-models-32d95b7b7fb2.
GPT-1 和其他语言模型有以下一些区别和联系:
Source: Conversation with Bing, 2023/5/12
(1) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
(2) Models - OpenAI API. https://platform.openai.com/docs/models.
(3) ChatGPT vs. Other AI Language Models: A Comparative Analysis. https://www.linkedin.com/pulse/chatgpt-vs-other-ai-language-models-comparative-analysis-smith.
GPT-1 可以用于多种自然语言处理的任务,例如问答、语言翻译、文本摘要、文本生成等¹²。它可以根据给定的提示或上下文生成合理和相关的语言输出¹²。例如,它可以生成故事、诗歌、对话等¹²。
GPT-1,BERT 和 XLNet 都是使用 Transformer 架构的生成式预训练语言模型,它们都利用了大量的无标注文本数据来学习语言的统计规律,并且可以在特定的 NLP 任务上进行微调。
GPT-1 是第一个使用 Transformer 的生成式预训练语言模型,它只使用了 Transformer 的解码器部分,采用了自回归(Autoregressive)的方式来生成语言,即根据已经生成的单词来预测下一个单词。GPT-1 只能从左到右地看到输入序列的信息,因此无法利用右侧的上下文信息。
BERT 是在 GPT-1 的基础上提出的一种改进的模型,它使用了 Transformer 的编码器部分,采用了自编码(Autoencoding)的方式来生成语言,即根据输入序列中的部分单词来预测被遮盖(Masked)的单词。BERT 能够从左到右和从右到左地看到输入序列的信息,因此能够利用双向的上下文信息。
XLNet 是在 BERT 的基础上提出的一种更先进的模型,它结合了 GPT-1 的自回归方式和 BERT 的自编码方式,采用了置换语言模型(Permutation Language Model)的方式来生成语言,即根据输入序列中的任意顺序的部分单词来预测剩余的单词。XLNet 通过随机排列输入序列中的单词顺序,能够克服 BERT 中使用掩码带来的预训练和微调不一致(Pretrain-Finetune Discrepancy)的问题,并且能够利用更丰富的上下文信息。
Source: Conversation with Bing, 2023/5/13
(1) How XLNet combines the best of GPT and BERT. https://towardsdatascience.com/understanding-the-difference-of-gpt-bert-and-xlnet-in-2-min-8aa917330ad1.
(2) tensorflow - Which model (GPT2, BERT, XLNet and etc … https://stackoverflow.com/questions/57845439/which-model-gpt2-bert-xlnet-and-etc-would-you-use-for-a-text-classification.
(3) What are the differences in Pre-Trained Transformer-base … https://medium.com/mlearning-ai/what-are-the-differences-in-pre-trained-transformer-base-models-like-bert-distilbert-xlnet-gpt-4b3ea30ef3d7.
(4) spaCy meets Transformers: Fine-tune BERT, XLNet and GPT-2. https://explosion.ai/blog/spacy-transformers/.
GPT-1 网络结构图 1:
GPT-1 网络结构图 2:
GPT-1 的网络结构基于 Transformer 的 Decoder 部分,它只使用了 Masked Multi-Head Attention 和 Feed Forward 层,并将层数扩展到 12 层,Attention 的维数扩大到 768,Attention 的头数增加到 12 个,Feed Forward 层的隐层维数增加到 3072,总参数达到 1.17 亿¹³。
GPT-1 的训练分为两个阶段:无监督预训练和有监督微调。无监督预训练的目标是最大化给定上文的条件概率,有监督微调的目标是最大化给定输入的标签概率,并加入无监督预训练的目标作为正则项¹。GPT-1 使用了 BooksCorpus 数据集进行预训练,这个数据集包含了约 5GB 的未发布的书籍¹²。
GPT-1 可以处理多种下游任务,包括文本分类、文本蕴含、语义相似度、问答等。对于不同的任务,GPT-1 有不同的输入变换方式,例如在自然语言推理任务中,它会将前提和假设用分隔符隔开,在问答任务中,它会将每个选项分别和内容拼接等¹。
Source: Conversation with Bing, 2023/5/12
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(3) GPT-1の仕組みを解説! | AGIRobots. https://agirobots.com/gpt-1/.
GPT-1是OpenAI在2018年提出的一种生成式预训练语言模型,它的核心机制是利用Transformer的Decoder部分进行无监督的语言模型预训练,然后在具体的下游任务上进行有监督的微调¹²。GPT-1使用了Masked Multi-Head Attention和Feed Forward Network组成的12层Transformer Block,以及词向量和位置向量作为输入和输出的Embedding层²³。GPT-1的总参数量达到了1.17亿,是当时最大的语言模型之一³。
Source: Conversation with Bing, 2023/5/12
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) GPT-1の仕組みを解説! | AGIRobots. https://agirobots.com/gpt-1/.
(3) GPT-1 to GPT-4: Each of OpenAI’s GPT Models Explained … https://www.makeuseof.com/gpt-models-explained-and-compared/.
GPT-1的输入层是词向量和位置向量的加和,表示为E=UW_e+W_p,其中U是当前单词的上文单词向量,W_e是词向量矩阵,W_p是位置向量矩阵。
GPT-1的中间层是由12个Transformer Block组成的堆叠结构,每个Transformer Block包含一个Masked Multi-Head Attention层和一个Feed Forward Network层,以及残差连接和层归一化。
GPT-1的输出层根据预训练和微调的不同而不同。在预训练阶段,输出层是一个线性变换加上一个softmax函数,用于预测下一个单词的概率,表示为P(u)=softmax(h_nW_e^T),其中h_n是最后一个Transformer Block的输出,W_e是词向量矩阵的转置。在微调阶段,输出层是一个任务特定的分类器或回归器,用于解决下游任务。
GPT-1的位置向量是一个512×768的矩阵,其中512是输入序列的最大长度,768是词向量的维度。位置向量的每一行表示一个位置的Embedding,用于捕捉文本中的顺序信息。GPT-1的位置向量是随机初始化的,并在预训练和微调的过程中进行更新,与词向量一起学习。这与Transformer原论文中使用的正弦和余弦函数生成的位置编码不同,后者是固定的,不参与学习。
输入层是把整个序列输入到中间层的,但是中间层中的Masked Multi-Head Attention会使用一个掩码矩阵,来遮挡掉当前位置后面的单词的信息,从而实现只看前面的序列的效果。这个掩码矩阵是一个上三角形的矩阵,它的对角线和下方都是0,上方都是负无穷。当这个矩阵和注意力得分矩阵相加时,会使得当前位置后面的单词的注意力得分变成负无穷,然后经过softmax函数后变成0,从而忽略掉它们的影响。这样就可以保证只有前面的序列对当前位置的预测有贡献。
例如:
0 | -∞ | -∞ | -∞ |
---|---|---|---|
0 | 0 | -∞ | -∞ |
0 | 0 | 0 | -∞ |
0 | 0 | 0 | 0 |
GPT-1的位置向量是固定大小的,不能直接扩展到更长的序列。如果输入序列超过512个单词,GPT-1会截断多余的部分,导致信息的丢失。如果要处理更长的序列,GPT-1需要增加位置向量矩阵的行数,或者使用其他方法来表示位置信息,比如相对位置编码或者分层注意力机制。
分层注意力机制是指将输入序列分成几段,然后分别输入到多个注意力机制层,然后将输出结果拼接到一起。
GPT-1如何处理不同长度的输入序列,取决于输入序列的长度是否超过了最大长度。GPT-1的最大长度是512个单词,如果输入序列的长度小于或等于512,那么GPT-1可以直接处理,不需要做任何特殊的处理。如果输入序列的长度大于512,那么GPT-1会截断多余的部分,只保留前512个单词,然后再进行处理。这样做会导致信息的丢失,所以一般不建议输入过长的序列。
GPT-1的激活函数是GeLU,即高斯误差线性单元。¹² 它的数学表达式是:
GeLU ( x ) = x Φ ( x ) = x 1 2 [ 1 + erf ( x 2 ) ] \text{GeLU}(x) = x \Phi(x) = x \frac{1}{2} \left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right] GeLU(x)=xΦ(x)=x21[1+erf(2 x)]
其中
Φ
(
x
)
\Phi(x)
Φ(x)是标准正态分布的累积分布函数,
erf
(
x
)
\text{erf}(x)
erf(x)是误差函数。其中,erf
是误差函数,其图像如下:
GeLU 的曲线图如下:
GeLU的特点是它是一个平滑的非线性函数,它可以近似模拟ReLU的性质,但是又避免了ReLU的一些缺点,比如梯度消失和死亡神经元。³ GeLU也可以更好地适应Transformer的结构,因为它可以保持输入和输出的均值和方差不变。
GPT-1使用GeLU作为中间层和输出层的激活函数,以提高模型的表达能力和学习效率。
Source: Conversation with Bing, 2023/5/12
(1) GPT models explained. Open AI’s GPT-1,GPT-2,GPT-3 … https://medium.com/walmartglobaltech/the-journey-of-open-ai-gpt-models-32d95b7b7fb2.
(2) Activation function and GLU variants for Transformer models. https://medium.com/@tariqanwarph/activation-function-and-glu-variants-for-transformer-models-a4fcbe85323f.
(3) OpenAI peeks into the “black box” of neural networks with … https://arstechnica.com/information-technology/2023/05/openai-peeks-into-the-black-box-of-neural-networks-with-new-research/.
GeLU的导数图像如下:
可以看到,当x越大时,导数越接近1,当x越小时,导数越接近0,而在零点附近是一个平滑的曲线,没有ReLU的尖锐变化。
GeLU的缺点有以下几点:
Source: Conversation with Bing, 2023/5/12
(1) relu, GeLU , swish, mish activation function comparison. https://chadrick-kwag.net/relu-GeLU-swish-mish-activation-function-comparison/.
(2) [1606.08415] Gaussian Error Linear Units (GeLUs) - arXiv.org. https://arxiv.org/abs/1606.08415.
(3) GeLU activation explained | Towards AI. https://pub.towardsai.net/is-GeLU-the-relu-successor-deep-learning-activations-7506cf96724f.
(4) GeLU Explained | Papers With Code. https://paperswithcode.com/method/GeLU.
GPT-1的损失函数是标准的语言模型损失函数,即通过上文预测当前词的对数似然,表示如下:
L 1 ( U ) = ∑ i log P ( u i ∣ u i − k , . . . , u i − 1 ; θ ) L_1(\mathcal{U})=\sum_i \text{log}P(u_i|u_{i-k},...,u_{i-1};\theta) L1(U)=i∑logP(ui∣ui−k,...,ui−1;θ)
其中 k k k 是窗口大小, U \mathcal{U} U 是输入文本, θ \theta θ 是模型参数。
Source: Conversation with Bing, 2023/5/12
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) GitHub - akshat0123/GPT-1: Pytorch implementation of GPT-1. https://github.com/akshat0123/GPT-1.
(3) GPT-1/GPT-2/GPT-3简介 - 知乎. https://zhuanlan.zhihu.com/p/473001104.
对数似然函数和交叉熵函数的联系和区别如下:
log P ( D ∣ θ ) \text{log}P(D|\theta) logP(D∣θ)
其中 D D D 是观测数据, θ \theta θ 是模型参数。
H ( P , Q ) = − ∑ x P ( x ) log Q ( x ) H(P,Q)=-\sum_x P(x)\text{log}Q(x) H(P,Q)=−x∑P(x)logQ(x)
其中 P P P 和 Q Q Q 是两个概率分布。
H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) H(P,Q)=H(P)+D_{KL}(P||Q) H(P,Q)=H(P)+DKL(P∣∣Q)
其中 H ( P ) H(P) H(P) 是 P P P 的香农熵,表示 P P P 的不确定性,是一个常数; D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 是 P P P 和 Q Q Q 之间的相对熵(KL散度),表示两个分布的差异,是非负的。因此,最小化交叉熵等价于最大化对数似然函数。
Source: Conversation with Bing, 2023/5/12
(1) 【损失函数】交叉熵损失函数简介 - 知乎. https://zhuanlan.zhihu.com/p/124309304.
(2) 损失函数 | 负对数似然 - 知乎. https://zhuanlan.zhihu.com/p/35709139.
(3) 如何理解似然函数? - 知乎. https://www.zhihu.com/question/54082000.
GPT-1的优化器是Adam,它是一种基于梯度下降的优化算法,可以自适应地调整学习率和动量。
Source: Conversation with Bing, 2023/5/13
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) GPT-1の仕組みを解説! | AGIRobots. https://agirobots.com/gpt-1/.
(3) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
语言模型的性能评估通常有两个方面:困惑度(perplexity)和下游任务的表现。
困惑度是语言模型对测试集的预测能力的度量,它反映了语言模型对未知文本的不确定性。困惑度越低,说明语言模型越准确,越能够预测下一个词。困惑度的计算公式是:
P P L = exp ( − 1 N ∑ i = 1 N log P ( w i ∣ w < i ) ) PPL = \exp(-\frac{1}{N}\sum_{i=1}^N \log P(w_i|w_{<i})) PPL=exp(−N1i=1∑NlogP(wi∣w<i))
其中, N N N是测试集的词数, P ( w i ∣ w < i ) P(w_i|w_{<i}) P(wi∣w<i) 是语言模型给出的第 i i i个词的条件概率。
困惑度的优点是它是一个客观的指标,可以用来比较不同的语言模型。缺点是它不能直接反映语言模型在具体任务上的效果,比如机器翻译、文本生成、问答等。
下游任务的表现是指将语言模型作为预训练模型,然后在特定的任务上进行微调,得到的任务指标,比如准确率、召回率、BLEU分数等。这些指标可以反映语言模型在实际应用中的价值和能力。下游任务的表现的优点是它更贴近实际需求,可以评估语言模型的泛化能力和迁移能力。缺点是它受到任务本身和微调方法的影响,可能不能完全体现语言模型本身的质量。
GPT-1是一种生成式预训练语言模型,它使用了Transformer解码器作为网络结构,在大规模无标注文本上进行自回归语言建模预训练,然后在不同的下游任务上进行微调。GPT-1在12个自然语言理解和生成任务上都取得了当时最好或接近最好的结果¹²³。
Source: Conversation with Bing, 2023/5/13
(1) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(2) GPT系列论文阅读笔记 - 知乎. https://zhuanlan.zhihu.com/p/412351920.
(3) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
BLEU分数是一种用来评估机器翻译质量的指标,它基于参考翻译和机器翻译之间的n-gram匹配程度来计算。BLEU分数的取值范围是0到1,越接近1表示机器翻译越接近参考翻译¹²。
BLEU分数的计算公式是:
B L E U = B P ⋅ exp ( ∑ n = 1 N w n log p n ) BLEU = BP \cdot \exp(\sum_{n=1}^N w_n \log p_n) BLEU=BP⋅exp(n=1∑Nwnlogpn)
其中, B P BP BP是简短惩罚因子,用来防止过短的机器翻译得到高分, w n w_n wn是n-gram的权重, p n p_n pn是n-gram的精确度,即机器翻译中的n-gram有多少在参考翻译中出现过³⁴。
BLEU分数的优点是它简单、快速、客观,可以用来比较不同的机器翻译系统。缺点是它不能考虑语言表达的流畅性、语法正确性、语义一致性等方面,也不能反映不同领域和任务的特点。
Source: Conversation with Bing, 2023/5/13
(1) Metric评价指标-机器翻译指标之BLEU - 知乎. https://zhuanlan.zhihu.com/p/350596071.
(2) BLEU score评估模型 - 知乎. https://zhuanlan.zhihu.com/p/338488036.
(3) 机器翻译与自动文摘评价指标 BLEU 和 ROUGE - 简书. https://www.jianshu.com/p/0afb93fda403.
(4) 机器学习笔记 - 什么是BLEU分数?_坐望云起的博客-CSDN博客. https://blog.csdn.net/bashendixie5/article/details/125055325.
BLEU和PPL是两种不同的指标,它们衡量的是不同的方面。BLEU是用来评估机器翻译的输出质量,PPL是用来评估语言模型的预测能力。它们不能直接比较,也没有绝对的好坏之分。一般来说,BLEU更适合评估生成式任务,如机器翻译、文本摘要等,PPL更适合评估建模任务,如语言理解、文本分类等。
GPT-1的超参数分别有以下几种:
Source: Conversation with Bing, 2023/5/13
(1) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(2) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(3) GPT-1/GPT-2/GPT-3/GPT-3.5 语言模型详细介绍 - 知乎. https://zhuanlan.zhihu.com/p/620494604.
GPT-1的参数数量是1.17亿,它相比于之前的语言模型有很大的提升。例如,在文本蕴含任务上,GPT-1的准确率达到了82.1%,超过了当时的最佳模型ESIM²的81.5%。在问答任务上,GPT-1的准确率达到了59.4%,超过了当时的最佳模型BiDAF³的58.0%。在语义相似度任务上,GPT-1的皮尔逊相关系数达到了0.884,超过了当时的最佳模型InferSent的0.877。这些结果表明,GPT-1通过在大规模无标注数据上进行预训练,可以有效地提高语言理解能力,并在多个下游任务上取得优异的性能。
Source: Conversation with Bing, 2023/5/13
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(3) GPT-1の仕組みを解説! | AGIRobots. https://agirobots.com/gpt-1/.
GPT-1的训练分为两个阶段:无监督预训练和有监督微调。无监督预训练是基于语言模型进行训练的,给定一个无标签的序列,语言模型的优化目标是最大化下面的似然值:
L 1 ( U ) = ∑ i log P ( u i ∣ u i − k , … , u i − 1 ; Θ ) L_1 (\mathcal {U}) = \sum_i \log P (u_i | u_ {i-k}, \dots, u_ {i-1}; \Theta) L1(U)=i∑logP(ui∣ui−k,…,ui−1;Θ)
其中 k 是滑动窗口的大小, P 是条件概率, Θ \Theta Θ 是模型的参数。GPT-1使用了12个变体的Transformer块作为解码器,每个Transformer块只包含Masked Multi-Head Attention和Feed Forward层。
有监督微调是在具体任务上对预训练模型进行调整,以解决具体的下游任务,如文本分类、文本蕴含、语义相似度、问答等。对于一个有标签的数据集,每个实例有 m 个输入token和一个标签 y 组成。首先将这些token输入到预训练模型中,得到最终的特征向量 h l m h_l^m hlm 。然后再通过一个全连接层得到预测结果 y :
P ( y ∣ x 1 , … , x m ) = softmax ( h l m W y ) P (y|x^1, \dots, x^m) = \text {softmax} (h^m_l W_y) P(y∣x1,…,xm)=softmax(hlmWy)
其中 W y W_y Wy 为全连接层的参数。有监督的目标则是最大化下面的值:
L 2 ( C ) = ∑ x , y log P ( y ∣ x 1 , … , x m ) L_2 (\mathcal {C}) = \sum_ {x,y} \log P (y|x^1, \dots, x^m) L2(C)=x,y∑logP(y∣x1,…,xm)
作者并没有直接使用 L 2 L_2 L2 ,而是向其中加入了 L 1 L_1 L1 ,并使用 λ \lambda λ 进行两个任务权值的调整, λ \lambda λ 的值一般为 0.5 :
L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) L_3 (\mathcal {C}) = L_2 (\mathcal {C}) + \lambda L_1 (\mathcal {C}) L3(C)=L2(C)+λL1(C)
当进行有监督微调的时候,作者只训练输出层的 W y W_y Wy 和分隔符(delimiter)的嵌入值。
Source: Conversation with Bing, 2023/5/13
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
在微调时,加上预训练的损失函数是为了防止过拟合,保持模型的泛化能力。因为有些下游任务的数据集可能很小或者很不平衡,如果只计算微调任务的损失函数,可能会导致模型忘记预训练时学到的语言知识,或者过度适应特定任务的数据分布。通过加上预训练的损失函数,可以让模型在微调时仍然考虑到语言模型的目标,从而提高模型的鲁棒性和可迁移性。
可能有以下几个原因:
GPT-1是一个基于Transformer的自回归语言模型,它可以生成文本的方式是根据给定的上下文,预测下一个词的概率分布,并从中采样一个词作为输出。GPT-1使用的采样策略有两种:
GPT-1还使用了一个温度参数(Temperature Parameter)来调节采样的随机性。温度参数是一个正数,它可以影响概率分布的形状。当温度参数接近0时,概率分布趋向于一个狭窄的尖峰,这时候采样的结果接近于贪婪采样;当温度参数接近无穷大时,概率分布趋向于一个平坦的均匀分布,这时候采样的结果接近于随机采样。温度参数可以根据不同的任务和需求进行调节,一般来说,温度参数越大,生成的文本越多样化,但也越不稳定;温度参数越小,生成的文本越流畅,但也越单调。
Source: Conversation with Bing, 2023/5/13
(1) GPT系列论文阅读笔记 - 知乎. https://zhuanlan.zhihu.com/p/412351920.
(2) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(3) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
GPT-1是一种生成式预训练语言模型,它的微调过程是在无监督预训练的基础上,针对特定的下游任务,添加一层全连接层,并使用语言模型的目标函数作为辅助目标函数来增强学习效果¹²。
一个下游任务的例子是文本分类,它的目的是判断输入文本属于哪个类别。它的输入格式是在原始文本的两端添加起始和终止token,然后输入到预训练好的GPT-1模型中,得到最后一个token对应的特征向量。它的输出格式是一个类别标签或者一个概率分布,它是通过将特征向量输入到添加的全连接层并经过softmax得到的¹³。
Source: Conversation with Bing, 2023/5/13
(1) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
(2) GPT-1 & 2: 预训练+微调带来的奇迹 - 知乎. https://zhuanlan.zhihu.com/p/99953380.
(3) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
Source: Conversation with Bing, 2023/5/13
(1) OpenAI ChatGPT(二):十分钟读懂 GPT-1 - 知乎. https://zhuanlan.zhihu.com/p/604625917.
(2) Generative pre-trained transformer - Wikipedia. https://en.wikipedia.org/wiki/Generative_pre-trained_transformer.
(3) 预训练语言模型之GPT-1,GPT-2和GPT-3 - 知乎. https://zhuanlan.zhihu.com/p/350017443.
可以参考以下的链接:
这些代码都是基于 GPT-1 的论文来实现的,你可以根据自己的需要进行修改和调整。
Source: Conversation with Bing, 2023/5/13
(1) GitHub - akshat0123/GPT-1: Pytorch implementation of GPT-1. https://github.com/akshat0123/GPT-1.
(2) GitHub - karpathy/minGPT: A minimal PyTorch re … https://github.com/karpathy/minGPT.
(3) GPT-1 | Paper Explained & PyTorch Implementation - YouTube. https://www.youtube.com/watch?v=Vmqy3VP6DFk.
假设我们使用 ConceptNet 作为知识图谱,使用图神经网络和注意力机制来融合知识和文本,使用 GPT-1 来生成对话,那么伪代码可能是这样的:
# 导入相关的库 import torch import transformers import dgl # 加载预训练的 GPT-1 模型和分词器 model = transformers.AutoModelForCausalLM.from_pretrained("gpt") tokenizer = transformers.AutoTokenizer.from_pretrained("gpt") # 加载 ConceptNet 的知识图谱 kg = dgl.data.ConceptNet() # 定义一个函数,根据输入的文本,查询知识图谱中的相关实体和关系 def query_kg(text): # 使用分词器将文本转换为 token tokens = tokenizer.tokenize(text) # 初始化一个空的列表,用于存储查询到的知识 knowledge = [] # 遍历每个 token for token in tokens: # 如果 token 是一个实体,即在知识图谱中有对应的节点 if token in kg.nodes: # 获取该实体的邻居节点和边的类型 neighbors = kg.successors(token) edge_types = kg.edata["type"][token] # 遍历每个邻居节点和边的类型 for neighbor, edge_type in zip(neighbors, edge_types): # 将实体、关系和邻居实体组成一个三元组,添加到知识列表中 triple = (token, edge_type, neighbor) knowledge.append(triple) # 返回知识列表 return knowledge # 定义一个函数,根据输入的文本和知识,使用图神经网络和注意力机制来融合知识和文本,得到融合后的向量 def fuse_knowledge(text, knowledge): # 使用分词器将文本转换为 token,并添加起始和结束符号 tokens = [tokenizer.bos_token] + tokenizer.tokenize(text) + [tokenizer.eos_token] # 使用分词器将 token 转换为 id,并转换为张量 input_ids = torch.tensor(tokenizer.convert_tokens_to_ids(tokens)) # 使用 GPT-1 模型对输入 id 进行编码,得到文本向量 text_vector = model(input_ids)[0] # 初始化一个空的图,用于存储知识图谱中的节点和边 g = dgl.DGLGraph() # 遍历每个知识三元组 for head, relation, tail in knowledge: # 将头实体和尾实体作为节点添加到图中,如果已经存在则跳过 g.add_nodes(head) g.add_nodes(tail) # 将关系作为边的类型添加到图中,连接头实体和尾实体 g.add_edge(head, tail, data={"type": relation}) # 使用预训练的实体嵌入矩阵,将图中的每个节点转换为向量 entity_embedding = torch.load("entity_embedding.pt") node_features = entity_embedding[g.nodes] # 使用图卷积网络,对图中的节点向量进行更新,得到知识向量 gcn = dgl.nn.GCNConv(in_feats, out_feats) knowledge_vector = gcn(g, node_features) # 使用注意力机制,计算文本向量和知识向量之间的相似度,并进行加权求和,得到融合后的向量 attention = torch.nn.MultiheadAttention(embed_dim, num_heads) fused_vector, _ = attention(text_vector, knowledge_vector, knowledge_vector) # 返回融合后的向量 return fused_vector # 定义一个函数,根据输入的融合向量,使用 GPT-1 模型来生成对话 def generate_dialogue(fused_vector): # 初始化一个空的列表,用于存储生成的 token generated_tokens = [] # 初始化一个结束标志,用于判断是否停止生成 stop_flag = False # 循环生成 token,直到达到最大长度或者遇到结束符号 while len(generated_tokens) < max_length and not stop_flag: # 使用 GPT-1 模型对融合向量进行解码,得到下一个 token 的概率分布 logits = model(fused_vector)[0] # 使用 softmax 函数将 logits 转换为概率值 probs = torch.nn.functional.softmax(logits, dim=-1) # 使用 multinomial 函数从概率分布中采样一个 token 的 id token_id = torch.multinomial(probs, 1) # 使用分词器将 token 的 id 转换为 token token = tokenizer.convert_ids_to_tokens(token_id) # 将 token 添加到生成的列表中 generated_tokens.append(token) # 如果 token 是结束符号,设置结束标志为真 if token == tokenizer.eos_token: stop_flag = True # 使用分词器将生成的 token 列表转换为文本 generated_text = tokenizer.convert_tokens_to_string(generated_tokens) # 返回生成的文本 return generated_text # 调用上面定义的函数,根据输入的文本和知识,生成对话 text = "你喜欢什么颜色?" knowledge = query_kg(text) fused_vector = fuse_knowledge(text, knowledge) generated_text = generate_dialogue(fused_vector) print(generated_text)
代码可能有以下一些问题:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。