首页 > 其他分享 >BERT-论文阅读笔记

BERT-论文阅读笔记

时间:2022-11-06 12:12:37浏览次数:66  
标签:BERT 训练 模型 论文 笔记 任务 表征 句子

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

介绍

谷歌智能语言实验室的Jacob Devlin,Ming-Wei Chang等人提出一种新的语言表征模型——BERT(Bidirectional Encoder Representations from Transformers),它用来预训练深度双向未打标文本表征,通过在所有层中对左右上下文进行联合条件化。
因此,预训练的BERT模型可以通过一个额外的输出层进行微调,产生一些在大范围任务都表现出色的模型,比如在问答、语言推理等任务,而不需要大量特定架构调整。
BERT在概念方面简单却很实用且强力,它获得了十一个自然语言处理任务的优异成绩。
语言模型的迁移学习取得了改进,表明丰富的无监督预训练是需要语言理解系统的组成部分。尤其是那些资源不充足的任务也从深度双向架构中获得帮助。作者的主要贡献就是将这些发现进一步推广到深度双向结构,使得相同的预训练模型可以成功处理广泛的NLP任务。

预训练的好处

语言模型预训练已经被证实能够有效改进许多自然语言处理任务,包括句子级别的任务:自然语言推理和释义,通过整体分析句子来预测句子之间的关系。字符级别的任务:命名实体识别和问答任务,模型需要生成细粒度的符号级别的输出

两种预处理方法

现存两种为下游任务进行预处理语言表征的方法:基于特征和微调的。基于特征的方法,比如ELMo,使用任务相关的架构,也包括预训练表征作为额外特征。微调方法:比如GPT生成式预训练Transformer,引入最小的任务相关阐述,在下游任务中可以简单微调预训练参数来进行训练。这两种方法使用相同的目标函数,他们使用单向语言模型去学习一般语言表征。

改进fine-tuning方法

作者认为目前的技术限制了预训练表征的作用,尤其是微调方法。主要限制是标准语言模型是单向的,这会限制架构可以在预训练使用的选择。比如,OpenAI GPT使用左到右结构,Transformer中selft-attention层的每个符号只接受了前面字符的信息,这周结构在句子层级的任务是次优的,但当应用到基于微调的字符级别任务时,可能会有损模型表现。字符任务中来自双向的相关上下文信息是至关重要的。

BERT

本文提出基于Transformer的双向编码表征BERT,BERT使用遮掩语言模型(MLM)来减缓前面提到的单向约束。MLM随机遮掩输入中的一些字符,目标是只基于上下文去预测被遮掩的词原本词典id。和左到右语言模型预训练不同,MLM呢能表征融合的左和右上下文信息,允许我们预训练深度双向Transformer。除了MLM,也使用NSP(next sentence prediction),即下一句预测任务。它连结预训练文本对表征。

主要贡献

  • 证明语言表征中双向预训练的重要性。BERT使用遮掩语言模型,能够预训练深度双向表征。和ELMo不同,它使用独立训练的左到右和右到左模型的渐层结合。
  • 展示预训练表征减少许多重工程的任务相关架构的需要。BERT是第一个基于微调的表征模型,并达到出色的表现,在大范围的句子级别和字符级别任务上,超过许多任务相关架构。
  • BERT开源!地址:https://github.com/google-research/bert .这也是他能够迅速在社区引起热潮的原因之一。

名词解释
entailment(蕴涵):
自然语言推断(natural language inference)主要研究假设(hypothesis)是否可以从前提(premise)中推断出来,两者都是文本序列。换言之,自然语言推断决定了一对文本序列之间的逻辑关系。
这类关系通常分为三种类型:
蕴涵(entailment):假设可以从前提中推断出来。
矛盾(contradiction):假设的否定可以从前提中推断出来。
中性(neutral):所有其他情况。
自然语言推断也被称为识别文本蕴涵任务。
GLUE:(通用语言理解评估)是用来评估语言模型的方法。
自然语言处理(NLP)主要自然语言理解(NLU)和自然语言生成(NLG)。为了让NLU任务发挥最大的作用,来自纽约大学、华盛顿大学等机构创建了一个多任务的自然语言理解基准和分析平台,也就是GLUE(General Language Understanding Evaluation)。
GLUE包含九项NLU任务,语言均为英语。GLUE九项任务涉及到自然语言推断、文本蕴含、情感分析、语义相似等多个任务。像BERT、XLNet、RoBERTa、ERINE、T5等知名模型都会在此基准上进行测试。

