bert模型介绍

sxron sxron     2023-01-27     330

关键词:

  前不久,谷歌AI团队新发布的BERT模型,在NLP业内引起巨大反响,认为是NLP领域里程碑式的进步。BERT模型在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7%(绝对改进率5.6%)等。BERT模型是以Transformer编码器来表示,本文在详细介绍BERT模型,Transformer编码器的原理可以参考()。

论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

   摘要

  本文介绍了一种新的语言表征模型 BERT,它用Transformer的双向编码器表示。与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示。因此,预训练的BERT表示可以通过一个额外的输出层进行微调,适用于广泛任务的最先进模型的构建,比如问答任务和语言推理,无需针对具体任务做大幅架构修改。

  模型架构

  论文使用了两种模型:

  • BERTBASE: L=12, H=768, A=12, 总参数=110M 

  • BERTLARGE: L=24, H=1024, A=16, 总参数=340M

  其中层数(即 Transformer 块个数)表示为 L,将隐藏尺寸表示为 H、自注意力头数表示为 A。在所有实验中,将前馈/滤波器尺寸设置为 4H,即 H=768 时为 3072,H=1024 时为 4096。

  为了进行比较,论文中选择,BERTBASE 的模型尺寸与OpenAI GPT具有相同的模型大小。然而,重要的是,BERT Transformer 使用双向self-attention,而GPT Transformer 使用受限制的self-attention,其中每个token只能关注到其左侧的上下文。注意需要的是,在文献中,双向 Transformer 在文献中通常称为「Transformer 编码器」,而只关注左侧语境的版本则因能用于文本生成而被称为「Transformer 解码器」。BERT,OpenAI GPT和ELMo之间的比较如下图一所示。

技术分享图片

        图1:预训练模型架构的差异。BERT使用双向Transformer。OpenAI GPT使用从左到右的Transformer。ELMo使用经过独立训练的从左到右

          和从右到左LSTM的串联来生成下游任务的特征。三个模型中,只有BERT表示在所有层中共同依赖于左右上下文。

  输入的表示

   针对不同的任务,模型能够在一个token序列中明确地表示单个文本句子或一对文本句子(比如[问题,答案])。对于每一个token, 其输入表示通过其对应的token embedding, 段表征(segment embedding)和位置表征(position embedding)相加产生。图2是输入表示的直观表示:

技术分享图片图2:BERT输入表示。输入嵌入是token embeddings, segmentation embeddings 和position embeddings 之和。

 

  具体实现细节如下:

    • 论文使用了WordPiece embeddings含有30000个token,并且使用“##”来拆分词片段
    • 使用了positional embeddings, 长达512位,即句子的最大长度
    • 每句话的第一个token总是[CLS]。对应它的最终的hidden state(即Transformer的输出)用来表征整个句子,可以用于下游的分类任务。
    • 模型能够处理句子对。为区别两个句子,用一个特殊token [SEP]隔开它们,另外针对不同的句子,把学习到的Segment embeddings 加到每个token的embedding上(如图)
    • 对于单个句子仅使用一个Segment embedding

  预训练任务

   与Peters et al. (2018) 和 Radford et al. (2018)不同,论文不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,使用两个新的无监督预测任务对BERT进行预训练。

   任务 #1:Masked LM

  从直觉上看,研究团队有理由相信,深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“see itself”。 为了训练深度双向表征,我们采取了一个直接的方法,随机遮蔽输入 token 的某些部分,然后预测被遮住的 token。我们将这一步骤称为「masked LM」(MLM),不过它在文献中通常被称为 Cloze 任务 (Taylor, 1953)。在这种情况下,对应遮蔽 token 的最终隐藏向量会输入到 softmax 函数中,并如标准 LM 中那样预测所有词汇的概率。在所做的所有实验中,我们随机遮住了每个序列中 15% 的 WordPiece token。与去噪自编码器 (Vincent et al., 2008) 相反,我们仅预测遮蔽单词而非重建整个输入。

  虽然这确实能让研究团队获得双向预训练模型,但这种方法有两个缺点。第一个是,如果常常把一些词mask起来,未来的fine tuning过程中模型有可能没见过这些词,这个量积累下来还是很大的。因为作者在他的实现中随机选择了句子中15%的WordPiece tokens作为要mask的词。为了解决这个问题,作者在设计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

  为什么要以一定的概率保持不变呢? 如果100%的概率都用[MASK]来取代被选中的词,那么在fine tuning的时候模型可能会有一些没见过的词。那么为什么要以一定的概率使用随机词呢?这是因为Transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中说了,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。
  使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。

  任务 #2:下一句预测

  很多重要的下游任务(如问答(QA)和自然语言推断(NLI))基于对两个文本句子之间关系的理解,这种关系并非通过语言建模直接获得。为了训练一个理解句子关系的模型,我们预训练了一个二值化下一句预测任务,该任务可以从任意单语语料库中轻松生成。具体来说,选择句子 A 和 B 作为预训练样本:B 有 50% 的可能是 A 的下一句,也有 50% 的可能是来自语料库的随机句子。

  实验结果

  如前文所述,BERT在11项NLP任务中刷新了性能表现记录, BERT模型通过上面介绍的预训练后,在11个NLP任务上的微调结果。

