HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    GPT自回归语言模型(自回归模型用什么软件)

    发布时间:2023-03-13 03:58:18     稿源: 创意岭    阅读: 86        问大家

    大家好!今天让创意岭的小编来大家介绍下关于GPT自回归语言模型的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    ChatGPT国内免费在线使用,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    GPT自回归语言模型(自回归模型用什么软件)

    一、预训练模型综述--Albert,xlnet,bert,word2vec

    Albert,xlnet,bert,word2vec

    通过预训练模型实现迁移学习,迁移学习本质上是在一个数据集上训练模型,然后对该模型进行调整,以在不同的数据集上执行不同的自然语言处理功能。

    1. word2vec

    线性模型

    很神奇的地方,从而也说明高维空间映射的词向量可以很好体现真实世界中token之间的关系。如:king-man = queen-woman

    负采样

    由于训练词向量模型的目标不是为了得到一个多么精准的语言模型,而是为了获得它的副产物——词向量。所以要做到的不是在几万几十万个token中艰难计算softmax获得最优的那个词(就是预测的对于给定词的下一词),而只需能做到在几个词中找到对的那个词就行,这几个词包括一个正例(即直接给定的下一词),和随机产生的噪声词(采样抽取的几个负例),就是说训练一个sigmoid二分类器,只要模型能够从中找出正确的词就认为完成任务。

    这种负采样思想也应用到之后的BERT里,只不过从word-level变成sentence-level,这样能获取句子间关联关系。

    缺点是上下文无关(static):

    因而为了让句子有一个整体含义(context),大家会在下游具体的NLP任务中基与词向量的序列做encoding操作。

    下面是一个比较表格,模型不细讲了,预测目标这里的next word下一个词,是所有传统语言模型都做的事——寻找下一个词填什么。

    BERT模型进一步增加词向量模型泛化能力,充分描述字符级、词级、句子级甚至句间关系特征。

    真正的双向encoding:

    Masked LM,类似完形填空,尽管仍旧看到所有位置信息,但需要预测的词已被特殊符号代替,可以放心双向encoding。

    Transformer做encoder实现上下文相关(context):

    使用transformer而不是bi-LSTM做encoder,可以有更深的层数、具有更好并行性。并且线性的Transformer比lstm更易免受mask标记影响,只需要通过self-attention减小mask标记权重即可,而lstm类似黑盒模型,很难确定其内部对于mask标记的处理方式。

    提升至句子级别:

    学习句子/句对关系表示,句子级负采样。首先给定的一个句子,下一句子正例(正确词),随机采样一句负例(随机采样词),句子级上来做二分类(即判断句子是当前句子的下一句还是噪声),类似word2vec的单词级负采样。

    二、BERT细则

    这里主要介绍BERT的三个亮点Masked LM、transformer、sentence-level。

    1. Masked Language Model

    原本叫cloze test,是完形填空的意思。

    随机mask语料中15%的token,然后将masked token 位置输出的最终隐层向量送入softmax,来预测masked token。

    这样输入一个句子,每次只预测句子中大概15%的词,所以BERT训练很慢。。。(但是google设备NB。。)

    而对于盖住词的特殊标记,在下游NLP任务中不存在。因此,为了和后续任务保持一致,作者按一定的比例在需要预测的词位置上输入原词或者输入某个随机的词。如:my dog is hairy

    2. Transformer —— attention is all you need

    Transformer模型是2018年5月提出的,可以替代传统RNN和CNN的一种新的架构,用来实现机器翻译,论文名称是attention is all you need。无论是RNN还是CNN,在处理NLP任务时都有缺陷。CNN是其先天的卷积操作不很适合序列化的文本,RNN是其没有并行化,很容易超出内存限制(比如50tokens长度的句子就会占据很大的内存)。

    下面左图是transformer模型一个结构,分成左边Nx框框的encoder和右边Nx框框的decoder,相较于RNN+attention常见的encoder-decoder之间的attention(上边的一个橙色框),还多出encoder和decoder内部的self-attention(下边的两个橙色框)。每个attention都有multi-head特征。最后,通过position encoding加入没考虑过的位置信息。

    下面从multi-head attention,self-attention, position encoding几个角度介绍。

    multi-head attention:

    将一个词的vector切分成h个维度,求attention相似度时每个h维度计算。由于单词映射在高维空间作为向量形式,每一维空间都可以学到不同的特征,相邻空间所学结果更相似,相较于全体空间放到一起对应更加合理。比如对于vector-size=512的词向量,取h=8,每64个空间做一个attention,学到结果更细化。

    self-attention:

    每个词位的词都可以无视方向和距离,有机会直接和句子中的每个词encoding。比如上面右图这个句子,每个单词和同句其他单词之间都有一条边作为联系,边的颜色越深表明联系越强,而一般意义模糊的词语所连的边都比较深。比如:law,application,missing,opinion。。。

    position encoding:

    因为transformer既没有RNN的recurrence也没有CNN的convolution,但序列顺序信息很重要,比如你欠我100万明天要还和我欠你100万明天要还的含义截然不同。。。

    transformer计算token的位置信息这里使用正弦波↓,类似模拟信号传播周期性变化。这样的循环函数可以一定程度上增加模型的泛化能力。

    但BERT直接训练一个position embedding来保留位置信息,每个位置随机初始化一个向量,加入模型训练,最后就得到一个包含位置信息的embedding(简单粗暴。。),最后这个position embedding和word embedding的结合方式上,BERT选择直接相加。

    3. sentence-level representation

    在很多任务中,仅仅靠encoding是不足以完成任务的(这个只是学到了一堆token级的特征),还需要捕捉一些句子级的模式,来完成SLI、QA、dialogue等需要句子表示、句间交互与匹配的任务。对此,BERT又引入了另一个极其重要却又极其轻量级的任务,来试图把这种模式也学习到。

    句子级负采样

    句子级别的连续性预测任务,即预测输入BERT的两端文本是否为连续的文本。训练的时候,输入模型的第二个片段会以50%的概率从全部文本中随机选取,剩下50%的概率选取第一个片段的后续的文本。 即首先给定的一个句子(相当于word2vec中给定context),它下一个句子即为正例(相当于word2vec中的正确词),随机采样一个句子作为负例(相当于word2vec中随机采样的词),然后在该sentence-level上来做二分类(即判断句子是当前句子的下一句还是噪声)。

    句子级表示

    BERT是一个句子级别的语言模型,不像ELMo模型在与下游具体NLP任务拼接时需要每层加上权重做全局池化,BERT可以直接获得一整个句子的唯一向量表示。它在每个input前面加一个特殊的记号[CLS],然后让Transformer对[CLS]进行深度encoding,由于Transformer是可以无视空间和距离的把全局信息encoding进每个位置的,而[CLS]的最高隐层作为句子/句对的表示直接跟softmax的输出层连接,因此其作为梯度反向传播路径上的“关卡”,可以学到整个input的上层特征。

    segment embedding

    对于句对来说,EA和EB分别代表左句子和右句子;对于句子来说,只有EA。这个EA和EB也是随模型训练出来的。

    如下图所示,最终输入结果会变成下面3个embedding拼接的表示。

    首先,XLNet 是一个类似 BERT 的模型,而不是完全不同的模型。但这是一个非常有前途和潜力的。总之,XLNet是一种通用的自回归预训练方法。

    那么什么是自回归(AR)语言模型?

    AR语言模型是一种使用上下文词来预测下一个词的模型。但是在这里,上下文单词被限制在两个方向,前向或后向。

    AR 语言模型的优势是擅长生成式自然语言处理任务。 因为在生成上下文时,通常是前向的。AR 语言模型很自然地适用于此类 NLP 任务。

    但AR语言模型有一些缺点,它只能使用前向上下文或后向上下文,这意味着它不能同时使用前向和后向上下文。

    自回归语言模型有优点有缺点,缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。它的优点,其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致生成类的NLP任务到目前为止都做不太好。

    与 AR 语言模型不同,BERT 被归类为自动编码器(AE)语言模型。

    AE 语言模型旨在从损坏的输入重建原始数据。

    损坏的输入意味着我们在预训练阶段用 [MASK] 替换原始词 into 。目标是预测 into 得到原始句子。

    AE 语言模型的优势是,它可以从向前和向后的方向看到上下文。

    但 AE 语言模型也有其缺点。它在预训练中使用 [MASK] ,但这种人为的符号在调优时在真实数据中并不存在,会导致预训练-调优的差异。[MASK] 的另一个缺点是它假设预测(掩蔽的)词 在给定未屏蔽的 词 的情况下彼此独立。例如,我们有一句话“它表明住房危机已经变成银行危机”。我们掩蔽“银行业”和“危机”。在这里注意,我们知道掩蔽的“银行业”和“危机”包含彼此的隐含关系。但 AE 模型试图预测“银行业”给予未掩蔽的 词,并预测“危机”分别给出未掩蔽的 词。它忽略了“银行业”与“危机”之间的关系。换句话说,它假设预测(掩蔽)的标记彼此独立。但是我们知道模型应该学习预测(掩蔽)词之间的这种相关性来预测其中一个词。

    作者想要强调的是,XLNet 提出了一种让 AR 语言模型从双向上下文中学习的新方法,以避免 MASK 方法在 AE 语言模型中带来的缺点。

    XLNet的出发点就是:能否融合自回归LM和DAE LM两者的优点。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题,我相信这个不太重要,原因后面会说。当然,我认为这点不重要的事情,纯粹是个人观点,出错难免,看看就完了,不用较真。

    AR 语言模型只能向前或向后使用上下文,那么如何让它从双向上下文中学习呢?

    语言模型包括两个阶段,即预训练阶段和调优阶段。XLNet 专注于预训练阶段。在预训练阶段,它提出了一个名为排列语言建模的新目标。我们可以从这个名称知道基本思想,它使用排列。

    这里我们举一个例子来解释。序列的次序是 [x1, x2, x3, x4] 。这种序列的所有排列如下。

    因此对于这 4 个词的([图片上传失败...(image-c7a4e0-1570519576567)]

    )句子,有 24([图片上传失败...(image-d738b7-1570519576567)]

    )个排列。

    情景是我们想要预测 x3 。因此在 24 个排列中有 4 种模式,分别 x3 位于第 1 位,第 2 位,第 3 位,第 4 位。

    当然,上面讲的仍然是基本思想。难点其实在于具体怎么做才能实现上述思想。首先,需要强调一点,尽管上面讲的是把句子X的单词排列组合后,再随机抽取例子作为输入,但是,实际上你是不能这么做的,因为Fine-tuning阶段你不可能也去排列组合原始输入。所以,就必须让预训练阶段的输入部分,看上去仍然是x1,x2,x3,x4这个输入顺序,但是可以在Transformer部分做些工作,来达成我们希望的目标。具体而言,XLNet采取了Attention掩码的机制,你可以理解为,当前的输入句子是X,要预测的单词Ti是第i个单词,前面1到i-1个单词,在输入部分观察,并没发生变化,该是谁还是谁。但是在Transformer内部,通过Attention掩码,从X的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉,于是就能够达成我们期望的目标(当然这个所谓放到Ti的上文位置,只是一种形象的说法,其实在内部,就是通过Attention Mask,把其它没有被选到的单词Mask掉,不让它们在预测单词Ti的时候发生作用,如此而已。看着就类似于把这些被选中的单词放到了上文Context_before的位置了)。具体实现的时候,XLNet是用“双流自注意力模型”实现的,细节可以参考论文,但是基本思想就如上所述,双流自注意力机制只是实现这个思想的具体方式,理论上,你可以想出其它具体实现方式来实现这个基本思想,也能达成让Ti看到下文单词的目标。

    上面说的Attention掩码,我估计你还是没了解它的意思,我再用例子解释一下。Attention Mask的机制,核心就是说,尽管当前输入看上去仍然是x1->x2->x3->x4,但是我们已经改成随机排列组合的另外一个顺序x3->x2->x4->x1了,如果用这个例子用来从左到右训练LM,意味着当预测x2的时候,它只能看到上文x3;当预测x4的时候,只能看到上文x3和x2,以此类推……这样,比如对于x2来说,就看到了下文x3了。这种在输入侧维持表面的X句子单词顺序,但是其实在Transformer内部,看到的已经是被重新排列组合后的顺序,是通过Attention掩码来实现的。如上图所示,输入看上去仍然是x1,x2,x3,x4,可以通过不同的掩码矩阵,让当前单词Xi只能看到被排列组合后的顺序x3->x2->x4->x1中自己前面的单词。这样就在内部改成了被预测单词同时看到上下文单词,但是输入侧看上去仍然维持原先的单词顺序了。关键要看明白上图右侧那个掩码矩阵,我相信很多人刚开始没看明白,因为我刚开始也没看明白,因为没有标出掩码矩阵的单词坐标,它的坐标是1-2-3-4,就是表面那个X的单词顺序,通过掩码矩阵,就能改成你想要的排列组合,并让当前单词看到它该看到的所谓上文,其实是掺杂了上文和下文的内容。这是attention mask来实现排列组合的背后的意思。

    ALBERT相比于BERT的改进

    ALBERT也是采用和BERT一样的Transformer的encoder结果,激活函数使用的也是GELU,在讲解下面的内容前,我们规定几个参数,词的embedding我们设置为E,encoder的层数我们设置为L,hidden size即encoder的输出值的维度我们设置为H,前馈神经网络的节点数设置为4H,attention的head个数设置为H/64。

    在ALBERT中主要有三个改进方向。

    1、对Embedding因式分解(Factorized embedding parameterization)

    在BERT中,词embedding与encoder输出的embedding维度是一样的都是768。但是ALBERT认为,词级别的embedding是没有上下文依赖的表述,而隐藏层的输出值不仅包括了词本生的意思还包括一些上下文信息,理论上来说隐藏层的表述包含的信息应该更多一些,因此应该让H>>E,所以ALBERT的词向量的维度是小于encoder输出值维度的。

    在NLP任务中,通常词典都会很大,embedding matrix的大小是E×V,如果和BERT一样让H=E,那么embedding matrix的参数量会很大,并且反向传播的过程中,更新的内容也比较稀疏。

    结合上述说的两个点,ALBERT采用了一种因式分解的方法来降低参数量。首先把one-hot向量映射到一个低维度的空间,大小为E,然后再映射到一个高维度的空间,说白了就是先经过一个维度很低的embedding matrix,然后再经过一个高维度matrix把维度变到隐藏层的空间内,从而把参数量从O(V×H) O(V×H)O(V×H)降低到了O(V×E+E×H) O(V×E+E×H)O(V×E+E×H),当E<<H时参数量减少的很明显。

    下图是E选择不同值的一个实验结果,尴尬的是,在不采用参数共享优化方案时E设置为768效果反而好一些,在采用了参数共享优化方案时E取128效果更好一些。

    2、跨层的参数共享(Cross-layer parameter sharing)

    在ALBERT还提出了一种参数共享的方法,Transformer中共享参数有多种方案,只共享全连接层,只共享attention层,ALBERT结合了上述两种方案,全连接层与attention层都进行参数共享,也就是说共享encoder内的所有参数,同样量级下的Transformer采用该方案后实际上效果是有下降的,但是参数量减少了很多,训练速度也提升了很多。

    下图是BERT与ALBERT的一个对比,以base为例,BERT的参数是108M,而ALBERT仅有12M,但是效果的确相比BERT降低了两个点。由于其速度快的原因,我们再以BERT xlarge为参照标准其参数是1280M,假设其训练速度是1,ALBERT的xxlarge版本的训练速度是其1.2倍,并且参数也才223M,评判标准的平均值也达到了最高的88.7

    除了上述说了训练速度快之外,ALBERT每一层的输出的embedding相比于BERT来说震荡幅度更小一些。下图是不同的层的输出值的L2距离与cosine相似度,可见参数共享其实是有稳定网络参数的作用的。

    3、句间连贯(Inter-sentence coherence loss)

    BERT的NSP任务实际上是一个二分类,训练数据的正样本是通过采样同一个文档中的两个连续的句子,而负样本是通过采用两个不同的文档的句子。该任务主要是希望能提高下游任务的效果,例如NLI自然语言推理任务。但是后续的研究发现该任务效果并不好,主要原因是因为其任务过于简单。NSP其实包含了两个子任务,主题预测与关系一致性预测,但是主题预测相比于关系一致性预测简单太多了,并且在MLM任务中其实也有类型的效果。

    这里提一下为啥包含了主题预测,因为正样本是在同一个文档中选取的,负样本是在不同的文档选取的,假如我们有2个文档,一个是娱乐相关的,一个是新中国成立70周年相关的,那么负样本选择的内容就是不同的主题,而正样都在娱乐文档中选择的话预测出来的主题就是娱乐,在新中国成立70周年的文档中选择的话就是后者这个主题了。

    在ALBERT中,为了只保留一致性任务去除主题识别的影响,提出了一个新的任务 sentence-order prediction(SOP),SOP的正样本和NSP的获取方式是一样的,负样本把正样本的顺序反转即可。SOP因为实在同一个文档中选的,其只关注句子的顺序并没有主题方面的影响。并且SOP能解决NSP的任务,但是NSP并不能解决SOP的任务,该任务的添加给最终的结果提升了一个点。

    4、移除dropout

    除了上面提到的三个主要优化点,ALBERT的作者还发现一个很有意思的点,ALBERT在训练了100w步之后,模型依旧没有过拟合,于是乎作者果断移除了dropout,没想到对下游任务的效果竟然有一定的提升。这也是业界第一次发现dropout对大规模的预训练模型会造成负面影响。

    参考链接:

    彻底搞懂BERT

    什么是 XLNet,为何它会超越 BERT?

    XLNet:运行机制及和Bert的异同比较

    一文揭开ALBERT的神秘面纱

    不懂word2vec,还敢说自己是做NLP?

    二、原来是在想这个出自哪里

    Chatgpt源于人工智能领域的研究,在深度学习和自然语言处理的基础上,使用了大规模的语料库进行训练。其核心技术是GPT(Generative Pre-training Transformer),是一种基于Transformer网络的语言模型。Chatgpt可以通过语言生成和理解实现自然的智能对话,其能够模拟人类的思维方式,与用户进行真正意义上的交流,并且不断学习和完善自己的对话技能。Chatgpt的应用领域众多,包括客服机器人、智能语音助手、智能家居、社交娱乐等,未来将会有更多的智能对话应用出现,并且整个行业将会不断推进和升级。

    三、中国有gpt吗

    答:现在中国也有GPT(Generative Pre-trained Transformer)技术,它是一种自然语言处理(NLP)技术,用于构建自然语言生成模型,可以自动生成文本。它的出现极大地推动了自然语言处理的发展,也为中国的NLP研究者提供了一个新的工具。中国的研究者们正在努力开发和改进GPT技术,以更好地应用于中文环境。例如,中国研究者们正在开发一种新的GPT技术,称为“中文GPT”,它可以更好地支持中文文本的生成。此外,中国研究者们还在努力改进GPT技术,以更好地应用于中文环境,如改进中文GPT模型的准确性和性能,以及开发新的GPT模型,用于解决特定的NLP任务。

    四、论文笔记之GPT-GNN: Generative Pre-Training of Graph Neural Networks

    文中指出训练GNN需要大量和任务对应的标注数据,这在很多时候是难以获取的。一种有效的方式是,在无标签数据上通过自监督的方式预训练一个GNN,然后在下游任务上只需要少量的标注数据进行fine-tuning。

    本文提出了GPT-GNN通过生成式预训练的方式来初始化GNN。GPT-GNN引入了一个自监督的属性图生成任务,来pre-training一个GNN,使其能够捕捉图上的结构信息和节点属性信息。

    图生成任务被分成了两部分:①属性生成。②边生成。

    pre-training的GNN要能够捕捉input graph的结构信息和节点属性信息,使其能够在相似领域的下游任务上通过少量label的fine-tuning就能达到很好的泛化效果。本文采用的方式是重构输入的属性图来对图分布建模。

    第一步,如上左图所示,通过自监督学习任务(节点属性生成和边生成)来预训练GNN。第二步,如上右图所示,pre-training好的模型以及参数用于对下游任务的初始化,只需要在少部分标注数据上做fine-tuning。

    输入G=(V,E,X),其中V表示顶点集,E表示边集,X表示顶点属性矩阵。

    目标:pre-training一个GNN模型,使其能够:1)捕捉图中的结构特征和属性特征。2)能够对图的下游任务有帮助。

    也就是对图G=(V,E,X)不使用label学习一个可以泛化的GNN模型fθ。

    GPT-GNN通过重构/生成输入图的结构信息和节点属性信息来pre-training GNN。given 输入图G=(V,E,X)和GNN模型fθ,图和GNN的likelihood定义为p(G,θ),通过最大化likelihood来预训练GNN,也就是

    如何对p(G,θ)建模?

    通过自回归的方法分解目标概率分布。

    首先说明什么是自回归

    如上式所示,c为常数项,є为随机误差,概括来说就是X的当期值等于一个或数个前期值的线性组合加常数项加随机误差。

    对于graph来说,自回归方法概括为:nodes in the graph come in an order, and the edges are generated by connecting each new arriving node to existing nodes.

    对于一个给定的order,通过自回归的方式分解log likelihood,每次生成一个节点。

    在step i,given 所有在前面步骤生成的节点,包括节点属性X<i和节点之间的边E<i来生成新的节点i,包括节点属性Xi和与现有节点的连接边Ei.

    如何对pθ(Xi,Ei|X<i,E<i)建模?

    一种简单的方式是假设Xi和Ei是独立的,也就是

    然而,这种分解方式完全忽略了节点属性和节点之间联系(边)之间的依赖关系。然而这种依赖关系是属性图和基于聚合邻居节点信息的GNN的核心属性。

    因此,文中提出了一种分解方式,当生成一个新的节点属性时,给出结构信息,反之亦然。

    从而整个生成过程可以分为两部分:

    1)given 观测边,生成节点属性。

    2)given 观测边和1)中生成的节点属性,生成剩下的边。

    通过这种方式,模型能够捕捉每个节点属性和结构之间的依赖关系。

    定义变量o来表示Ei中观测边的index vector,即Ei,o表示已经观测到的边。¬o表示masked边(要生成边)的index。

    通过引入o,可以把前面的分布重写为所有可能观测边的期望likelihood.

    这里的理解非常重要,第一个等式中,把Ei拆成了Ei,¬o和Ei,o,也就是说指定了哪些边是观测边,哪些边是masked边。需要注意的是,当o确定下来以后,¬o也是确定的。因此等式外面加上了对o的累加,这里可以理解为类似于全概率公式去对所有可能的o求和。

    此外,这里需要注意Ei,E<i,Ei,o,Ei,¬o四个符号分别表示的是什么。现在位于step i,E<i是指在step i之前已经生成的边,Ei是指在step i将会生成的边(与节点i相连,有好多条),之后再将Ei中的边生成过程拆分成已经生成和将要生成两部分,即Ei,o和Ei,¬o。

    下一个等式中,把第二个p看作概率分布,写作对于o期望的形式。最后把Xi和Ei,¬o看作独立的过程,拆成两个概率分布。

    这种分解的优势在于,没有忽略Xi和Ei,o的联系。第一项表示given观测边,聚合目标节点i的邻居信息来生成其属性Xi.第二项表示given观测边和刚生成的属性Xi,预测Ei,¬o中的边是否存在。

    如上图所示,给出了一个例子。对于一个academic graph,我们要去生成一个paper node,它的属性为title,并且其和author,publish venue,reference相连。上图中的实线部分为已经观测到的边,首先生成节点的属性,即title。然后基于author1,author2,author3和刚生成的节点属性title,预测剩下的边,即虚线部分。

    出于效率的考虑,希望:

    1)对于输入图只跑一次GNN就能计算节点属性生成和边生成过程的loss。

    2)希望节点属性生成和边生成能同时进行。

    然而,边生成需要用到节点属性信息,如果两个生成过程同时进行,会导致信息泄漏。

    为了避免这个问题,将节点分为两种类型:

    •属性生成节点。mask住这些节点的属性,用一个共用的dummy token Xinit来代替,Xinit和Xi的维度是相同的,并且在pre-training的过程中学习到。

    •边生成节点。保持它们原有的属性。

    需要注意的是,同一个节点在不同阶段扮演不同的角色,可能是属性生成节点也可能是边生成节点。只是在某一阶段,一个节点有一个确定的角色。

    在graph上训练GNN来生成各节点的embedding,用hAttr和hEdge来分别表示属性生成节点和边生成节点的embedding。由于属性生成节点的属性被mask住了,因此hAttr中包含的信息通常会少于hEdge。因此,在GNN的message passing过程中,只使用hEdge作为向其他节点发送的信息。也就是说,对于每个节点,其聚合邻居hEdge的信息和自身的信息来生成新的embedding。之后,对于节点的embedding,使用不同的decoder来生成节点属性和边。(注意,节点的embedding和节点属性不是一回事。通俗理解,在GNN中节点的属性是input,节点的embedding是hidden layer。)

    对于属性生成,用DecAttr来表示decoder,输入hAttr来生成节点属性。decoder的选择依赖于节点属性的类型,如果是text类型的节点属性,可以使用LSTM等;如果节点属性是vector,可以使用MLP。定义一个距离函数来度量生成属性和真实属性之间的差异,对于text类型属性,可以使用perplexity,对于vector属性,可以使用L2距离。由此,可以计算属性生成过程中的loss

    最小化生成属性和真实属性之间的差异,等价于对generate attributes做MLE,也就是最大化下式

    从而捕捉了图中的节点属性信息。

    对于边生成过程,假设每条边的生成过程和其他边是独立的,由此对likelihood进行分解

    得到hEdge后,如果节点i和节点j相连,则使用

    进行建模,DecEdge是一个pairwise score function。

    loss定义为

    Si-指的是没有和节点i相连的节点。

    最小化loss等价于对generate edges做MLE,从而捕捉了图中的结构信息。

    上图给出了属性图生成过程的一个具体例子。

    a)对于input graph确定permutation order π。

    b)随机挑选一部分与节点i相连的边作为observed edges Ei,o,剩下的边作为masked edges Ei,¬o,并且删除masked edges。

    c)把节点分为属性生成节点和边生成节点。

    d)计算节点3,4,5的embedding,包括它们的属性生成节点和边生成节点。

    (d)-(e)通过对于每个节点并行进行节点属性预测和masked边预测来训练一个GNN模型。

    完整的算法流程如下所示。

    对于上图的算法流程进行详细的说明。

    输入一个属性图,每次采样一个子图G~作为训练的实例进行训练。首先决定permutation order π。同时,我们希望能够并行化训练,只做一次前向传播,就能得到整个图的embedding,由此可以同时计算所有节点的loss。因此,根据permutation order π来移除边,也就是使每个节点只能从跟低order的节点处获得信息。

    之后,需要决定哪些边被mask。对于每个节点,获得其所有的出边,随机挑选一部分边被mask住,这一过程对应上述line4。

    之后,对节点进行划分,得到整个图中节点的embedding,用于之后loss的计算,对应line5。

    lone 7-9进行loss的计算。

    line 8中,通过整合采样图中未连接的节点和Q中以前计算的节点embedding来选择负样本,这种方式能够减轻对于采样图优化和对于整个图优化的差距。

    在line11-12中,优化模型并更新Q。

    对于异构图,即包含不同类型的点和边的图,唯一的不同在于不同类型的点和边采用不同的decoder。

    对于大规模的图,可以采样子图来进行训练,即上述算法流程中Sampler的作用。为了计算Ledge这一loss,需要遍历输入图的所有节点。然而,我们只能在采样的子图上计算这个loss。为了缓解这一差异,提出了adaptive queue,其中存储了之前采样的子图的节点embedding作为负样本。每次采样一个新的子图时,逐步更新这个队列,增加新的节点embedding,移除旧的节点embedding。通过引入adaptive queue,不同采样子图中的节点也能为全局的结构提供信息。

    以上就是关于GPT自回归语言模型相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    ChatGPt与医学诊断(医学诊断术语)

    中国版ChatGPT来了,预计今年3月开放!A股众多ChatGPT概念股,谁在虚张声势,谁有真实力?

    CHATGPT算是智慧吗-

    越南景观设计

    服装品牌风格怎么写(服装品牌风格怎么写文案)