当前位置:   article > 正文

BERT论文阅读笔记_bert softmax

bert softmax

文章题目BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

 

    Pre-training指的是在一个数据集上训练好一个模型,然后这个模型主要用在别的任务上面。

    首先摘要指出BERT和ELMo还有GPT不同,他是一个双向的Transformer。GPT是单向的,根据左边的上下文信息去预测未来,而BERT是用了左侧和右侧的上下文信息,是双向的。ELMo是双向的且基于RNN去做的,BERT是基于Transformer去做的。ELMo在用于一些下层任务的时候,需要对架构做一点点调整,而BERT跟GPT一样,只需要改最上层就可以。然后指出BERT在11个NLP任务上的效果都是非常好的,指出了绝对精度以及它比别的好的程度,即好了多少,这个在写论文的时候是值得学习的。

    作者在这里还指出了两种常用的预训练的方法:基于特征的方法和基于微调的方法。它们的本质区别在于模型的使用方式和训练过程。基于特征的方法是指使用预训练模型提取特征,然后将这些特征用于特定的任务。这种方法通常涉及到将预训练模型的权重冻结,即使在特定任务的训练中,也不会更新预训练模型的权重。因此,基于特征的方法只使用与训练模型的特征提取能力,而不会对预训练模型的权重进行微调。相反,基于微调的方法涉及到对预训练模型进行微调,以适应特定的任务。在这种方法中,预训练模型的权重是可训练的,并在特定任务的训练中进行更新。通过微调预训练模型,模型可以学习如何适应特定的任务,而不仅仅使用预训练模型的通用特征。

    BERT是一种基于微调的预训练模型。在BERT的预训练过程中,它通过大规模的无监督语言建模任务来学习通用的语言表示。然后,在特定任务的微调中,BERT模型的权重是可训练的,并在特定任务的训练中进行更新。通过微调BERT模型,模型可以学习如何适应特定的任务,从而获得更好的性能。因此,BERT是一种基于微调的预训练方法。

    一个基于特征的预训练模型示例是ELMo(Embeddings from Language Models),它是一种基于LSTM的语言模型。ELMo的预训练过程是在大规模无监督的语料库上进行的,以学习语言的通用表示。预训练完成后,ELMo将被用作特定任务的特征提取器,其中ELMo的权重被冻结,不再进行训练。在特定任务的训练中,ELMo提取的特征将作为输入传递给特定任务的模型。这种方法只使用ELMo模型的特征提取能力,而不会对ELMo模型的权重进行微调,因此是一种基于特征的预训练方法。

    作者考虑到GPT是单向的,觉得双向考虑句子的上下文信息要更好一些。

    BERT是一种Transformer的双向编码器,旨在通过在左右上下文中共有的自然条件计算来预先训练来自无标号文本的深度双向表示。因此,经过预训练的BERT模型只需要一个额外的输出层就可以进行微调,从而为各种自然语言处理任务生成最新模型。这也就是我们常说的预训练+微调。

    BERT的三个关键点:(1)基于transformer结构;(2)大量语料预训练-在包含整个维基百科的无标号文本的大语料库中(足足25亿字!)和图书语料库(有8亿字!)中进行预训练,优点是大语料能够覆盖更多的信息;(3)双向模型:BERT是一个“深度双向”的模型。双向意味着BERT在训练阶段从所选文本的左右上下文中汲取信息,比如说BERT能同时捕获左右上下文。比如说下面的这个例子,如果只取左上下文或右上下文来预测单词“bank”的性质,那么在两个给定的实例中,至少有一个会出错,想要解决的办法,就是在做出预测之前同时考虑做上下文和右上下文。

BERT的输入输出表征:

    input组成:

    Token embedding 字向量:BERT模型通过查询字向量表将文本中的每个字转换为一维向量,作为模型的输入。

    Segment embedding 文本向量:该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合,作用是用来区分两个句子的。

    Position embedding 位置向量:由于出现在文本不同位置的字/词所携带的语义信息存在差异(比如“我爱你”和“你爱我”),因此BERT模型对不同位置的字/词分别附加一个不同的向量以作区分。

    output组成:输入各字对应的融合全文语义信息后的向量表示。

    特点:

  (1)在30000个词上使用了WordPiece嵌入,把拆分的词片段(word pieces)用##标注;

  (2)最大长度:使用了学习过的位置嵌入,支持序列长度达512的Token;

  (3)特殊分类嵌入([CLS]):位于句首,在最终的隐藏层中,(也就是转换器的输出)对应的是分类任务中序列标识的聚合表征。非分类任务中,这一标记将被忽略;

  (4)区分句子对在序列中的位置的方式:用特殊词块([SEP])将它们分开;给第一句的每一个标记添加一个学习到的句子A的嵌入,给第二句的每个标记添加一个学习到的句子B的嵌入;

  (5)对于单句输入,我们只使用句子A的嵌入。