技术分享图片

 

   图 3:我们的任务特定模型是由向 BERT 添加了一个额外的输出层而形成的,因此一小部分参数需要从头开始学习。在众多任务中,(a) 和 (b) 任务是序列级任务,(c) 和 (d) 是 token 级任务,图中 E 表示输入嵌入,T_i 表示 token i 的语境表征,[CLS] 是分类输出的特殊符号,[SEP] 是分割非连续 token 序列的特殊符号。

技术分享图片

  图4:GLUE测试结果,由GLUE评估服务器给出。每个任务下方的数字表示训练样例的数量。“平均”一栏中的数据与GLUE官方评分稍有不同,因为我们排除了有问题的WNLI集。BERT 和OpenAI GPT的结果是单模型、单任务下的数据。

技术分享图片

  图5:SQuAD 结果。BERT 集成是使用不同预训练检查点和微调种子(fine-tuning seed)的 7x 系统。

技术分享图片

  图6:CoNLL-2003 命名实体识别结果。超参数由开发集选择,得出的开发和测试分数是使用这些超参数进行五次随机重启的平均值。

 


bert预训练模型及文本分类(代码片段)

BERT预训练模型及文本分类介绍如果你关注自然语言处理技术的发展,那你一定听说过BERT,它的诞生对自然语言处理领域具有着里程碑式的意义。本次试验将介绍BERT的模型结构,以及将其应用于文本分类实践。知识点语言模型和... 查看详情

基于bert的多模型融合借鉴(代码片段)

...文提出的方法在最终的评测数据上达到F1为0.92664的成绩。模型介绍模型结构本文采用了多种模型,下以BERT-CNN-Pooling模型为例介绍,见下图。该模型采用BERT模型提取出字向量(不Finetune),然后结合腾讯词向量,作为最终的词向... 查看详情

bert详解(附带elmo、gpt介绍)

...Google以无监督的方式利用大量无标注文本「炼成」的语言模型,其架构为Transformer中的Encoder(BERT=EncoderofTransformer)我在Transformer详解中已经详细的解释了所有Transformer的相关概念,这里就不再赘述以往为了解决不同的NLP任务,我... 查看详情

基于tritonserver部署bert模型(代码片段)

背景本文简要介绍如何使用Triton部署BERT模型,主要参考NVIDIA/DeepLearningExamples准备工作下载数据进入到/data/DeepLearningExamples-master/PyTorch/LanguageModeling/BERT/data/squad后,下载数据:bash./squad_download.sh下载模型wget--con 查看详情

nlp方向----面试笔试题集:预训练模型bert

文章大纲TransformerBERT简介1.AR与AE语言模型2.1.1Bert是什么?2.1.2Bert有那几个关键点?2.2Bert输入输出表征篇2.2.1Bert输入输出表征长啥样?2.3Bert预训练2.3.1Bert预训练任务介绍2.3.2Bert预训练任务之MaskedLM篇2.3.2.1Bert为什么需要预训练任务Ma... 查看详情

nlp方向----面试笔试题集:预训练模型bert

文章大纲TransformerBERT简介1.AR与AE语言模型2.1.1Bert是什么?2.1.2Bert有那几个关键点?2.2Bert输入输出表征篇2.2.1Bert输入输出表征长啥样?2.3Bert预训练2.3.1Bert预训练任务介绍2.3.2Bert预训练任务之MaskedLM篇2.3.2.1Bert为什么需要预训练任务Ma... 查看详情

