更全的杂志信息网

bert模型论文发表在哪个会议

发布时间:2024-07-06 05:19:14

bert模型论文发表在哪个会议

论文标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文链接: BERT(Bidirectional Encoder Representations from Transformers)通过预训练来学习无标注数据中的深度双向表示,预训练结束后通过添加一个额外的输出层进行微调,最终在多个NLP任务上实现了SOTA。 预训练语言模型在实践中证明对提高很多自然语言处理任务有效,其中包括句子层级的任务,比如自然语言推断(natural language inference)和复述(paraphrasing),还有token层级的任务,比如命名实体识别(named entity recognition)和问答(question answering)。 在下游任务中应用预训练语言模型表示的方法有两种:feature-based的方法和fine-tuning的方法。举例来说,ELMo这种预训练语言模型使用feature-based的方法,通过将ELMo的预训练的表示作为额外的特征输入到特定于任务的模型中去;GPT使用fine-tuning的方法,通过引入少量的特定于任务的参数,在下游任务中训练时所有的预训练参数。 截止BERT之前的预训练语言模型都是单向的(unidirectional),包括GPT和ELMo,这样的方法对句子层级的任务不是最优的,而且对于token层级的任务比如问答非常有害。BERT使用masked language model(MLM)的方法来预训练,这种方法能够训练一个双向的(directional)语言模型。除了masked language model的预训练的方法,BERT还使用了next sentence prediction的预训练方法。 BERT的使用分为两个阶段:预训练(pre-training)和微调(fine-tuning)。预训练阶段模型通过两种不同的预训练任务来训练无标注数据。微调阶段模型使用预训练参数初始化,然后使用下游任务(downstream task)的标注数据来微调参数。 BERT的一个显著特点是它在不同的任务上有统一的架构,使用时只需要在BERT后面接上下游任务的结构即可使用。 BERT的模型架构是一个多层双向的Transformer的encoder。我们标记模型的层数(每一层是一个Tranformer的block)为 ,模型的hidden size为 ,self-attention head的数量为 。两个比较通用的BERT架构为 和 。 对比GPT,BERT使用了双向self-attention架构,而GPT使用的是受限的self-attention, 即限制每个token只能attend到其左边的token。 BERT的输入表示能够是一个句子或者是一个句子对,这是为了让BERT能够应对各种不同的下游任务。BERT的输入是一个序列,该序列包含一个句子的token或者两个句子结合在一起的token。 具体地,我们会将输入的自然语言句子通过 WordPiece embeddings 来转化为token序列。这个token序列的开头要加上 [CLS] 这个特殊的token,最终输出的 [CLS] 这个token的embedding可以看做句子的embedding,可以使用这个embedding来做分类任务。 由于句子对被pack到了一起,因此我们需要在token序列中区分它们,具体需要两种方式: ①在token序列中两个句子的token之间添加 [SEP] 这样一个特殊的token; ②我们为每个token添加一个用来学习的embedding来区分token属于句子A还是句子B,这个embedding叫做segment embedding。 具体地,BERT的输入由三部分相加组成:token embeddings、segment embeddings和position embeddings。如下图所示: BERT使用两个无监督的任务进行预训练,分别是Masked LM和Next Sentence Prediction(NSP)。如下图所示,我们定义输入的embedding为 ,BERT最终输出的 [CLS] 的embedding为 ,最终输出的第 个token的embedding为 。 我们有理由相信一个深度双向模型比left-to-right模型和left-to-right和right-to-left简单连接的模型的效果更加强大。不幸的是,标准的条件语言模型只能够够left-to-right或者right-to-left地训练,这是因为双向条件会使每个token能够间接地“看到自己”,并且模型能够在多层上下文中简单地预测目标词。 为了能够双向地训练语言模型,BERT的做法是简单地随机mask掉一定比例的输入token(这些token被替换成 [MASK] 这个特殊token),然后预测这些被遮盖掉的token,这种方法就是Masked LM(MLM),相当于完形填空任务(cloze task)。被mask掉的词将会被输入到一个softmax分类器中,分类器输出的维度对应词典的大小。在预训练时通常为每个序列mask掉15%的token。与降噪自编码器(denoising auto-encoders)相比,我们只预测被mask掉的token,并不重建整个输入。 这种方法允许我们预训练一个双向的语言模型,但是有一个缺点就是造成了预训练和微调之间的mismatch,这是因为 [MASK] 这个token不会在微调时出现。为了缓解这一点,我们采取以下做法:在生成训练数据时我们随机选择15%的token进行替换,被选中的token有80%的几率被替换成 [MASK] ,10%的几率被替换成另一个随机的token,10%的几率该token不被改变。然后 将使用交叉熵损失来预测原来的token。 一些重要的NLP任务如Question Answering (QA)或者Natural Language Inference (NLI)需要理解句子之间的关系,而这种关系通常不会被语言模型直接捕捉到。为了使得模型能够理解句子之间的关系,我们训练了一个二值的Next Sentence Prediction任务,其训练数据可以从任何单语语料库中生成。具体的做法是:当选择句子A和句子B作为训练数据时,句子B有50%的几率的确是句子A的下一句(标签是 IsNext ),50%的几率是从语料库中随机选择的句子(标签是 NotNext )。 [CLS] 对应的最后一个隐层输出向量被用来训练NSP任务,这个embedding就相当于sentence embedding。虽然这个预训练任务很简单,但是事实上在微调时其在QA和NLI任务上表现出了很好的效果。在前人的工作中,只有sentence embedding被迁移到下游任务中,而BERT会迁移所有的参数来初始化下游任务模型。 Transformer的self-attention机制允许BERT建模多种下游任务。对于包含句子对的任务,通常的做法是先独立地对句子对中的句子进行编码,然后再应用双向交叉注意(bidirectional cross attention)。而BERT使用self-attention机制统一了这两个过程,这是因为对拼接起来的句子对进行self-attention有效地包含了两个句子之间的双向交叉注意(bidirectional cross attention)。 对于每个任务来说,我们只需要将任务特定的输入输出插入到BERT中然后端到端地微调即可。举例子来说,BERT的预训练输入句子A和句子B在微调时可以类比为: ①paraphrasing任务中的句子对; ②entailment任务中的hypothesis-premise对; ③question answering任务中的question-passage对; ④text classification或者sequence tagging任务中的text-∅对(也就是只输入一个text,不必一定需要两个句子)。 对于BERT的输出,对于一些token-level的任务,BERT的token表示将被输入到一个输出层,比如sequence tagging或者question answering任务;对于entailment或者sentiment analysis这样的任务,可以将 [CLS] 对应的表示输入到一个输出层。 我们使用 [CLS] 这个token的最后一层的隐层向量 作为聚合的表示,可以认为是sentence embedding。在微调时只引入一个新的权重 ,这里的 代表标签的数量,然后计算标准分类损失 。下图展示了BERT在GLUE上的效果: 在这个数据集上,我们将question和passage拼接起来作为一个输入序列(中间是 [SEP] )。在微调时引入一个start向量 和一个end向量 ,计算 和 的点积然后通过 函数作为word 是答案的span起始位置的概率: 。答案的终止位置也做上述类似处理。从 到 的候选区间的得分记作 ,我们挑选 的最大得分区间作为预测的结果。下图展示了BERT在SQuAD v1.1上的效果: SQuAD v2.0有的question在提供的passage中没有答案存在。在微调时我们设置没有答案的问题的span的起始和结束位置都是 [CLS] 这个token,也就是start和end的可能性空间包含进了 [CLS] 的位置。在预测时,我们比较没有答案的span得分 和最优的有答案得分 。当 时,我们预测这是一个有答案的问题,这里的 用来在dev set上选择最优的 。下图展示了BERT在SQuAD v2.0上的效果: 微调时我们为BERT构建4个输入序列,每一个是所给的句子(句子A)和一个可能的延续(句子B)。然后引入一个向量,该向量和每一个输入对应的 [CLS] 的embedding的点积再通过一个 层来得到每个选择的得分。下图展示了BERT在SWAG上的效果:

