图示详解BERT模型的输入与输出

一、BERT整体结构

BERT主要用了Transformer的Encoder,而没有用其Decoder,我想是因为BERT是一个预训练模型,只要学到其中语义关系即可,不需要去解码完成具体的任务。整体架构如下图:

多个Transformer Encoder一层一层地堆叠起来,就组装成了BERT了,在论文中,作者分别用12层和24层Transformer Encoder组装了两套BERT模型,两套模型的参数总数分别为110M和340M。

二、再次理解Transformer中的Attention机制。

Attention机制的中文名叫“注意力机制”,顾名思义,它的主要作用是让神经网络把“注意力”放在一部分输入上,即:区分输入的不同部分对输出的影响。这里,我们从增强字/词的语义表示这一角度来理解一下Attention机制。

我们知道,一个字/词在一篇文本中表达的意思通常与它的上下文有关。比如:光看“鹄”字,我们可能会觉得很陌生(甚至连读音是什么都不记得吧),而看到它的上下文“鸿鹄之志”后,就对它立马熟悉了起来。因此,字/词的上下文信息有助于增强其语义表示。同时,上下文中的不同字/词对增强语义表示所起的作用往往不同。比如在上面这个例子中,“鸿”字对理解“鹄”字的作用最大,而“之”字的作用则相对较小。为了有区分地利用上下文字信息增强目标字的语义表示,就可以用到Attention机制。

Attention机制主要涉及到三个概念:Query、Key和Value。在上面增强字的语义表示这个应用场景中,目标字及其上下文的字都有各自的原始Value,Attention机制将目标字作为Query、其上下文的各个字作为Key,并将Query与各个Key的相似性作为权重,把上下文各个字的Value融入目标字的原始Value中。如下图所示,Attention机制将目标字和上下文各个字的语义向量表示作为输入,首先通过线性变换获得目标字的Query向量表示、上下文各个字的Key向量表示以及目标字与上下文各个字的原始Value表示,然后计算Query向量与各个Key向量的相似度作为权重(最终形成每个目标字与其上下文的字的权重关系,权重和为1),加权融合目标字的Value向量和各个上下文字的Value向量(其实就是做了点乘),作为Attention的输出,即:目标字的增强语义向量表示。

图示展示了第二个字,即目标字的整个Attention计算流程

三、BERT的预训练结构

BERT实际上是一个语言模型。语言模型通常采用大规模、与特定NLP任务无关的文本语料进行训练,其目标是学习语言本身应该是什么样的。BERT模型其预训练过程就是逐渐调整模型参数,使得模型输出的文本语义表示能够刻画语言的本质,便于后续针对具体NLP任务作微调。

1、Masked LM

Masked LM的任务描述为:给定一句话,随机抹去这句话中的一个或几个词,要求根据剩余词汇预测被抹去的几个词分别是什么,如下图所示

具体来说,文章作者在一句话中随机选择15%的词汇用于预测。对于在原句中被抹去的词汇,80%情况下采用一个特殊符号[MASK]替换,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。这么做的主要原因是:在后续微调任务中语句中并不会出现[MASK]标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇(10%概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。

2、NextSentence Prediction

任务描述为:给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后,如下图所示:

四、BERT的整体输入/输出

BERT模型预训练文本语义表示的过程就好比我们在高中阶段学习语数英、物化生等各门基础学科,夯实基础知识;而模型在特定NLP任务中的参数微调就相当于我们在大学期间基于已有基础知识、针对所选专业作进一步强化,从而获得能够应用于实际场景的专业技能。

从上图中可以看出,BERT模型通过查询字向量表将文本中的每个字转换为一维向量,作为模型输入;模型输出则是输入各字对应的融合全文语义信息后的向量表示。此外,模型输入除了字向量,还包含另外两个部分:

1. 文本向量:该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合

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

最后,BERT模型将字向量、文本向量和位置向量的加和作为模型输入。特别地,在目前的BERT模型中,文章作者还将英文词汇作进一步切割,划分为更细粒度的语义单位(WordPiece),例如:将playing分割为play和##ing;此外,对于中文,目前作者尚未对输入文本进行分词,而是直接将单字作为构成文本的基本单位。

五、具体NLP任务上的fine-tune

在具体的NLP任务上,BERT模型的输入输出会有细微的差别。

1)文本分类任务