BERT预训练任务:

    主要包含两个任务:Maksed LM和Next Sentence Prediction。

    做Maksed LM(MLM)任务的目的是通过掩盖输入句子中的一些单词,使模型在学习时能够更好地理解文本中上下文信息,同时可以学习到单词之间的关系和语义信息。做法:随机遮蔽输入词块的某些部分;仅预测那些被遮蔽词块;被遮蔽的标记对应的最终的隐藏向量被当作softmax(在BERT中,softmax函数通常用于预测输入序列中的下一个单词或分类任务中的标签,在BERT中,当模型用于预测下一个单词时,它将输入序列中的每个位置的嵌入向量输入到一个softmax分类器中,该分类器预测下一个单词的词汇表中的单词。具体而言,BERT将输入序列中的每个位置的嵌入向量分别乘以一个权重矩阵,然后将它们相加,并将结果输入到一个softmax分类器中进行预测,这个softmax分类器计算每个词汇表中单词的概率分布,并预测最可能的单词作为下一个单词;在分类任务中,BERT也会使用softmax函数来计算输入序列对应每个类别的概率分布。具体而言,BERT将输入序列的嵌入向量输入到一个全连接层中,然后将输出向量传递给softmax分类器进行分类)的关于该词的一个输出,和其他标准语言模型中相同。

    MLM存在的问题:预训练和微调之间的不匹配→在微调期间从未看到[MASK]词块;收敛速度慢的问题是由于每batch中只预测了15%的词块,导致收敛速度慢。

    如何去解决预训练和微调之间的不匹配?以一定概率用[MASK]词块替换“遮蔽”单词,论文采用15%的概率随机选择词块。举例:我的狗是毛绒绒的;操作:80%的概率:用[MASK]词块替换单词,例如,我的狗是[MASK];10%的概率:用随机词替换遮蔽词,例如,我的狗是苹果;10%的概率:保持单词不变,例如,我的狗是毛茸茸的。这么做是因为模型需要学习每个输入词块的分布式语境表征。

    做Next Sentence Prediction任务是因为很多重要的下游任务,例如问答(QA)和自然语言推理(NLI),都是基于对两个文本句子间关系的理解,而这种关系并非通过语言建模直接获得。做法:预训练一个二值化NSP任务学习句子间的关系;操作:选择句子A和B作为预训练样本:B有50%的可能是A的下一句,也有50%的可能是来自语料库的随机句子。举例:输入=[CLS]男子去[MASK]商店[SEP]他买了一加仑[MASK]牛奶[SEP],Label= IsNext;输入=[CLS]男人[MASK]到商店[SEP]企鹅[MASK]是飞行##少鸟[SEP],Label= NotNext。

    BERT为什么需要进行微调?BERT是一种预训练,它通过大量的无标注文本数据进行预训练,在许多自然语言处理任务上取得了很好的效果。然而为了在特定任务上获得最佳性能,需要对BERT进行微调。具体而言,微调是将预训练的 BERT 模型在特定任务的标注数据上进行有监督的训练,并根据任务的性质和特点对模型进行调整,以达到更好的性能。微调可以通过在预训练模型的顶部添加一个额外的输出层来实现,该输出层针对特定任务进行训练,然后将整个模型进行微调,以便更好地适应任务。主要原因有:

  (1)数据集不同:预训练模型和目标任务之间的数据集不同,因此预训练模型需要在特定任务的数据集上进行微调,以适应目标任务的特征。

  (2)目标任务的目标函数不同:预训练模型的目标函数是预测掩盖的单词,而目标任务的目标函数与预测掩盖的单词不同,因此需要根据任务的不同来微调模型。

  (3)任务的特征不同:不同的自然语言处理任务具有不同的特征,例如语义理解、问答、文本分类等,因此需要根据任务的特征微调模型,以便更好地适应任务。

    通过微调,可以使 BERT 模型更好地适应特定的自然语言处理任务,并提高模型的性能。微调可以在相对较少的数据上训练,而不会导致过拟合。因此,微调是 BERT 成功应用于各种自然语言处理任务的重要步骤。

    损失函数的意义? 损失函数是机器学习中用于衡量模型预测结果与实际值之间差异的一种函数。在训练机器学习模型时,目标是最小化损失函数,从而使模型能够更准确地预测输出结果。一般而言具有以下几个意义:

  (1)衡量模型的性能:损失函数可以用来衡量模型的预测结果与实际值之间的差异,从而判断模型的性能和准确度。

  (2)模型优化:通过最小化损失函数,可以使模型的预测结果更接近实际值,进而提高模型的准确度。

  (3)监督学习中的训练:在监督学习中,损失函数可以作为训练过程中的目标函数,根据损失函数的值来更新模型参数,以便更好地适应训练数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/352802
推荐阅读
相关标签
  

闽ICP备14008679号