以下是几个顶级会议的列表(不完整的,但基本覆盖)(1)机器学习顶级会议:NIPS, ICML, UAI, AISTATS; (期刊:JMLR, ML, Trends in ML, IEEE T-NN)计算机视觉和图像识别:ICCV, CVPR, ECCV; (期刊:IEEE T-PAMI, IJCV, IEEE T-IP)人工智能:IJCAI, AAAI; (期刊AI)另外相关的还有SIGRAPH, KDD, ACL, SIGIR, WWW等。特别是,如果做机器学习,必须地,把近4年的NIPS, ICML翻几遍;如果做计算机视觉,要把近4年的ICCV, CVPR, NIPS, ICML翻几遍。(2)另外补充一下:大部分顶级会议的论文都能从网上免费下载到。(3)说些自己的感受。对计算机视觉和计算神经科学领域,从方法和模型的角度看,统计模型(包括probabilistic graphical model和statistical learning theory)是主流也是非常有影响力的方法。有个非常明显的趋势:重要的方法和模型最先在NIPS或ICML出现,然后应用到CV,IR和MM。虽然具体问题和应用也很重要,但多关注和结合这些方法也很有意义。

bert论文发表时间会议

google在2018年10月底公布BERT在11项nlp任务中的卓越表现,NLP任务的两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%)等,此后,BERT(Bidirectional Encoder Representation from Transformers)就成为NLP领域大火、整个ML界略有耳闻的模型。 BERT的出现,彻底改变了预训练产生词向量和下游具体NLP任务的关系,提出龙骨级的训练词向量概念。 词向量,就是用一个向量的形式表示一个词。 (1)one-hot编码:词的符号化。 (2)词的分布式表示:词的语义由其上下文决定。以(CBOW)为例,如果有一个句子“the cat sits one the mat”,在训练的时候,将“the cat sits one the”作为输入,预测出最后一个词是“mat”。分布式表示的较大优点在于它具有非常强大的表征能力,比如n维向量每维k个值,可以表征k的n次方个概念。 其中,词嵌入就是分布式表示的一种:基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文与目标词之间的关系的建模。本质:词向量是训练神经网络时候的隐藏层参数或者说矩阵。 两种训练模式:CBOW (Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model) NLP任务分成两部分,一是预训练产生词向量,二是对词向量操作实现特定功能。而词向量模型是一个工具,可以把抽象存在的文字转换成可以进行数学公式操作的向量,而对这些向量的操作,才是NLP真正要做的任务。从word2vec到ELMo到BERT,做的其实主要是把下游具体NLP任务的活逐渐移到预训练产生词向量上。 (1)word2vec:上下文概率的一种表示,但无法对一词多义进行建模 (2)ELMo:用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。 在预训练好这个语言模型之后,ELMo就是根据下面的公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。 然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。总结一下,不像传统的词向量,每一个词只对应一个词向量,ELMo利用预训练好的双向语言模型,然后根据具体输入从该语言模型中可以得到上下文依赖的当前词表示(对于不同上下文的同一个词的表示是不一样的),再当成特征加入到具体的NLP有监督模型里。 (3)bert word2vec——>ELMo: 结果:上下文无关的static向量变成上下文相关的dynamic向量,比如苹果在不同语境vector不同。 操作:encoder操作转移到预训练产生词向量过程实现。 ELMo——>BERT: 结果:训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题。 操作:使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题。 (1)bert模型证明了双向预训练对于语言表示的重要性。与采用单向语言模型进行预训练的模型不同,BERT使用masked language models 进行预训练的深层双向表示。 (2)经过预训练的模型表示解决了许多为特定任务而设计架构的需要。BERT是第一个基于微调的表示模型,它在一系列句子级和词级别的任务上实现了最先进的性能,优于许多具有特定任务架构的系统。 bert架构由两步实现:预训练和模型微调;在预训练阶段,基于无标注数据通过多轮预训练任务完成。在微调阶段,bert模型由预训练的参数进行初始化,然后由待下游的任务数据进行参数微调。 bert模型是多层双向transformer编码器。将层的数量(Transformer blocks)表示为L,隐藏的大小表示为H,而self-attention heads 为A。在所有的情况下,我们将feed-forward/filter大小设置为4H,即H=768时,为3072, H=1024时,为4096. bert的两种格式: BERTBASE : L=12, H=768, A=12, Total Parameter=110M, BERTLARGE : L=24, H=1024, A=16, Total Parameters=340M 为了使用bert可以应对各式各样的下游任务,bert的输入为token序列,它可以表示一个句子或句子对(比如对话)。使用该方案,输入可以是任意跨度的相邻文本,即一个token序列可以是单个句子,也可以是多个句子。 具体地说,bert使用30000个词的词级别的embeddings。每个序列的起始token是[CLS]。句子对被打包在一个序列中,用两种方式区别句子。方法一,使用特殊token[SEP];方法二,在每个标记中添加一个学习过的嵌入,表示它是属于句子A还是句子B。 两个无监督任务对BERT进行训练。 任务一:Masked LM语言模型。 为了训练双向表示模型,随机按百分比的方式(一般选15%)屏蔽输入序列中的部分词,然后预测那些屏蔽词。在这种情况下,屏蔽词的最终隐向量经softmax运算后输出。有点类似于中文的完形填空。 虽然如些操作可以获得一个双向的预训练模型,但这在预训练和微调之间创建了一个不匹配,因为在微调过程中从来没有见过[MASK]词。为了减轻这一点,我们并不总是用实际的[MASK]词替换被屏蔽的词。相反,生成随机选择15%的词进行预测,例如在句子 my dog is hairy 选择了 hairy。接着执行下面的过程: 数据生成器不会总是用[MASK] 替换所选单词,而是执行以下操作: 80%的时间,将单词替换为[MASK]词。例如 my dog is hairy -> my dog is [MASK] 10%的时间, 用一个随机词替换这个词, 例如 my dog is hairy -> my dog is apple 10%的时间, 保持单词不变,例如 my dog is hairy -> my dog is hairy。 每一轮使用交叉熵损失来预测原始词。 任务二:下一句的预测; 许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都基于理解两个文本句之间的关系,而语言建模并不能直接捕获到这两个文本句之间的关系。为了训练一个理解句子关系的模型,我们预训练了一个二分类的预测下一个句子的任务,该任务可以由任何单语语料库生成。 具体来说,在为每个训练前的例子选择句子A和B时,50%的时间B是A后面的实际下一个句子,50%的时间B是来自语料库的随机句子。例如: Input =[CLS] the man went to [MASK] store [SEP],he bought a gallon [MASK] milk [SEP] Label = IsNext Input = [CLS] the man [MASK] to the store [SEP],penguin [MASK] are flight ##less birds [SEP] Label = NotNext 我们完全随机选择NotNext 句子,最终预测模型在这个任务中达到97%-98%的准确率。 预训练数据:预训练过程很大程度上依赖现有语言模型的数据。从维基百科上抽取文本信息,忽略列表,表格和标题。对于预训练过程来说,使用文档级别的语料库而不是经过乱序后的句子级语料库来提取长的连续序列是很重要的。 对于序列级别分类任务,BERT微调很简单。BERT使用self-attention机制来统一两个过程。因为编码文本序列中,使用self-attention有效地包含了两上句子之间双向交叉的attention。微调过程,就是对于每一个任务,简单地将特定的输入和输出接入bert,然后端到端地调节全部参数即可。在输入端,句子A和句子B类似于(1)语义句子对(2)假设前提(3)问答中的问句(4)文本分类或序列标记中文本。在输出端,token向量被传递给token级别任务的输出层,例如,序列标签,问答对的答案。[CLS]向量被传递给分类的输出层,用于分类或情感分析。 相对于预训练,微调要相对容易。大多数模型超参数与预训练相同,除了批的大小、学习率和训练轮数。 可以通过一个额外的输出层对预训练的BERT表示进行微调,以创建适用于各种任务的最先进模型,比如问答和语言推断,无需对特定与任务的架构进行实质性修改。 第一,如果NLP任务偏向在语言本身中就包含答案,而不特别依赖文本外的其它特征,往往应用Bert能够极大提升应用效果。 第二,Bert特别适合解决句子或者段落的匹配类任务。就是说,Bert特别适合用来解决判断句子关系类问题,这是相对单文本分类任务和序列标注等其它典型NLP任务来说的,很多实验结果表明了这一点。 第三,Bert的适用场景,与NLP任务对深层语义特征的需求程度有关。感觉越是需要深层语义特征的任务,越适合利用Bert来解决 第四,Bert比较适合解决输入长度不太长的NLP任务,而输入比较长的任务,典型的比如文档级别的任务,Bert解决起来可能就不太好。 【引用】: bert论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

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<