2)语句对分类任务

3)序列标注任务

原文地址:https://www.cnblogs.com/gczr/p/11785930.html

时间: 2024-10-09 14:28:03

图示详解BERT模型的输入与输出的相关文章

详解Linux中的cat文本输出命令用法

作系统 > LINUX > 详解Linux中的cat文本输出命令用法 Linux命令手册   发布时间:2016-01-14 14:14:35   作者:张映    我要评论 这篇文章主要介绍了Linux中的cat文本输出命令用法,是Linux入门学习中的基础知识,需要的朋友可以参考下 cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的.一.功能cat主要有三大功能:1.一次显示整个文件. 复制代码 代码如下: $ cat filename 2.从键盘创建一个文件. 复

详解thinkphp模型

模型这一块,Think PHP讲解的比较复杂,并且内部做了各种数据库兼容,我认为,虽然它做了这么多的兼容,但是并不代表我们要使用那么多晦涩的用法,事实上,那些用法是降低效率的. ORM:object relational mapping 对象关系映射,以中间件的形式存在. CURD: create update read delete ActiveRecord模式:领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录. 领域模型模式和模型类关系密切,这里

Java IO详解(三)------字节输入输出流

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html 那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream)  1.字节输出流:OutputStream public abstrac

C语言之复杂链表的复制(图示详解)

什么是复杂链表? 复杂链表指的是一个链表有若干个结点,每个结点有一个数据域用于存放数据,还有两个指针域,其中一个指向下一个节点,还有一个随机指向当前复杂链表中的任意一个节点或者是一个空结点.今天我们要实现的就是对这样一个复杂链表复制产生一个新的复杂链表. 复杂链表的数据结构如下: 1 typedef int DataType; //数据域的类型 2 3 //复杂链表的数据结构 4 5 typedef struct ComplexNode 6 7 { 8 9 DataType _data ; //

eclipse如何把多个项目放在一个文件夹下【eclipse中对项目进行分类管理】-图示详解

1.在Package Explorer顶部的右侧的倒数第三个有个倒三角,点击倒三角 2.选择Top Level Elements->Working Set 3.此时就会发现,很多项目会自动纳入一个文件夹,这个文件夹的名字叫做other Projects,这是默认的 4.如果想自己建立自己的文件夹,点击倒三角,Configure Working Set,会出现弹框. 5.在上界面中,点New进入以下界面.双击某一文件夹,就会进入编辑界面,可以修改文件夹名称,也可以选择将那个项目放置到该目录下.想删

02.详解盒子模型&选择器初识

1.Div盒子 用div做圆 能否优化,去掉div之间的距离?margin属性 ? 用表格做圆 ? 2.CSS样式 总结:需要注意的是行级标签设置宽高不会生效 ? 小练习:使用span标签 ? 3.CSS选择器演示及其优先级 体现在诗的第二句和第三句中 ? 4.ul列表样式案例 这个指的是标志(不严谨) ? 5.border及其属性 ? 小练习:table border-collapse: collapse;/*合并线宽:默认是分离的separate*/重点 ? 小练习: 改一下 ? ? 原文地

Spring基于事件驱动模型的订阅发布模式代码实例详解

代码下载地址:http://www.zuidaima.com/share/1791499571923968.htm 原文:Spring基于事件驱动模型的订阅发布模式代码实例详解 事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理解它的几个关键点: 首先是一种对象间的一对多的关系:最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方): 当目标发送改变(发布),观察者(订阅者)就可以接收到改变: 观察者如何处理(如行人如何走,是快走/慢走/不走,目标不会管的

YII2框架详解

yii2框架的安装我们在之前文章中已经提到下面我们开始了解YII2框架 Yii2的应用结构: 目录篇: advance版本的特点是:根目录下预先分配了三个模块,分别是前台.后台.控制台模块. 1.backend 它主要用于管理后台,网站管理员来管理整个系统. assets 目录用于存放前端资源包PHP类. 这里不需要了解什么是前端资源包,只要大致知道是用于管理CSS.js等前端资源就可以了. config 用于存放本应用的配置文件,包含主配置文件 main.php 和全局参数配置文件 param

logcat命令详解【二】

eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息; [plain] view plaincopy [email protected]:~$ adb logcat --help Usage: logcat [options] [filterspecs] options include: -s