写在前面:我刚刚开始NLP,希望通过录制博客并增强对知识的理解来巩固我的知识。
在上一个博客中,我们执行了CRF的原理以及使用CRF工具包来实现各种序列标签任务,例如中文单词,NER,Pinyin Input方法等等。神经网络的自然语言模型的统计自然语言模型。由于最近的阅读组成研究,选择了学习记录的BERT模型的经典杰作。现有BERT中也有许多博客文章。我从个人角度提取了本质,希望能帮助读者。
伯特论文地址:https://arxiv.org/abs/1810.04805
Bert,全名是:来自Transformers的双向编码器表示,这是一个两条变压器编码。我自己的学习经验和围绕这两个方面的观点,仅供参考,我希望它对您有所帮助。
让我们谈谈结论:BERT提供了一个预训练模型,对NLP任务具有强烈的概括和显着影响。
什么是预培训?为什么这么重要?在简历(图像)领域,有许多预培训模型和相应的公共用途预培训权重文档。这些模型通常在大型数据集中进行培训(此类模型(此类)作为Imagenet)。当我们需要时,我们可以在需要时罚款。
预训练和细态之间的关系就像说我现在有一个神经网络,并且有50层。一开始,我给它的数据集是各种品牌汽车的图片,其中包含保时捷,宝马等等。而且我还制作了数据集标签。我希望训练可以根据车辆图片识别汽车品牌的神经。
培训完成后,在验证集也取得了良好的效果之后,我被告知:我不需要一个可以识别品牌的模型,只有一个可以识别型号的模型,例如汽车,SUV,RVS等等,但是此任务是数据集很小。我应该做什么?重新培训?实际上不需要。根据您上面的新数据集进行罚款。那么为什么有效?
答案是神经网络模型的所有特征都是有效的。在剩余的卷积网络引入后,经典的卷积网络正在朝着狭窄而深层的开发方向发展。在浅层隐藏层中,互联网将学习主要的特征。,例如汽车的轮廓和形状。在更深的隐藏层中,互联网将学习更紧密的任务需求的特征,例如汽车的流量和前部的外观。对于我们当前遇到的新任务,实际上,浅网络参数不需要再次研究,因为汽车的轮廓和形状对我们很有用,我们直接冻结了这些参数。但是,高级别的某些特征可能并不那么重要。我们可以罚款-tune高级别的网络参数,例如直接重新训练SoftMax层,或重新训练尚未冷冻的隐藏层。
在这一点上,您应该理解为什么预培训模型很重要:因为实际生活中有许多任务,因此对每个任务进行训练非常高,并且可能没有良好的结果。
那么,为什么NLP在BERT之前有这样的系统?这是因为在NLP字段之前,在BERT出现之前,没有明确的知识告诉人们,神经网络越深,自然语言的处理越有效,并且NLP的任务比CV都要复杂得多。它是像素,但是语言任务是处理,句子和处理文章的。最小单元不相同,不同语言之间存在许多语言差异。但是,在NLP字段中,预培训实际上是重要的,因为如果收集了许多Corpora数据,您可以轻松获得大量的免费数据设置但要标记各种任务,这将是一个巨大或难以想象的工作,无法想象。Quantity。良好的预培训模型可以大大提高NLP模型的着陆应用的转换率。
实际上,在伯特(Bert)之前,许多工作朝这个方向工作。从一般角度来看,有两种主要策略:
基于功能的基于功能与基于微调的微调微调
前杰作是:Elmo
后者的杰作是:Openapi GPT
两者可以单独理解:
基于功能:对于网络调整,对于通过预训练获得的输出,应设计相应的网络以应对不同的任务。
微调:基于基于参数的调整,通过预训练获得的网络参数的微调网络参数。
伯特很明显,应该是后者的培训策略接近简历。
上图是与原始BERT中GPT和Elmo的比较。GPT和Elmo的内容不是本文的重点,因此请根据上图简要解释。
Elmo使用两个反向LSTM网络进行培训,试图涵盖两个网络的上下文信息。但实际上,例如从左到右的网络以及从左到右的网络,它无法有效地将上下文信息整合到每一层上对于Elmo,主要需求是获得更多的语言特征。因此,Elmo的输出实际上是一个单词嵌入,它扩展了每个单词的特征维度。
GPT使用Transformer的解码器,即从左到右的模型。实际上,Bert和GPT的体系结构相似。两者都是变压器,但是Bert使用编码器并介绍了两个-way。在GPT模型中,每个单词只能基于上一个单词是什么,并且不能与以下信息结合预测。
在BERT的预培训模型和策略之前,有一些无法绕过的局限性:上下文信息难以有效整合,并且在句子级别的任务很难适应前训练模型。
伯特(Bert)是主人的主人,即保留微调,介绍上下文信息的想法,并考虑到令牌级别和句子级别的任务。
但是,这两个道路设计变压器编码器实际上为Bert锁定了一个锁。这是什么?让我们继续阅读。
在伯特(Bert)中,双向主义主要由蒙版语言模型,句子语言秩序预测和自我注意事项机制反映。
蒙版语言模型mlm全名,掩盖语言模型。实际上,要坦率地说,它是掩盖输入句子中的令牌(加上[bask]),然后让模型预测蒙版的单词被删除。文本的示例就是这样:
值得注意的是,并不是所有的令牌都会被面具丢弃。实际上,将选择15%的输入输入来掩盖,并且所选令牌仅是蒙版的机会的80%,而10%的输入将被替换为差异单词,而差异为10%,则不是掩盖的。。
这种设计的意义是什么?
我个人认为,通过加入约束规则,迫使模型积极学习上下文。如果没有给出任务,就很难控制模型的融合。蒙版的任务可以帮助模型集中于上下文信息与此信息相结合以推断某个令牌的含义。从这个角度来看,该令牌的特征维度不仅是令牌本身,而且在上下文中与之相关的知识。
句子顺序预测 - 次要句子预测。此任务主要是预测输入句子是否是平滑的关系。该句子将AB的中间和末端分开,以将[SEP]分开,以使模型判断B句子是否是A句子的下一个句子。文本的例子是这样:
这项任务看起来很简单,理解。消融实验后来证明了它的作用并不重要,但是我认为NSP任务的设计是更好地将模型从令牌级别迁移到句子级别。认为MLM和NSP的设计是弥补缺乏序列信息本身的特征。
一点点补充说明:序列信息的学习实际上比变形金刚更彻底,因为变压器会在注意的顺序中使每个令牌都会使您的令牌输入任何安排顺序输入。变压器的原始纸张添加了编码以减轻此缺陷的位置。
自我注意的机制将保留在编码器的部分。
BERT的另一个重要点是基于Transformer作为网络体系结构的编码器。Bert的基本模型使用12个层次编码器堆栈体系结构:
上图中的灰色矩形是编码器的基本体系结构。伯特基本上没有更改变压器的原始设计,该设计直接引用了该模块。我认为,对编码器进行了重新标记,最重要的部分是:多头注意。
什么是关注?顾名思义,这是关注。离距离越远,我越需要关心您。当矢量到距离时,它自然会想到乘数,因为字符串可以反映矢量在角度的距离之间的距离因此,变形金刚的原始作者使用此思想来达到关注:点 - 产物的关注。
上图是注意点的计算图。可以看出,基本思想是读取三个输入Q,K和V。其中,Q和K乘以矩阵。在缩放秤时,如果不涵盖胶片,它将直接softmax获得注意力得分。与V一起获得最终结果。这就是数学:
这很尴尬吗?没关系,我们一步一步。
首先,让我们清楚地说,什么是q,k,v.q是查询,意思是查询;k是关键,这意味着关键;v是值,这意味着值。也可以从编码器的结构中可以看出Q,K和V的输入实际上是同一件事,例如以前的隐藏层的输出。在上面的计算图中,实际上,我们通过Q和K的乘法在此过程中引起每个令牌之间的注意用其他令牌计算,包括其自己的令牌。因此,您可以将其视为“查询”,这意味着我现在已经计算出哪个令牌;k被视为“密钥”密钥,这意味着我现在进行了对令牌i查询的相应键的相应计算。实际上,v和k获得的结果表示,Q和K获得的结果表示关系信息之间的关系信息代币和每个令牌内部的序列。V的乘法实际上是在此关系信息上传递给原始重量形式的原始形式。输入器,让它知道其注意力信息是什么,他们自己的部分中的哪些部分更接近,哪些部分没有太多要做。
因此,除了$ {sqrt {d_ {k}} $ $是什么意思?这是标题“缩放”在计算图表上的实施例。我认为,除了此数字以防止对角线上的价值过高。线(因为对角线线乘以您自己,结果为1),这减少了尺度以减少影响,但是在拨打高级表盘后,
我发现有更多的数学解释,令人惊讶!
在最初理解注意力之后,让我们继续看看什么是“多头”。
什么是“多头”?顾名思义,多头基于注意机制,添加更多“头”。可以将上述计算过程简要理解为几个单独的计算:
上图是一个多注意模式图。在紫色框架内是我们刚刚提到的点 - 点注意模块。修理头的数量为H,然后将Q,K和V分为H部分,每个点都乘以HTA。在输入中,您可以看到每个头的Q,K和V正在按线性映射。这是数学是:
可以看出,公牛所做的实际上是在缝制每个注意力的结果,然后乘以输出矩阵融合信息。在这里值得一提的是:为什么您需要服用矩阵?因为Bert的培训材料相对较丰富,并且可以拥有更多的学习空间。如果您不采用此矩阵,那么在介绍这些矩阵后,实际上没有差异,可以提供更多的更改空间允许模型尽可能地学习各种关注模式。
它在《变形金刚的原始作品》的论文中也提到,该方法对计算的要求没有更大的要求,这与计算没有什么不同。
在理解注意力机制之后,让我们看一下BERT的整体结构。
伯特的三层嵌入在伯特的结构中,输入令牌进行三层嵌入(嵌入):
也许您很奇怪,为什么您经常看到512、768,一对输入?
这是由于Bert Pre -Training的初始设置。在Google Pre -Training的开头,输入是一个或一对句子,最大长度不超过512,并且隐藏的层大小为768。
直观,请查看这里的源代码是HuggingFace的Pytorch版本的Pytorch版本。感觉比TF版本更好,可以理解。有关详细说明,请参阅文章:https://zhuanlan.zhihu.com/p/369012642
基本上,您可以使用代码设计来得出BERT论文给出的图片。
值得注意的是,在计算三个嵌入式并添加它们后,需要执行Layernorm+辍学。Layernorm是Transformer的原始作品使用的归纳技巧。与batchnorm不同,LN方法应在单个样本的维度中进行标准化,而BN是整个批次中的全局背景。LN对于NLP任务更为合理,因为输入的长度不同。如果国阵将具有很大的矢量长度,则必须将其补充为零,这将影响整体背景。
在谈论了BERT预培训的主要要点之后,让我们看看Bert如何进行良好的调整以适应更多的任务。
自然语言推理 - nli自然语言推理任务很简单,也就是说,基于句子对,可以将它们之间的关系视为句子对的分类问题。伯特论文中给出的示意图如下:
实际上,NLI任务本身非常适合BERT的设计,它非常接近NSP任务。[CLS]此类令牌也可以用作分类任务的输出。当细unthing时,您只能使用需要在[CLS]的输出中添加一层或几层线性分类器以训练分类器。
单句分类任务 - 文本分类,情绪分析和NLI不同。这里的情况是,输入不分为两个部分,但任务仍然是一个分类任务。
这个想法与NLI相同,也将其添加到[CLS]线性分类器中。
阅读理解任务MRC阅读理解,机器阅读理解。阅读理解的任务非常广度。这主要是质量检查,也就是说,我输入一个问题并添加文章。您必须在文章中找到答案。Drama图:
那么我们如何使用bert做质量质量?实际上,答案是粗鲁的,也就是说,它们的概率是每个令牌的开始和终结的可能性。将学习每个令牌的两个向量:一位法官是开始令牌,另一个是确定它是否是末端令牌。与SoftMax获得每个代币的可能性,作为开始或结束的可能性,打开和结尾的最大概率是熄灭的,并且中间内容是输出的。
请注意,这是令牌级别。由于您可以看到我们已经处理了文章的最后一层的所有令牌,而且我们不再仅由[CLS]代表。
序列标记问题 - 标记序列的问题是一个典型的令牌级问题,用于确定每个令牌的标签。
实际上,它也被充分理解。像QA一样,处理每个令牌的输出。但是区别在于,质量检查需要两次计算,这是开始和结束的概率。但是,只需在每个令牌上添加一个分类器以fine -tune即可。
值得注意的是:实际上,这种NER方法仍然仅限于序列标签本身,并且只能在一系列句子上获得一组标签。但实际上,我们知道:
“中国中国大学”“中国传播大学”可以被视为该大学的指定实体,但“中国”也是国家一级的命名实体。这个指定的实体问题的重叠(嵌套)无法通过传统解决想法。这本习民技术的论文提供了一个新的想法:对MRC的NER问题进行修改MRC并取得了良好的结果。这也将是我的下一个学习方向,我将遵循本文和我自己的想法。
看到这一点,我希望您对Bert是什么有一定的了解。
如上所述,在CV中进行预训练的原因是神经网络狭窄而深,并且不同级别从浅层到深处的不同级别都学会了不同的特征,这使得良好的衰减效果极好。
那么伯特这样做了吗?
有了这个问题,我看到了这篇文章:伯特对语言结构有什么了解?本文使用许多分析方法从多个角度研究此问题。在这里,我将简要录制。
短 - 句子fa符号
这张照片意味着原始文本可能是他们使用相同的LSTM研究方法来研究捕获短语级别的结构信息。可以看出,Bert的前两层色块之间存在明显的区别,表明伯特可以捕获短语级别的特征信息,但是此信息在高级别(最后两层)中消失级别。
在该模块中,作者在该模块中进行了三个级别的任务分析,研究了BERT在这三个主要方面的表现:
结果如下:
(括号中的内容是端口性能之间的差异之间的差异,该端口性能未直接随机初始化)
可以看出,伯特的各个层确实正在学习从浅层到深的语义信息。
这个任务非常有趣。个人的理解是,在句子中插入了更多名词和动词,以使模型预测动词的数量。实验结果如下:
可以看出,插入中间句子任务的干扰越多,伯特越依赖更深的网络来解决这个问题,而伯特的网络越深,任务就越复杂,就会具有更强的性能。
注意机制学习了什么?作者通过张量产品分解网络(TPDN)研究了注意机制的结构,并在以下图中获得了依赖树:
可以看出,从该机制中得出的依赖树证明了Bert学习了一些语法信息,这基本上与英语语法一致。
个人个人认为,伯特的最大贡献是提供可以广泛使用的预培训模型,该模型极大地促进了NLP字段的着陆和应用。此外,伯特还可以迁移到多种语言中的应用程序,不仅可以迁移到多种语言中,不仅可以限于英语。
一个小鸡蛋埋在极限前,说伯特被锁定了,那是什么?想要预测下一代币的基于当前的令牌和上面的所有内容,这是一条。不合适,因为它不使用变压器的解码器部分。例如,使用一个 - 路解码器的GPT,您可以适应NLG任务。
另一件事是关于面具的。在预训练中,输入为12%(15%·80%)。不适应它,您不知道如何处理它,导致一些瓶颈。此外,文章可能是图标的根部掩盖,但是从理论上讲,应该覆盖整个单词,这是一个改进的方向:BERT-WWM(全词掩蔽)。
简而言之,伯特是一项里程碑,也有必要了解许多自然语言处理模型的基础。因此,我做了更详细的记录,所以我感谢Jun Yi和KNLP Group的其他朋友!