下图是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?

bert论文发表在哪

大部分论文都在期刊上发表,CN期刊。

少数的是发表到国外的期刊,或者直接是在杂志的官网上线,比如SCI。对于大多数人来说,发表CN期刊就可以了。

期刊,定期出版的刊物。如周刊、旬刊、半月刊、月刊、季刊、半年刊、年刊等。由依法设立的期刊出版单位出版刊物。期刊出版单位出版期刊,必须经新闻出版总署批准,持有国内统一连续出版物号,领取《期刊出版许可证》。

广义上分类

从广义上来讲,期刊的分类,可以分为非正式期刊和正式期刊两种。非正式期刊是指通过行政部门审核领取“内部报刊准印证”作为行业内部交流的期刊(一般只限行业内交流不公开发行),但也是合法期刊的一种,一般正式期刊都经历过非正式期刊过程。

正式期刊是由国家新闻出版署与国家科委在商定的数额内审批,并编入“国内统一刊号”,办刊申请比较严格,要有一定的办刊实力,正式期刊有独立的办刊方针。

“国内统一刊号”是“国内统一连续出版物号”的简称,即“CN号”,它是新闻出版行政部门分配给连续出版物的代号。“国际刊号”是“国际标准连续出版物号”的简称,即“ISSN号”,我国大部分期刊都配有“ISSN号”。

