首页 > 其他分享 >bert,Bidirectional Encoder Representation from Transformers

bert,Bidirectional Encoder Representation from Transformers

时间:2023-08-23 17:15:31浏览次数:48  
标签:hairy bert Transformers 训练 BERT 模型 任务 Bidirectional my

BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向TransformerEncoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。

预训练过程就是做图像或者视频领域的一种比较常规的做法。

 

图像领域怎么做预训练呢,上图展示了这个过程,

  1. 我们设计好网络结构以后,对于图像来说一般是CNN的多层叠加网络结构,可以先用某个训练集合比如训练集合A或者训练集合B对这个网络进行预先训练,在A任务上或者B任务上学会网络参数,然后存起来以备后用。

  2. 假设我们面临第三个任务C,网络结构采取相同的网络结构,在比较浅的几层CNN结构网络参数初始化的时候可以加载A任务或者B任务学习好的参数,其它CNN高层参数仍然随机初始化。

  3. 之后我们用C任务的训练数据来训练网络,此时有两种做法:

    一种是浅层加载的参数在训练C任务过程中不动,这种方法被称为“Frozen”;

    另一种是底层网络参数尽管被初始化了,在C任务训练过程中仍然随着训练的进程不断改变,这种一般叫“Fine-Tuning”,顾名思义,就是更好地把参数进行调整使得更适应当前的C任务。

为什么预训练可行

对于层级的CNN结构来说,不同层级的神经元学习到了不同类型的图像特征,由底向上特征形成层级结构,所以预训练好的网络参数,尤其是底层的网络参数抽取出特征具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。

 

GPT是“Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务

 

Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,即双向的Transformer,当然另外一点是语言模型的数据规模要比GPT大。所以这里Bert的预训练过程不必多讲了。模型结构如下:

对比OpenAI GPT(Generative pre-trained transformer),BERT是双向的Transformer block连接;就像单向rnn和双向rnn的区别,直觉上来讲效果会好一些。

BERT预训练模型分为以下三个步骤:Embedding、Masked LM、Next Sentence Prediction

Embedding

Embedding由三种Embedding求和而成

  • Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
  • Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
  • Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的

Masked LM

MLM可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK]

此处将hairy进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么,但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:

80%是采用[mask],my dog is hairy → my dog is [MASK]

10%是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple

10%保持不变,my dog is hairy -> my dog is hairy

注意:这里的10%是15%需要mask中的10%

那么为啥要以一定的概率使用随机词呢?这是因为transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。Transformer全局的可视,又增加了信息的获取,但是不让模型获取全量信息。

Next Sentence Prediction

选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%的数据B是语料库中随机选择的,学习其中的相关性,添加这样的预训练的目的是目前很多NLP的任务比如QA和NLI都需要理解两个句子之间的关系,从而能让预训练的模型更好的适应这样的任务。 个人理解:

  • Bert先是用Mask来提高视野范围的信息获取量,增加duplicate再随机Mask,这样跟RNN类方法依次训练预测没什么区别了除了mask不同位置外;
  • 全局视野极大地降低了学习的难度,然后再用A+B/C来作为样本,这样每条样本都有50%的概率看到一半左右的噪声;
  • 但直接学习Mask A+B/C是没法学习的,因为不知道哪些是噪声,所以又加上next_sentence预测任务,与MLM同时进行训练,这样用next来辅助模型对噪声/非噪声的辨识,用MLM来完成语义的大部分的学习。

BERT的主要贡献:

  • 引入了Masked LM,使用双向LM做模型预训练。
  • 为预训练引入了新目标NSP,它可以学习句子与句子间的关系。
  • 进一步验证了更大的模型效果更好: 12 --> 24 层。
  • 为下游任务引入了很通用的求解框架,不再为任务做模型定制。
  • 刷新了多项NLP任务的记录,引爆了NLP无监督预训练技术。

BERT优点

  • Transformer Encoder因为有Self-attention机制,因此BERT自带双向功能。
  • 因为双向功能以及多层Self-attention机制的影响,使得BERT必须使用Cloze版的语言模型Masked-LM来完成token级别的预训练。
  • 为了获取比词更高级别的句子级别的语义表征,BERT加入了Next Sentence Prediction来和Masked-LM一起做联合训练。
  • 为了适配多任务下的迁移学习,BERT设计了更通用的输入层和输出层。
  • 微调成本小。

