【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

2023-11-06

BERT的出现使我们终于可以在一个大数据集上训练号一个深的神经网络,应用在很多NLP应用上面。

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

深的双向Transformer

摘要(Abstract):与别的文章的区别是什么?效果有多好?

  • 与ELMo的区别:ELMo基于RNN,双向,在运用到下游的任务时需要做出一些调整。BERT基于Transformer,只需要改最上层。

  • 与GPT的区别:GPT基于Transformer解码器,单向,用左边的上下文信息预测。BERT基于Transformer编码器双向。

BERT的好处:简单且效果好,在11个NLP任务上都比较好。

引言(Introduction):语言模型的简单介绍;摘要第一段的扩充;

在使用预训练模型做特征表示的时候,通常有两种策略:

  • 基于特征

    ELMo,对于每一个下游任务,构造一个与之相关的神经网络,RNN架构,将预训练好的(比如一个词嵌入矩阵)作为额外特征一起作为输入,输入到模型里面,达到训练模型比较容易的目的。

    简单来说:这是大多数NLP最常用的使用预训练模型的方法,把学到的特征和输入一起放进去。

  • 基于微调

    GPT,引入了最小的特定于任务的参数,预训练好的参数进行微调

这两种方法在预训练及之后都使用相同的目标函数(GPT也不全是吧),且都使用单向的语言模型进行学习。(预测未来)

Bert主要想法:预测未来---->完形填空,用masked language model,带掩码的语言模型

​ 除此之外,Bert还关注了句子层面的信息:给两个句子,判断这两个句子是不是相邻的。(NSP)

贡献点:双向信息的重要性(句子从左看到右,从右看到左)

​ 在BERT上做微调效果很好

​ 代码开源

结论(Conlusion):

无监督的预训练很重要(在计算机视觉领域,在没有标签的数据集上做训练比在有标签的数据集上做训练效果会更好);

主要贡献是将这些发现进一步推广到深度双向架构,使相同的预训练模型能够成功处理一系列的 NLP 任务。
在本篇论文的结论中最大贡献是双向性(在写一篇论文的时候,最好有一个卖点,而不是这里好那里也好)。
选了选双向性带来的不好是什么?做一个选择会得到一些,也会失去一些。
缺点是:与GPT(Improving Language Understanding by Generative Pre-Training)比,BERT用的是编码器,GPT用的是解码器。BERT做机器翻译、文本的摘要(生成类的任务)不好做。
但分类问题在NLP中更常见。
完整解决问题的思路:在一个很大的数据集上训练好一个很宽很深的模型,可以用在很多小的问题上,通过微调来全面提升小数据的性能(在计算机视觉领域用了很多年),模型越大,效果越好(很简单很暴力)。

相关工作(Related Work)

2.1非监督的基于特征的一些工作如词嵌入,ELMo

2.2非监督的基于微调 的一些工作如GPT

2.3在有标注的大数据集上训练好的模型,做迁移学习(CV上用的很多,在ImageNet上训练好,应用到其他任务,但NLP上还不是很理想)

注:BERT和后面的文章说明了在无标注的大数据集上训练的效果要比在有标注的数据集上训练出来的效果更好。同样的思想现在也在CV中应用了。

BERT

在这里插入图片描述

  • 预训练

    在一个无标注的数据集上进行训练

  • 微调

    同样使用一个BERT模型,但其参数初始化成预训练中的BERT模型,所有的权重在微调时都会参与训练(用有标注数据集)

    每个下游任务都会创建一个新的BERT模型

模型架构

multi-layer bidirectional Transformer encoder

多层双向Transformer 编码器,和原始的Transformer没什么区别。

细节:改了三个参数

L:Transformer 块的个数

H:FC的隐藏层大小

A:多头注意力头的大小

BERT-BASE(12,768,12)

BERT-LARGE(24,1024,16)

BERT模型的复杂度和L是线性关系,和H是平方关系,L变成2倍,(1024 * 1024)/(768 * 768)≈ 2

怎么通过超参数L、H、A计算出可学习参数的大小,顺便回顾一下Transformer

在这里插入图片描述

参数主要来自于两块:

  • 嵌入层
  • Transformer块
输入和输出

输入有两种

  • 一个句子,不是我们通常说的句子,是一组词(不想管也无所谓)
  • 一个句子对<Question,Answer>,因为BERT并不像Transformer有编码器和解码器,BERT只有编码器,所以要把两个句子合成一个Sequence

Wordpiece切词:

​ 空格切词,一个词当作一个token会导致词典很大,所以对于出现概率不大的单词,只保留它的子序列(词根),切完只有30000个

如何合成两个句子?

​ 每一个Sequence的第一个词都是[CLS],BERT希望最后的输出代表的是整个句子层面的信息,这就是Attention厉害的地方了。