此外,正像报纸一样,期刊也可以不同的角度分类。有多少个角度就有多少种分类的结果,角度太多则流于繁琐。一般从以下三个角度进行分类:

按学科分类

以《中国图书馆图书分类法.期刊分类表》为代表,将期刊分为五个基本部类:

(1)思想(2)哲学(3)社会科学(4)自然科学(5)综合性刊物。在基本部类中,又分为若干大类,如社会科学分为社会科学总论、政治、军事、经济、文化、科学、教育、体育、语言、文字、文学、艺术、历史、地理。

按内容分类

以《中国大百科全书》新闻出版卷为代表,将期刊分为四大类:

(1)一般期刊,强调知识性与趣味性,读者面广,如我国的《人民画报》、《大众电影》,美国的《时代》、《读者文摘》等;

(2)学术期刊,主要刊载学术论文、研究报告、评论等文章,以专业工作者为主要对象;

(3)行业期刊,主要报道各行各业的产品、市场行情、经营管理进展与动态,如中国的《摩托车信息》、《家具》、日本的《办公室设备与产品》等;

(4)检索期刊,如我国的《全国报刊索引》、《全国新书目》,美国的《化学文摘》等。

按学术地位分类

可分为核心期刊和非核心期刊(通常所说的普刊)两大类。

关于核心期刊

核心期刊,是指在某一学科领域(或若干领域)中最能反映该学科的学术水平,信息量大,利用率高,受到普遍重视的权威性期刊。

找准了期刊社就可以发表了,可以在早发表网上期刊投稿,一共就一个月的时间就发好了。

论文发表的途径有两种:一是自己进行杂志社的选择进行投稿论文,二是可通过一些网站来进行论文的投稿发表。还有一些是通过朋友或者其他人员的介绍来进行论文的投稿。不管是哪种方面的论文投稿都要注意投稿的各项要求与信息,这样你的论文才能被收录发表。六零16四八26四

一些同学,在投递论文时,找不到或者傻傻分不清论文发表的官网。便就此打住了发表论文的心思。今天就来帮大家揭开论文发表网站的正确途径。

发表论文会议在哪个网站

论文网站有哪些我看到:通知:部分论文取消、条件放宽。查阅各省最新政策可搜:全国论文办郑州郑密路20号办(简称、统称,搜索可查各省全部政策,在百度、360、搜狗58-68页,17年前是郑州郑密路18号)、全国职称办郑州郑密路20号办、高级职称全国办郑州郑密路20号办。 搜:高级经济师全国办郑州郑密路20号办、高级会计师全国办郑州郑密路20号办、高级农经师全国办郑州郑密路20号办、高级审计师全国办郑州郑密路20号办、高级统计师全国办郑州郑密路20号办、高级政工师全国办郑州郑密路20号办、高级工程师全国办郑州郑密路20号办、高级教师全国办郑州郑密路20号办、高级人力资源管理师全国办郑州郑密路20号办。在百度、360、搜狗58-68页。 查阅最新政策、论文(选题、题目、范文、辅导)、报考条件、评审条件、考试科目,搜:高级经济师最新政策郑州郑密路20号办、高级经济师论文郑州郑密路20号办、高级经济师论文选题郑州郑密路20号办、高级经济师论文题目郑州郑密路20号办、高级经济师论文范文郑州郑密路20号办、高级经济师论文辅导郑州郑密路20号办、高级经济师报考条件郑州郑密路20号办、高级经济师评审条件郑州郑密路20号办、高级经济师考试科目郑州郑密路20号办。后面把“高级经济师”依次换成“高级会计师、高级农经师、高级审计师、高级统计师、高级政工师、高级工程师、高级教师、高级人力资源管理师等”再搜索。在百度、360、搜狗58-68页。

就国内来说,其实比较有权威的论文发表网站就那几个,知网,万方,还有一些资源比较丰富的网站,区别就在于一个早,一个晚,其实相差不多,现在很多网站也都入驻到知网这样的大网站,给你分享几个详细的,望采纳!

首先,第一个让我们想到的是中国知网。

中国知网,是国家知识基础设施(National Knowledge Infrastructure,NKI),是由世界银行提出的1998。CNKI项目是实现全社会促进知识资源共享和增值利用为目标的信息技术项目,由清华大学发起,Tsinghua Tongfang于1999六月成立。在党的领导和国家教育部、中央宣传部、科学技术部、新闻出版总署、国家版权局总局的大力支持下,国家计划委员会,与清华大学和国家学术、教育、出版的直接领导密切CNKI工程集团合作,在图书馆和信息科学界,经过多年的努力,具有国际领先水平的数字图书馆自主开发技术,建成世界上最大的“CNKI数字图书馆”文本的信息量,并正式启动建设“中国E知识资源数据库和CNKI网格资源共享平台,通过产业化运作,提供知识和信息资源最丰富、最有效的知识资源的全社会共享的数字化学习平台有效传播知识。(通常被称为的中国期刊网,即中国知网)作为论文的数据库,HowNet是目前最权威的期刊文献的收集,并且知网的收录不会有假刊物。

第二个:万方数据库。

万方数据库是由万方数据公司开发的,涵盖期刊、会议纪要、论文、学术成果、学术会议论文的大型网络数据库;也是和中国知网齐名的中国专业的学术数据库。其开发公司——万方数据股份有限公司是国内第一家以信息服务为核心的股份制高新技术企业,是在互联网领域,集信息资源产品、信息增值服务和信息处理方案为一体的综合信息服务商。相对于知网,万方数据库也算比较大的了,但是在数据库里,只能屈居第二,但是很多单位也算把万方数据库收录的期刊,作为一个职称论文评定的标准,论文发表后,论文被万方收录,通过检索已发表的职称论文,进行职称评定。但是万方数据库,偶尔也会有些假的刊物,还会收录个别的电子版期刊,所以作者也需要提高警惕。

本内容由top期刊论文网编辑整理

第三个是维普数据库。

维普资讯是科学技术部西南信息中心下属的一家大型的专业化数据公司,是中文期刊数据库建设事业的奠基人,公司全称重庆维普资讯有限公司。目前已经成为中国最大的综合文献数据库。从1989年初开始,一直致力于对大量报刊资料进行科学严谨的研究、分析、收集、加工等深度开发和应用。自1993成立以来,公司的业务范围已涉及数据库出版、网络通讯和期刊分布知识,电子杂志制作数字数据工程问题、网络广告、文学以及基于电子信息资源个性化服务品种。

阅读延伸:国家级期刊论文发表版面费多少?

国家级期刊论文发表版面费多少?大多数学术期刊为了实现自收自支的运营方式,都会向作者收取一定的版面费,那么发表一篇正规的学术论文需要交纳多少钱呢?国家对期刊费用没有特别的要求,根据当前期刊市场,级别越高的期刊,越冷门的期刊或者是影响力越大的刊物一般版面费会越高,我们可以通过学术期刊的级别来判断期刊的版面费。

国家级期刊论文发表版面费多少?期刊根据级别不同,类别不同,价格会有不同。比如普通的省级,国家级期刊,一般2000多字符的文章价格在800元,-1000元左右,篇幅长一点的价格高些,而同样是省级期刊的医学期刊,价格则可能一千多元甚至更多。而核心期刊则价格更贵,从几千元到上万元,主要是一些期刊,即便花钱也是发表不出去的,对文章的质量要求比较高,而且周期也比较长。

国家级期刊论文发表版面费多少?发表论文最重要的是要确定期刊的正规性,否则就算发上去了也是没用的,单位不承认的,那么什么是真刊什么是假刊呢?

真刊,是指国内公开发行的,拥有独立的CN刊号的,国家新闻出版总署批准的正规出版物的原本。因为期刊是连续出版物,所以期刊的原本是每期的原本。

假刊,假刊就是不是真刊的所以版本。它包含,私自编造刊名,克隆伪造真刊原本,盗用他人刊号,规定外出版的增刊,副刊等一切刊物。

国家级期刊论文发表版面费多少?发表论文之前,作者必须了解自身单位评定职称与发表论文的要求,阅读单位与职称协会发布的相关文件,如:建筑中级职称,要求CN issn刊号的两篇以上的论文发表,字数不得低于3000字!当然也不是所有评职称都明确规定,就拿核心期刊发表为例,这个时候往往并不是你单位的要求,而是你的文章质量有多高,你能出多少钱给杂志社作为版面费,因此,此类发表价格十分昂贵!综述所述,每个要求职称论文发表的作者,必须与单位进行沟通,确定好发表杂志的类型与要求,才能真正地发表对自身有用且价格低的期刊。

网站只是展示,最好通过线下面谈或者签订合同进行

一、发百论文拿奖学金,评三好学生二、发论文保研推研究生三、发论文找工作需求四、学分不够,论文来凑,四级不过,发论文拿学位证!一是发表论文来丰富自己的科研方面成果,二是评选奖知学金的需要,更多同学是为了考研或是保研的需要,希望自己的研究生面试的时候让自己的学术成就道方面更突出一点。我只是列了部分,在校期间,还是少打游戏,少买衣服,少诳版街。多看书,多写论文,多搞发表,多年以后,你会感谢现在努力的自己。多年发表经验的我,希望可以帮助到你。再有其他发表方面的问题,或者论文方面的问题,可以追问哟。或者看头像来找我,我会给你一个完美的解释!!!

bert是哪篇论文在哪发表的