BERT缺点

  • task1的随机遮挡策略略显粗犷,推荐阅读《Data Nosing As Smoothing In Neural Network Language Models》。
  • [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现。每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)。
  • BERT对硬件资源的消耗巨大(大模型需要16个tpu,历时四天;更大的模型需要64个tpu,历时四天。

标签:hairy,bert,Transformers,训练,BERT,模型,任务,Bidirectional,my
From: https://www.cnblogs.com/pass-ion/p/17652185.html

相关文章

  • Albert 源码解析:分组复用
    classAlbertGroup(nn.Module):def__init__(self,config):super(AlbertGroup,self).__init__()self.inner_group_num=config.inner_group_numself.inner_group=nn.ModuleList([AlbertLayer(config)for_inrange(config.inner_group......
  • BERT模型的历史
    BERT(BidirectionalEncoderRepresentationsfromTransformers)是自然语言处理领域的一个重要里程碑。以下是BERT的发展历史概述:背景:在BERT之前,研究者们已经开始认识到预训练模型在多种任务中的潜力。例如,UlmFit、ELMo和OpenAI的GPT都是使用大型文本数据进行预训练,然后微调到......
  • Transformers包使用记录
    Transformers是著名的深度学习预训练模型集成库,包含NLP模型最多,CV等其他领域也有,支持预训练模型的快速使用和魔改,并且模型可以快速在不同的深度学习框架间(Pytorch/Tensorflow/Jax)无缝转移。以下记录基于HuggingFace官网教程:https://github.com/huggingface/transformers/blob/......
  • Bert神
    在HuggingFace提供的transformers库中,BERT模型相关的类有很多,以下是一些常用的BERT模型类:BertModel:BERT模型的基本类,用于获取BERT模型的隐藏状态。BertForPreTraining:用于预训练任务,包括MaskedLanguageModeling(MLM)和NextSentencePrediction(NSP)。它除了具备BertModel的......
  • EdgeBERT:极限压缩,比ALBERT再轻13倍!树莓派上跑BERT的日子要来了?
    文|Sheryc_王苏这个世界上有两种极具难度的工程:第一种是把很平常的东西做到最大,例如把语言模型扩大成能够写诗写文写代码的GPT-3;而另一种恰恰相反,是把很平常的东西做到最小。对于NLPer来说,这种“小工程”最迫在眉睫的施展对象非BERT莫属。从18年那个109M参数的BERT,到52M......
  • NLP文本匹配任务Text Matching 有监督训练:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双
    NLP文本匹配任务TextMatching[无监督训练]:SimCSE、ESimCSE、DiffCSE项目实践文本匹配多用于计算两个文本之间的相似度,该示例会基于ESimCSE实现一个无监督的文本匹配模型的训练流程。文本匹配多用于计算两段「自然文本」之间的「相似度」。例如,在搜索引擎中,我们通常需要判断......
  • NLP文本匹配任务Text Matching 有监督训练:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双
    NLP文本匹配任务TextMatching[有监督训练]:PointWise(单塔)、DSSM(双塔)、SentenceBERT(双塔)项目实践0背景介绍以及相关概念本项目对3种常用的文本匹配的方法进行实现:PointWise(单塔)、DSSM(双塔)、SentenceBERT(双塔)。文本匹配(TextMatching)是NLP下的一个分支,通常用于计算两个句子......
  • 一键式文本纠错工具,整合了BERT、ERNIE等多种模型,让您立即享受纠错的便利和效果
    pycorrector一键式文本纠错工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多种模型,让您立即享受纠错的便利和效果pycorrector:中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3开发。实现了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型的......
  • 一键式文本纠错工具,整合了BERT、ERNIE等多种模型,让您立即享受纠错的便利和效果
    pycorrector一键式文本纠错工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多种模型,让您立即享受纠错的便利和效果pycorrector:中文文本纠错工具。支持中文音似、形似、语法错误纠正,python3开发。实现了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多种模型......
  • Windows11安装python模块transformers报错Long Path处理
    Windows11安装python模块transformers报错,报错信息如下ERROR:CouldnotinstallpackagesduetoanOSError:[Errno2]Nosuchfileordirectory:'C:\\Users\\27467\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCac......