BERT论文解读及实现(一)

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

1 论文解读

1.1 模型概览

  • There are two steps in our framework: pre-training and fine-tuning.
    bert由预训练模型+微调模型组成。
    pre-training, the model is trained on unlabeled data over different pre-training tasks.
    预训练模型是在无标注数据上训练的
    For fine-tuning, the BERT model is first initialized with
    the pre-trained parameters,
    and all of the parameters are fine-tuned using labeled data from the downstream tasks
    微调模型在有监督任务上训练的,不通下游任务训练不同的bert模型,尽管预训练模型一样,不同下游任务都有单独的微调模型

下图中,左边为预训练的bert模型,右边为问题答案匹配微调模型。
在这里插入图片描述

1.2 模型架构

  • BERT’s model architecture is a multi-layer bidirectional Transformer encoder
    bert模型架构是基于原始transorformer的encoder层

常用参数表示:
L : Transformer blocks 的层数
H: embedding的维度大小
A: 多头注意力机制中的头数,代表使用多少个self attention
BERTBASE (L=12, H=768, A=12, Total Parameters=110M) and BERTLARGE (L=24, H=1024,A=16, Total Parameters=340M).

模型输入:

  • 将两个句子拼接在一起,组成单个句子,句子之间使用 [SEP] token连接

  • 在句子第一个位置加入 [CLS] token ,代表了这个句子的聚合信息。

  • 单独构建句子token 拼接句子用0,1和来表示每个字是属于句子1,还是句子0。

For a given token, its input representation is constructed by summing the corresponding token,segment, and position embeddings。
对应给定的一个token,embedding 表征由三部分组成,分别由字embeddign, segment(句子) embedding,和位置embedding相加而成。,如下图所示。

在这里插入图片描述

1.3 预训练BERT

模型完成两个任务;
任务①: Task #1: Masked LM
任务②:下一个句子预测
Task #1: Masked LM
-In order to train a deep bidirectional representation, we simply mask some percentage of the input tokens at random, and then predict those masked tokens.
为了学习句子的双向表征,通过一定比例随机mask句子中的一些token,然后去预测这些token。

  • In all of our experiments, we mask 15% of all WordPiece tokens in each sequence at random
    我们在每个句子中随机mask 掉15%的tokens

  • Although this allows us to obtain a bidirectional pre-trained model, a downside is that we are creating a mismatch between pre-training and fine-tuning, since the [MASK] token does not appear during fine-tuning.
    尽管这种mask机制可以解决双向模型训练问题,但是由于在模型fine-tuning时,并没有mask tokens,导致pre-training 和 fine-tuning节点不一致。

  • 我们采样如下策略处理上面问题
    ① 每个句子随机选择15%的token进行mask
    ② 在选择的mask token中,其中80%替换为[mask],10%被随机替换为其他词,剩下10%保持原token不变

Task #2: Next Sentence Prediction (NSP)
背景:许多下游任务是基于2个句子完成的,如 Question Answering (QA) 、 Natural Language Inference (NLI)。

In order to train a model that understands sentence relationships, we pre-train for a binarized next sentence prediction task

任务设计:

  • 对每一个训练,样本选择句子A和句子B
  • 50%的句子B,真的是句子A的下一句,label=IsNext
  • 50%的句子B随机从预料库中选择的,label=NotNext

1.4 Fine-tuning BERT

For applications involving text pairs, a common pattern is to independently encode text pairs before applying bidirectional cross attention BERT instead uses the self-attention mechanism to unify these two stages, as encoding a concatenated text pair with self-attention effectively includes bidirectional cross attention between two sentences.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20102.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

观察者模式(下):如何实现一个异步非阻塞的EventBus框架?

上一节课中,我们学习了观察者模式的原理、实现、应用场景,重点介绍了不同应用场景下,几种不同的实现方式,包括:同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞是最经典的实现方式,主要是为了…

gulimall-性能监控-压力测试

性能监控与压力测试 前言一、性能监控1.1 jvm 内存模型1.2 jvisualvm 作用1.3 监控指标 二、压力测试2.1 概念2.2 性能指标2.3 JMeter 压测工具 前言 本文继续记录B站谷粒商城项目视频 P141-150 的内容,做到知识点的梳理和总结的作用。 一、性能监控 1.1 jvm 内存…

计算机网络实验(4)--配置网络路由

📍实验目的 了解路由器的特点、基本功能及配置方法;使用模拟软件Packet Tracer 5.3熟悉Cisco路由器的操作;配置静态路由和距离矢量路由协议RIP,实现给定网络的连通;从而加深对IP编址、路由转发机制、路由协议、路由表…

Talk预告 | 天津大学博士生赵煜:从平面图像中理解空间语义 - 视觉空间位置描述

本期为TechBeat人工智能社区第512期线上Talk! 北京时间7月12日(周三)20:00, 天津大学博士生—赵煜的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “从平面图像中理解空间语义-视觉空间位置描述”,届时将与大家…

超详解内存函数(memcpy,memmove,memcmp),及其模拟实现

目录 目录: 1:memcpy函数及其模拟实现 2:memmove函数及其模拟实现 3:memcmp函数及其模拟实现 1:memcpy函数及其模拟实现 作用:从source地址开始后中拷贝num个字节的内容到目的地字符串,遇到\0也…

JavaScript的简要介绍

什么是JavaScript? JavaScript 是一种高级的、面向对象的、多范式编程语言。 javascript在网站开发中的作用 这三种语言在一起可以构建好看的和动态网站或者网络应用从程序; HTML、CSS、JavaScript是构建网站的三种基本技术。它们各自负责以下方面&…

机器学习原理

此次主要是由分类来引出 由于宝可梦的图片比较简洁,而数码宝贝的图片就显得比较复杂,我们计算出他们的轮廓,求出白色数量的多少。 e的函数会计算线条的复杂程度。当得出的线条的复杂程度,小于h。我们认为其是宝可梦,反…

adb shell dumpsys SurfaceFlinger

adb shell dumpsys SurfaceFlinger adb shell dumpsys SurfaceFlinger分析Android 系统图层 此命令输出的内容不较多,可以将输出内容重定向到一个文件中 adb shell dumpsys SurfaceFlinger > ./Downloads/surface.txt如下的内容,过滤HWC layers 另外…

02 |「Android Studio 新建项目」

前言 新手入门安卓开发 文章目录 前言一、步骤一、步骤 New Project选择 Empty Activity1)Name:项目的名字; 2)Package name:项目的包名(项目的唯一标识); 3)Save location:项目的保存路径; 4)Language:

Python+Requests+Excel接口测试实战

1、EXCEL文件接口保存方式,如图。 2、然后就是读取EXCEL文件中的数据方法,如下: 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

Java的jdk配置成功,但是输入java -version等,命令行没有任何反应

问题:现在有很多学生出现这种情况, Java的jdk配置成功,但是输入java -version等,命令行没有任何反应 Java下载后,手动配置环境变量,并且配置好,但是在命令行中无论输入java的什么都没有反应 问…

Unity游戏C# dll注入

案例游戏下载 首先在网上下载个游戏案例,我就以Captain Molly游戏为例。 这个游戏玩家默认生命值有5点,咱们通过dll注入修改为10点。 dnSpy 我使用dnSpy来查看Unity游戏生成的dll代码,当然你们也可以使用其他工具。 Unity游戏脚本代码最终…