模型特点

BERT的预训练模型和针对不同任务的微调模型基本都是相同结构的,除了输出层以外都是相同的。而且预训练模型参数也被用来初始化不同的下游任务模型。然后基于初始化的参数,微调模型进行训练和参数的微调。
image.png
模型中的CLS 是一种特殊符号,它会被添加到每个输入样本的前面。而SEP 则用来分割token,比如分割两个句子对或者问答对。
image.png
图中为BERT的输入表征,输入被转换成Token Embedding,Segment Embedding和Position Embedding。其中Segment Embedding是按照被[SEP] 分割的几个部分分布表征,Position Embedding则是按照其在输入中的位置确定。之后,Token Embedding、Segment Embedding和Position Embedding后背加起来组成input embedding。
image.png
作者对比了BERT、OenAI GPT和ELMo这三个预训练模型的架构:BERT使用双向Transformer,OpenAI GPT使用左到右Transformer,ELMo使用独立训练的左到右和右到左LSTM的连结去生成特征。这三个中,只有BERT表征是在所有层的左右上下文进行联合条件化。
除了架构的不同,BERT和Open AI GPT是fine-tuning微调方法,而ELMo是基于特征的方法。

BERT细节

首先,BERT使用两个步骤:预训练和微调。预训练时,模型在不同的预训练任务上使用未打标数据训练;微调时,BERT模型先用预训练参数初始化,然后所有参数使用下游任务的打标数据进行微调。
一个显著特征是BERT在跨不同任务时使用统一的结构。
BERT使用的是多层双向Transformer编码器(在《Attention is all you need》提出),并且和前作模型几乎一致。论文中层数(即Transformer Block)记为L,隐藏层大小记为H,自注意力头数量记为A。
\(\begin{align} \rm &BERT_{BASE}(L=12,H=768,A=12,Total Parameters=110M) \\ &BERT_{LARGE}(L=24,H=1024,A=16,Total Parameters=340M)\\ \end{align}\)
\(\rm BERT_{BASE}\)和GPT是同样的模型大小,为了方便进行比较。区别是BERT使用双向self-attention,GPT使用限制的selft-attention,每个字符只接受他左侧的上下文信息。

输入输出表征

为了更好处理大范围的下游任务,BERT中输入的句子不是语义上的一句,有可能是一句也有可能是一个句子对。
模型使用3000哥字符词典来生成WordPiece embeddings,第一个字符总是\(\rm [CLS]\),它是添加到每个输入序列的特殊分隔。句子对被打包成一个输入序列。模型使用两种不同的方法区分这两个句子,首先是使用分隔符\(\rm [SEP]\)。其次,将学习到的embedding向量添加到每个字符,无论他是句子A还是句子B的。
image.png
输入嵌入向量记为\(\rm E\),最终特殊字符\(\rm [CLS]\)的因此向量记为\(C \in R^H\),最终第\(i^{th}\)个输入字符的隐藏向量记为\(T_i \in R^H\).
如前文图2介绍,每个字符的输入表征是由对应token,segment和pisition嵌入向量的加和构成的。

预训练BERT

BERT使用俩个无监督任务MLM和NSP来进行预训练。
Task #1:MLM
深度双向表征明显是比左到右或者ELMo的左右、右左模型浅层连结更强力的。
深度双向表征能够获得整个文本的上下文信息,通过随机遮掩部分输入字符,然后预测这些被遮盖的字符。在本文中是15%的随机比例,对Word Piece词典向量进行遮盖。通过对这些被遮盖的字符进行预测,MLM模型能够更好地基于上下文进行文本表征。
但是MLM会使得预训练和微调不匹配,被遮盖的字符也不会出现在微调模型中。为了缓解这种不利,并不是总是用\(\rm [MAST]\)来对遮盖字符进行替换。80%的遮盖字符使用这种替换,10%使用随机字符进行替换,10%使用原字符进行替换。
Task #2: NSP
许多重要的下游任务,比如问答和自如语言推理是基于对两个相关句子的关联进行理解,因此模型预训练了一个可以从任何单语言语料中生成的二值化下一句预测任务。对于句子对A和B,B有50%概率属于A(IsNext),也有50%概率不是A的下一句(NotNext)。虽然它很简单,但是我们证明这种预训练对问答和自然语言推理都是很有益的。