两个句子合在一起怎么进行区分呢?

  • 每个句子后放一个特殊符号[SEP]
  • 学一个嵌入层,是第一个还是第二个

在这里插入图片描述

每一个词元(token)进入BERT之后如何被表示成Embedding呢?

在这里插入图片描述

Token:词嵌入

Segment:在那个句子中

Position:位置 (Transformer中位置编码是人定的,BERT中是学出来的)

上述的都是预训练和微调相同的部分

下面是不同的部分

Task1. Masked LM (完形填空)

在预训练的过程中,他们以15%的概率把一个词变成[Mask]([CLS]和[SEP]除外)也即一个带掩码的语言模型,然后进行训练。但在微调的过程中,也没有Mask这个东西啊。

个人理解:预训练采用拿出一篇完型填空让机器学的方式,然后微调用在其他任务中。两个阶段的目标函数都不一样。

所以预训练和微调所看到的数据会有一点不一样。

咋解决呢?

在这里插入图片描述

80%的概率是真的变成了[Mask]

10%随即替换成了一个别的词(噪声)

10%什么都不变,但是标记一下这是我要预测的词(和微调时的情况一样)

Task2. Next Sentence Prediction (NSP)(预测下一个句子)

在这里插入图片描述

输入两个句子,判断这两句话是不是连着的

微调

BERT这种只有编码器的结构,相比于编码器解码器结构也有好处:编码器解码器两个输入互相看不见,但是BERT可以,但缺点也有,不能像Transformer做机器翻译。

应用在在下游任务

GLUE(多分类问题)

​ 拿到[CLS]后,学习一个输出层 W W W s o f t m a x ( C W T ) softmax(CW^T) softmax(CWT)

SQuAD(QA问题)

​ 问题描述:给一段话,问一个问题,答案隐藏在这段话中。

​ 所以就是截取片断,对每个词元判断是不是答案的开头和答案的结尾。具体公式略

SQuAD 2.0

​ 略

SWAG(判断两个句子之间的关系)

​ 和预训练差不多

接下来讲了模型中每个模块对整体的影响以及参数个数对模型的影响,企图增强模型的可解释性。

再接下来试了一下不微调,发现效果没有微调好。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 的相关文章

  • Unity 连接WebSocket(ws://)服务器

    Unity 连接ws 不用任何插件 忙活了一天终于搞定了 一直连接不上 原来是没有添加header 代码比较简单 直接贴出来普度众生 using System using System Net WebSockets using System

随机推荐

  • 爬虫学习心得

    在python环境中对小说进行爬取 一般需要安装爬虫所需的第三方库 目前我所使用的为BS4和Requests BS4库安装 Beautiful Soup 简称 BS4 其中 4 表示版本号 是一个 Python 第三方库 它可以从 HTML
  • 图解通信原理与案例分析-13:无线对讲机案例--频率调制实现语音点对点无线通信

    前言 在 无线调幅广播案例 中 拆解了通过幅度调制AM实现点对多点广播通信的基本原理 本文 将通过无线对讲机的案例 拆解了通过频率调制FM实现点对多点广播通信的基本原理 本文的重点在 1 频率调制与解调的基本原理 2 频率调制与幅度调制的本
  • nvm常用命令有哪些?nvm如何切换node版本?nvm如何下载node?nvm安装包

    之前公司有很多老项目 需要切换node低版本才能正常使用 但是还有使用node高版本新项目 总不能每次更换项目就卸载重装对应版本的node 所以就使用了nvm来管理node版本 每次使用时 nvm命令就记得很清楚 可是长时间不使用 就会有点
  • Java方法的重载

    方法的重载 函数名相同 形式参数不同 方法重载的规则 1 方法名称必须相同 2 参数列表必须不同 个数 或者 参数类型 或者 排列顺序 3 方法的返回类型可以相同也可以不相同 4 仅仅返回类型不同不足以成为方法的重载 方法名称相同时 编译器
  • C++实践之Qt学习(五):Qt设计器介绍、信号和槽机制

    文章目录 Qt设计器 对象树 信号和槽 信号和槽机制 设计器上添加信号与槽 方式1 方式2 Qt设计器 分为几个区域 控件 部件区 界面编辑区 动作编辑 信号槽编辑区 对象区 对象属性区 部件区又分为几类 Layouts 布局 Spacer
  • 图像综合处理小设计实验—opencv背景分割,硬币检测

    图像综合处理小设计 opencv背景分割 硬币检测 一 机器视觉图像的目标与背景的分割与提取 1 主要要求 对输入图像可以达到目标和背景的分割 建议方法 1 将已知图像进行消噪处理 2 对彩色图像进行目标和背景分析 3 通过阈值法将图像进行
  • 【Vue2.0源码学习】模板编译篇-模板解析(代码生成阶段)

    文章目录 1 前言 2 如何根据AST生成render函数 3 回归源码 3 1 元素节点 3 2 文本节点 3 3 注释节点 4 总结 1 前言 经过前几篇文章 我们把用户所写的模板字符串先经过解析阶段解析生成对应的抽象语法树AST 接着
  • VMware Workstation 17 Pro的下载&&安装&&使用

    目录 一 下载 二 安装 三 检查网络连接 方式一 简便版 方式二 麻烦版 四 使用 创建虚拟机 使用命令 快照的使用 拍摄快照 恢复快照 克隆虚拟机 移除虚拟机 一 下载 下载地址 Windows 虚拟机 Workstation Pro
  • 14-堆排序

    堆 Heap 是一种常见的数据结构 常用于存储数据 其本质上是一棵完全二叉树 下面我们来看看如何用数组实现堆结构及其相关功能 堆的定义 首先来看一下堆的存储结构 堆可以看成是一颗完全二叉树 首先什么是二叉树 借助百度中的解释 二叉树 bin
  • arXiv是个什么东西?

    arXiv只是个提交论文预印本 preprint 的平台 而且里面的论文都没有经过同行评审 peer review 所以文章质量参差不齐 比较有名的计算机检索数据库DBLP数据库可以检索arXiv里的文章 DBLP把arXiv归类为非正式发
  • opencv 学习:reshape函数

    在opencv中 reshape函数比较有意思 它既可以改变矩阵的通道数 又可以对矩阵元素进行序列化 非常有用的一个函数 函数原型 C Mat Mat reshape int cn int rows 0 const 参数比较少 但设置的时候
  • BUAA_C程序括号匹配检查

    问题描述 编写一程序检查C源程序文件中 等括号是否匹配 并输出第一个检测到的不匹配的括号及所对应括号所在的行号 程序中只有一个括号不匹配 注意 1 除了括号可能不匹配外 输入的C源程序无其它语法错误 2 字符常量 字符串常量及注释中括号不应
  • 基于近半年Twitter与Github趋势分析_12大分类500+ChatGPT最新开源GitHub存储库(涵盖ChatGPT开发全框架、全编程语言及教程)——每周更新

    目录 前言 令人惊叹的开源ChatGPT资源 Awesome lists 提示工程 聊天机器人 浏览器扩展及插件 CLIs命令行界面标准应用程序 Reimplementations重实现模型 教程 NLP自然语言处理 Langchain U
  • Vue-自定义指令

    Vue 自定义指令 1 什么是自定义指令 vue 官方提供了 v text v for v model v if 等常用的指令 除此之外vue 还允许开发者自定义指令 2 自定义指令的分类 私有自定义指令 在每个vue 组件中 可以在dir
  • Safari开发者工具

    Safari开发者工具 1 开发者功能 2 开发者功能可以干什么 2 1 捕获模拟器的请求 1 开发者功能 Safari gt 首选项 gt 高级 gt 开启 在菜单栏中显示 开发 菜单 2 开发者功能可以干什么 2 1 捕获模拟器的请求
  • Android 自定义View :虚线矩形

    预览效果 涉及参数 斜线起点坐标 斜线可以忽略 斜线终点坐标 斜线可以忽略 矩形左上角坐标 矩形右下角坐标 其中 前两个参数用于绘制预览效果中矩形上方的斜线 如果不需要可以移除 本案例涉及视频外一个点指向视频内某块区域 因此参数略微复杂 除
  • CMD 命令换行

    CMD 命令换行 在执行较长的 cmd 命令或制作 cmd 命令脚本时 为了方便编写和阅读 有时需要在命令中加入适当的换行 基于不同的命令 有两种换行方式 普通命令 在要换行的地方输入 然后回车 再继续命令的输入 控制命令 如 if for
  • 如何使实时数据采集处理系统保持数据的高速传输

    如何使实时数据采集处理系统保持数据的高速传输 1引言 当前 越来越多的设计应用领域要求具有高精度的A D转换和实时处理功能 在实时数据采集处理系统设计中 一般需要考虑数据采集以及对采集数据的处理 而对于大数据量的实时数据采集处理系统来说 保
  • Linux服务器Java输出文件中文乱码

    使用下面语句查看编码 String encoding System getProperty file encoding 结果输出 ANSI X3 4 1968 从而导致中文乱码通过 locale 查看服务器系统编码 需要修改 1在tomca
  • 【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    BERT的出现使我们终于可以在一个大数据集上训练号一个深的神经网络 应用在很多NLP应用上面 BERT Pre training of Deep Bidirectional Transformers for Language Underst