[python人工智能]三十二.bert模型keras-bert基本用法及预训练模型(代码片段)

...基础性文章,希望对您有所帮助!文章目录一.Bert模型引入二.keras-bert基础知识1.安装2.Tokenizer3.Train&Use4.UseWarmup5.DownloadPretrainedCheckpoints6.ExtractFeatures三.Bert模型预训练语料1.下载语料2.加载预训练模型3.特征提取4.字词预测... 查看详情

bert-多标签文本分类实战之六——数据加载与模型代码(代码片段)

·请参考本系列目录:【BERT-多标签文本分类实战】之一——实战项目总览·下载本实战项目资源:>=点击此处=<  前5篇文章中,介绍了实战项目的前置知识,下面正式介绍项目的代码。本项目主要分为... 查看详情

bert-多标签文本分类实战之六——数据加载与模型代码(代码片段)

·请参考本系列目录:【BERT-多标签文本分类实战】之一——实战项目总览·下载本实战项目资源:>=点击此处=<  前5篇文章中,介绍了实战项目的前置知识,下面正式介绍项目的代码。本项目主要分为... 查看详情

bert-多标签文本分类实战之六——数据加载与模型代码(代码片段)

·请参考本系列目录:【BERT-多标签文本分类实战】之一——实战项目总览·下载本实战项目资源:>=点击此处=<  前5篇文章中,介绍了实战项目的前置知识,下面正式介绍项目的代码。本项目主要分为... 查看详情

基于tritonserver部署bert模型(代码片段)

...1a;小窗幽记机器学习文章目录背景准备工作下载数据下载模型构建容器模型部署将checkpoint导出为torchscript启动Tritonserver启动自定义的Tritonclient模型部署后的评估:Squad1.1PS:更多、更及时内容欢迎留意微信公众号:小窗幽记... 查看详情

广告行业中那些趣事系列6:bert线上化albert优化原理及项目实践(附github)

...类任务,其实就是给文本打标签。因为原生态BERT预训练模型动辄几百兆甚至上千兆的大小,模型训练速度非常慢,对于BERT模型线上化非常不友好。本篇研究目前比较火的BERT最新派生产品ALBERT来完成BERT线上化服务。ALBERT使用参... 查看详情

《bert的优秀变体:albert论文图解介绍》2020-05,作者:amitness,译者:ronghuaiyang

...ed-bert/ALBERT总结的BERT的两类问题1.内存限制和通信开销BERT模型非常大,BERT-large有24个隐含层,约3.4亿参数,若想改进需要大量计算资源。2.模型退化更大的模型,更好的性能?Albert作者将BERT-large的隐含层单元从1024增加到2048,在... 查看详情

系统学习nlp(二十九)--bert(代码片段)

...tml1.前言在本文之前我们已经介绍了ELMo和GPT的两个成功的模型,今天给大家介绍google新发布的BERT模型。BERT来头可不小,其性能超越许多使用任务特定架构的系统,刷新了11项NLP任务的当前最优性能记录。2.BERT原理BERT... 查看详情

[python人工智能]三十三.bert模型keras-bert库构建bert模型实现文本分类(代码片段)

...名实体识别提供帮助。这篇文章将通过keras-bert库构建Bert模型,并实现文本分类工作。基础性文章,希望对您有所帮助!这篇文章主要参考“山阴少年”大佬的博客,并结合自己的经验,对其代码进行了详细的... 查看详情

原来你是这样的bert,i了i了!——超详细bert介绍bert下游任务(代码片段)

...tionsfromTransformers)是谷歌在2018年10月推出的深度语言表示模型。一经推出便席卷整个NLP领域,带来了革命性的进步。从此,无数英雄好汉竞相投身于这场追剧(芝麻街)运动。只听得这边G家110亿,那边M家又1750亿,真是好不热闹 查看详情

bert模型结构可视化与模块维度转换剖析

...行业就业。希望和大家一起成长进步。  本文作为BERT模型讲解的第一篇文章,主要介绍了BERT模型结构可视化显示与模块剖析, 查看详情

bert模型结构可视化与模块维度转换剖析

...行业就业。希望和大家一起成长进步。  本文作为BERT模型讲解的第一篇文章,主要介绍了BERT模型结构可视化显示与模块剖析, 查看详情