微调BERT

BERT使用自注意力机制来统一一个句子和两个句子的文本段编码,因为使用自注意力编码串联文本可以有效包含两个句子之间的双向交叉注意力。
对于每个任务,只需将特定任务的输入和输出插入到BERT,并且端到端地微调所有参数。在输入端,来自预训练的句子A和句子B类似于:

  1. 文章中的句子对
  2. 蕴涵中的假设-前提对
  3. 问答系统的问题和回答句子对
  4. 退化的单句子对\(\rm text-none\),用于文本分类或者序列打标。

在输出端,字符表征被送到输出层,比如序列打标或者问答任务;\(\rm [CLS]\)表征被送到分类任务的输出层,比如蕴涵或者情感分析。
预训练任务很重,但是微调任务相等方便。可以使用TPU或者GPU在一至几小时内复现,基于相同的额外预训练模型。

实验

GLUE(通用语言理解评估)是用来评估语言模型的方法。在GLUE数据集上对比不同模型的表现,\(\rm BERT_{BASE}\)已经优于几乎所有模型,而\(\rm BERT_{LARGE}\)平均表现还要再高2%左右。
image.png

相关论文

  • Generative Pre-trained Transformer (OpenAI GPT) :“Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving language understanding with unsupervised learning. Technical report, OpenAI.”
  • Embeddings from Language Model ELMo:“Matthew Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. 2018a. Deep contextualized word representations. In NAACL.”

标签:BERT,训练,模型,论文,笔记,任务,表征,句子
From: https://www.cnblogs.com/d42z/p/16862350.html

相关文章

  • 详解数据预处理和特征工程-数据预处理-编码与哑变量 & 二值化与分段【菜菜的sklearn课
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili处理分类型特征:编码与哑变量多标签和特征在数据收集完毕的时候,都......
  • Linux学习笔记(6)——文件与文件系统的压缩
    文件与文件系统的压缩文件与文件系统的压缩一、Linux系统常见的压缩命令1.1gzip,zcat/zmore/zless/zgrep1.2bzip2,bzcat/bzmore/bzless/bzgrep1.3xz,xzcat/xzm......
  • 20201208史逸霏第十二章学习笔记
    第十二章读书笔记:块设备I/O和缓冲区管理12.1块设备I/O缓冲区I/O缓冲的基本原理文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的......
  • Java学习笔记day4--数组复习
    packageday4_array;importjava.util.Arrays;importjava.util.Scanner;publicclassArrayExam{publicstaticvoidmain(String[]args){int[]arr......
  • JVM学习笔记——类加载和字节码技术篇
    JVM学习笔记——类加载和字节码技术篇在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的类加载和字节码技术部分我们会分为以下几部分进行介绍:类文件结构......
  • 表单笔记-Antd(Form)
    antd表单使用笔记import{Form}from'antd'exportdefaultconstApp=()=>{constform=Form.useForm();//提交表单constonFinish=(val)=>{//val......
  • 学习笔记
    创建文件的三种方法//方式1@Testpublicvoidcreate1(){StringfilePath="D:\\file1.txt";Filefile=newFile(filePath);try{file.createNewFile();System.......
  • shell-文件查找命令笔记三
    文件查找-find命令格式:find[路径][选项][操作]选项-name根据文件名查找-iname根据文件名查找,忽略大小写-perm根据文件权限查找find/etc-perm777-prun......
  • Typora做笔记
    学习java第一次使用Typora做笔记Hello,World(两边加2个*号就变成粗体了)Hello,World(两边加1个*号就变成粗体了)Hello,World!(两边加3个*号就变成斜体加粗了)Hello,World!(......
  • Linux学习笔记之常用路径的指代
    .当前目录..当前目录的上一层目录*当前目录的下一层目录**当前目录的下一层目录包括所有子目录~母目录-上一次所在的目录或者是~-~+当前目录相当于pwd......