google在2018年10月底公布BERT在11项nlp任务中的卓越表现,NLP任务的两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%)等,此后,BERT(Bidirectional Encoder Representation from Transformers)就成为NLP领域大火、整个ML界略有耳闻的模型。 BERT的出现,彻底改变了预训练产生词向量和下游具体NLP任务的关系,提出龙骨级的训练词向量概念。 词向量,就是用一个向量的形式表示一个词。 (1)one-hot编码:词的符号化。 (2)词的分布式表示:词的语义由其上下文决定。以(CBOW)为例,如果有一个句子“the cat sits one the mat”,在训练的时候,将“the cat sits one the”作为输入,预测出最后一个词是“mat”。分布式表示的较大优点在于它具有非常强大的表征能力,比如n维向量每维k个值,可以表征k的n次方个概念。 其中,词嵌入就是分布式表示的一种:基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文与目标词之间的关系的建模。本质:词向量是训练神经网络时候的隐藏层参数或者说矩阵。 两种训练模式:CBOW (Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model) NLP任务分成两部分,一是预训练产生词向量,二是对词向量操作实现特定功能。而词向量模型是一个工具,可以把抽象存在的文字转换成可以进行数学公式操作的向量,而对这些向量的操作,才是NLP真正要做的任务。从word2vec到ELMo到BERT,做的其实主要是把下游具体NLP任务的活逐渐移到预训练产生词向量上。 (1)word2vec:上下文概率的一种表示,但无法对一词多义进行建模 (2)ELMo:用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。 在预训练好这个语言模型之后,ELMo就是根据下面的公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。 然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。总结一下,不像传统的词向量,每一个词只对应一个词向量,ELMo利用预训练好的双向语言模型,然后根据具体输入从该语言模型中可以得到上下文依赖的当前词表示(对于不同上下文的同一个词的表示是不一样的),再当成特征加入到具体的NLP有监督模型里。 (3)bert word2vec——>ELMo: 结果:上下文无关的static向量变成上下文相关的dynamic向量,比如苹果在不同语境vector不同。 操作:encoder操作转移到预训练产生词向量过程实现。 ELMo——>BERT: 结果:训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题。 操作:使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题。 (1)bert模型证明了双向预训练对于语言表示的重要性。与采用单向语言模型进行预训练的模型不同,BERT使用masked language models 进行预训练的深层双向表示。 (2)经过预训练的模型表示解决了许多为特定任务而设计架构的需要。BERT是第一个基于微调的表示模型,它在一系列句子级和词级别的任务上实现了最先进的性能,优于许多具有特定任务架构的系统。 bert架构由两步实现:预训练和模型微调;在预训练阶段,基于无标注数据通过多轮预训练任务完成。在微调阶段,bert模型由预训练的参数进行初始化,然后由待下游的任务数据进行参数微调。 bert模型是多层双向transformer编码器。将层的数量(Transformer blocks)表示为L,隐藏的大小表示为H,而self-attention heads 为A。在所有的情况下,我们将feed-forward/filter大小设置为4H,即H=768时,为3072, H=1024时,为4096. bert的两种格式: BERTBASE : L=12, H=768, A=12, Total Parameter=110M, BERTLARGE : L=24, H=1024, A=16, Total Parameters=340M 为了使用bert可以应对各式各样的下游任务,bert的输入为token序列,它可以表示一个句子或句子对(比如对话)。使用该方案,输入可以是任意跨度的相邻文本,即一个token序列可以是单个句子,也可以是多个句子。 具体地说,bert使用30000个词的词级别的embeddings。每个序列的起始token是[CLS]。句子对被打包在一个序列中,用两种方式区别句子。方法一,使用特殊token[SEP];方法二,在每个标记中添加一个学习过的嵌入,表示它是属于句子A还是句子B。 两个无监督任务对BERT进行训练。 任务一:Masked LM语言模型。 为了训练双向表示模型,随机按百分比的方式(一般选15%)屏蔽输入序列中的部分词,然后预测那些屏蔽词。在这种情况下,屏蔽词的最终隐向量经softmax运算后输出。有点类似于中文的完形填空。 虽然如些操作可以获得一个双向的预训练模型,但这在预训练和微调之间创建了一个不匹配,因为在微调过程中从来没有见过[MASK]词。为了减轻这一点,我们并不总是用实际的[MASK]词替换被屏蔽的词。相反,生成随机选择15%的词进行预测,例如在句子 my dog is hairy 选择了 hairy。接着执行下面的过程: 数据生成器不会总是用[MASK] 替换所选单词,而是执行以下操作: 80%的时间,将单词替换为[MASK]词。例如 my dog is hairy -> my dog is [MASK] 10%的时间, 用一个随机词替换这个词, 例如 my dog is hairy -> my dog is apple 10%的时间, 保持单词不变,例如 my dog is hairy -> my dog is hairy。 每一轮使用交叉熵损失来预测原始词。 任务二:下一句的预测; 许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都基于理解两个文本句之间的关系,而语言建模并不能直接捕获到这两个文本句之间的关系。为了训练一个理解句子关系的模型,我们预训练了一个二分类的预测下一个句子的任务,该任务可以由任何单语语料库生成。 具体来说,在为每个训练前的例子选择句子A和B时,50%的时间B是A后面的实际下一个句子,50%的时间B是来自语料库的随机句子。例如: Input =[CLS] the man went to [MASK] store [SEP],he bought a gallon [MASK] milk [SEP] Label = IsNext Input = [CLS] the man [MASK] to the store [SEP],penguin [MASK] are flight ##less birds [SEP] Label = NotNext 我们完全随机选择NotNext 句子,最终预测模型在这个任务中达到97%-98%的准确率。 预训练数据:预训练过程很大程度上依赖现有语言模型的数据。从维基百科上抽取文本信息,忽略列表,表格和标题。对于预训练过程来说,使用文档级别的语料库而不是经过乱序后的句子级语料库来提取长的连续序列是很重要的。 对于序列级别分类任务,BERT微调很简单。BERT使用self-attention机制来统一两个过程。因为编码文本序列中,使用self-attention有效地包含了两上句子之间双向交叉的attention。微调过程,就是对于每一个任务,简单地将特定的输入和输出接入bert,然后端到端地调节全部参数即可。在输入端,句子A和句子B类似于(1)语义句子对(2)假设前提(3)问答中的问句(4)文本分类或序列标记中文本。在输出端,token向量被传递给token级别任务的输出层,例如,序列标签,问答对的答案。[CLS]向量被传递给分类的输出层,用于分类或情感分析。 相对于预训练,微调要相对容易。大多数模型超参数与预训练相同,除了批的大小、学习率和训练轮数。 可以通过一个额外的输出层对预训练的BERT表示进行微调,以创建适用于各种任务的最先进模型,比如问答和语言推断,无需对特定与任务的架构进行实质性修改。 第一,如果NLP任务偏向在语言本身中就包含答案,而不特别依赖文本外的其它特征,往往应用Bert能够极大提升应用效果。 第二,Bert特别适合解决句子或者段落的匹配类任务。就是说,Bert特别适合用来解决判断句子关系类问题,这是相对单文本分类任务和序列标注等其它典型NLP任务来说的,很多实验结果表明了这一点。 第三,Bert的适用场景,与NLP任务对深层语义特征的需求程度有关。感觉越是需要深层语义特征的任务,越适合利用Bert来解决 第四,Bert比较适合解决输入长度不太长的NLP任务,而输入比较长的任务,典型的比如文档级别的任务,Bert解决起来可能就不太好。 【引用】: bert论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

首先我会详细阐述 BERT 原理,然后简单介绍一下 ELMO 以及 GPT

BERT 全称为 B idirectional E ncoder R epresentation from T ransformer,是 Google 以 无监督的方式利用大量无标注文本 「炼成」的语言模型,其架构为 Transformer 中的 Encoder(BERT=Encoder of Transformer)

我在 Transformer 详解 中已经详细的解释了所有 Transformer 的相关概念,这里就不再赘述

以往为了解决不同的 NLP 任务,我们会为该任务设计一个最合适的神经网络架构并做训练,以下是一些简单的例子

不同的 NLP 任务通常需要不同的模型,而设计这些模型并测试其 performance 是非常耗成本的(人力,时间,计算资源)。如果有一个能 直接处理各式 NLP 任务的通用架构 该有多好?

随着时代演进,不少人很自然地有了这样子的想法,而 BERT 就是其中一个将此概念付诸实践的例子

Google 在预训练 BERT 时让它同时进行两个任务: 1. 漏字填空 2. 下个句子预测

对正常人来说,要完成这两个任务非常简单。只要稍微看一下前后文就知道完形填空任务中 [MASK] 里应该填 退了 ;而 醒醒吧 后面接 你没有妹妹 也十分合理(?)

接下来我会分别详细介绍论文中这两个任务的设计细节

在 BERT 中,Masked LM(Masked Language Model)构建了语言模型,简单来说,就是 随机遮盖或替换 一句话里面的任意字或词,然后让模型通过上下文预测那一个被遮盖或替换的部分,之后 做 Loss 的时候也只计算被遮盖部分的 Loss ,这其实是一个很容易理解的任务,实际操作如下:

这样做的好处是,BERT 并不知道 [MASK] 替换的是哪一个词,而且 任何一个词都有可能是被替换掉的,比如它看到的 apple 可能是被替换的词 。这样强迫模型在编码当前时刻词的时候 不能太依赖当前的词 ,而要考虑它的上下文,甚至根据上下文进行 "纠错"。比如上面的例子中,模型在编码 apple 时,根据上下文 my dog is,应该 把 apple 编码成 hairy 的语义而不是 apple 的语义

我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的 token: [CLS]上一句话[SEP]下一句话[SEP] 。也就是在句子开头加一个 [CLS] ,在两句话之间和句末加 [SEP] ,具体地如下图所示

可以看到,上图中的两句话明显是连续的。如果现在有这么一句话 [CLS] 我的狗很可爱 [SEP] 企鹅不擅长飞行 [SEP] ,可见这两句话就 不是连续的 。在实际训练中,我们会让这两种情况出现的数量为** 1:1**

Token Embedding 就是正常的词向量,即 PyTorch 中的 nn.Embedding() Segment Embedding 的作用是用 embedding 的信息让模型 分开上下句 ,我们给上句的 token 全 0,下句的 token 全 1,让模型得以判断上下句的起止位置,例如

Position Embedding 和 Transformer 中的不一样,不是三角函数,而是 学习出来的

BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加,例如

BERT 的 Fine-Tuning 共分为 4 种类型,以下内容、图片均来自台大李宏毅老师 Machine Learning 课程 (以下内容 图在上,解释在下)

为什么要用CLS? 这里李宏毅老师有一点没讲到,就是为什么要用第一个位置,即 [CLS] 位置的 output。这里我看了网上的一些博客,结合自己的理解解释一下。因为 BERT 内部是 Transformer,而 Transformer 内部又是 Self-Attention, 所以 [CLS] 的 output 里面肯定含有整句话的完整信息 ,这是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其实是占大头的,现在假设使用 的 output 做分类,那么这个 output 中实际上会更加看重 ,而 又是一个有实际意义的字或词,这样难免会影响到最终的结果。但是 [CLS] 是没有任何实际意义的,只是一个占位符而已,所以就算 [CLS] 的 output 中自己的值占大头也无所谓。当然你 也可以将所有词的 output 进行 concat,作为最终的 output

首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和黄色的向量。首先将橙色和所有的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中 对应的输出概率最大,那我们就认为 s=2

同样地,我们用蓝色的向量和所有黄色向量进行 dot product,最终预测得 的概率最大,因此 e=3。最终,答案就是 s=2,e=3

你可能会觉得这里面有个问题,假设最终的输出 s>e 怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案

以上就是 BERT 的详细介绍,参考以下文章

ELMo是Embedding from language Model的缩写,它通过无监督的方式对语言模型进行预训练来学习单词表示

这篇论文的想法其实非常简单,但是效果却很好。它的思路是用 深度的双向 Language Model 在大量未标注数据上训练语言模型 ,如下图所示

在实际任务中,对于输入的句子,我们使用上面的语言模型来处理它,得到输出向量,因此这可以看作是一种 特征提取 。但是 ELMo 与普通的 Word2Vec 或 GloVe 不同,ELMo 得到的 Embedding 是 有上下文信息 的

具体来说,给定一个长度为 N 的句子,假设为 ,语言模型会计算给定 的条件下出现 的概率:

传统的 N-gram 模型 不能考虑很长的历史 ,因此现在的主流是使用 多层双向 LSTM 。在时刻 ,LSTM 的第 层会输出一个隐状态 ,其中 , 是 LSTM 的层数。最上层是 ,对它进行 softmax 之后得到输出词的概率

类似的,我们可以用 一个反向 来计算概率:

通过这个 LSTM,我们可以得到 。我们的损失函数是这两个 LSTM 的 加和 :

这两个 LSTM 有各自的参数 和 ,而 Word Embedding 参数 和 Softmax 参数 是共享的

为了用于下游(DownStream)的特定任务,我们会把不同层的隐状态组合起来,具体组合的参数是根据不同的特定任务学习出来的,公式如下:

GPT 得到的语言模型参数不是固定的,它会根据特定的任务进行调整(通常是微调),这样的到的句子表示能更好的适配特定任务。它的思想也很简单,使用 单向 Transformer 学习一个语言模型 ,对句子进行无监督的 Embedding,然后 根据具体任务对 Transformer 的参数进行微调 。GPT 与 ELMo 有两个主要的区别:

这里解释一下上面提到的 单向 Transformer 。在 Transformer 的文章中,提到了 Encoder 与 Decoder 使用的 Transformer Block 是不同的。在 Decoder Block 中,使用了 Masked Self-Attention ,即句子中的每个词都只能对 包括自己在内的前面所有词进行 Attention ,这就是单向 Transformer。GPT 使用的 Transformer 结构就是将 Encoder 中的 Self-Attention 替换成了 Masked Self-Attention ,具体结构如下图所示

训练的过程也非常简单,就是将 n 个词的词嵌入 ( ) 加上位置嵌入 ( ),然后输入到 Transformer 中,n 个输出分别预测该位置的下一个词 这里的位置编码没有使用传统 Transformer 固定编码的方式,而是动态学习的

Pretraining 之后,我们还需要针对特定任务进行 Fine-Tuning。假设监督数据集合 的输入 是一个词序列 ,输出是一个分类的标签 ,比如情感分类任务

我们把 输入 Transformer 模型,得到最上层最后一个时刻的输出 ,将其通过我们新增的一个 Softmax 层(参数为 )进行分类,最后用 CrossEntropyLoss 计算损失,从而根据标准数据调整 Transformer 的参数以及 Softmax 的参数 。这等价于最大似然估计:

正常来说,我们应该调整参数使得 最大,但是 为了提高训练速度和模型的泛化能力 ,我们使用 Multi-Task Learning,同时让它最大似然 和

这里使用的 还是之前语言模型的损失(似然),但是使用的数据不是前面无监督的数据 ,而是使用当前任务的数据 ,而且只使用其中的 ,而不需要标签

针对不同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用 GPT,我们需要一些特殊的技巧把两个输入序列变成一个输入序列

ELMo 和 GPT 最大的问题就是 传统的语言模型是单向的 —— 我们根据之前的历史来预测当前词。但是我们不能利用后面的信息。比如句子 The animal didn’t cross the street because it was too tired 。我们在编码 it 的语义的时候需要同时利用前后的信息,因为在这个句子中, it 可能指代 animal 也可能指代 street 。根据 tired ,我们推断它指代的是 animal 。但是如果把 tired 改成 wide ,那么 it 就是指代 street 了。传统的语言模型,都 只能利用单方向的信息 。比如前向的 RNN,在编码 it 的时候它看到了 animal 和 street ,但是它还没有看到 tired ,因此它不能确定 it 到底指代什么。如果是后向的 RNN,在编码的时候它看到了 tired ,但是它还根本没看到 animal ,因此它也不能知道指代的是 animal 。 Transformer 的 Self-Attention 理论上是可以同时关注到这两个词的,但是根据前面的介绍,为了使用 Transformer 学习语言模型,必须 用 Mask 来让它看不到未来的信息 ,所以它也不能解决这个问题的

根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。(GPT,ELMO)GPT 就是典型的自回归语言模型。ELMO尽管看上去利用了上文,也利用了下文,但是本质上仍然是自回归LM,这个跟模型具体怎么实现有关系。ELMO是做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型这个事情的。所以其实是两个自回归语言模型的拼接,本质上仍然是自回归语言模型。

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

自回归语言模型只能根据上文预测下一个单词,或者反过来,只能根据下文预测前面一个单词。相比而言,Bert通过 在输入X中随机Mask掉一部分单词 ,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,如果你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM。

这种DAE LM的优缺点正好和自回归LM反过来,它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,这是好处。缺点是啥呢? 主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题 ,因为Fine-tuning阶段是看不到[Mask]标记的。DAE吗,就要引入噪音,[Mask] 标记就是引入噪音的手段,这个正常。

XLNet的出发点就是:能否 融合自回归LM和DAE LM两者的优点 。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。

相关百科

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号-2