BERT学习笔记

论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,2019

代码:[tensorflow],[pytorch]

来源:李沐精度BERT

0、摘要

与之前模型的区别:

  • GPT考虑的是一个单向预测,用左边的词预测右边的词;但BERT则是同时利用左边和右边的词,来预测中间的词

  • ELMO用的BiLSTM,但是它使用的是RNN结构,在应用到下游任务时它需要对模型结构做调整;但BERT使用的是transformer,在下游任务中只需要改上层的一小部分就可以了

基本效果:

  • 11个任务上取得更高的精度

  • GLUE提升7.7%,至80.5%;MultiL1提升4.6%,至86.7%;SQuAD v1.1提升1.5,至93.2;SQuAD v2提升5.1,至83.1

1、导言

句子层面的任务:情感识别

单词层面的任务:命名实体识别

下游任务使用预训练模型的两种方式:

  • Feature-based:下游任务先用训练好的预训练模型来提取训练语料的特征,这个特征可能是预训练模型encoder的输出,也可能是某个中间层的隐藏状态;然后下游任务再用这个特征对自己的模型做训练。简单来说,就是用预训练模型做一个特征提取器?

  • Fine-tuning:根据下游特定的任务,在原来的预训练模型上进行一些结构方面的修改,这些修改通常是在模型的最后一层,使得模型输出是当前任务所需要的;然后在新的语料上重新训练修改后的模型。

之前工作的局限性:从左到右,单向,不太符合人类对语言的理解

MLM:Masked Language Model,带掩码的语言模型

贡献:

(1)展示了双向信息的重要性

(2)第一个基于微调、且在各项任务上都取得优越性能的预训练模型

2、相关工作

非监督的基于特征的方法:代表作是ELMo

非监督的微调方法:代表作是GPT

在有标注的数据上做迁移学习

3、BERT

Pre-training:在无标注的数据上做训练

Fine-tuning:模型首先用预训练好的模型做参数初始化,然后用下游任务标注好的数据对所有的参数做训练

image-20240222195623044

L:transformer块的个数

H:隐藏层的大小

A:自注意力机制模块head的数量

LHATotal parameters
BERT_Base1276812110M
BERT_Large24102416340M

切词方式:WordPiece(类似于BPE,字节对编码??)

句子的第一个 token 永远是 [CLS],它代表 classification,其在最后一个隐藏层的输出就代表整个序列在句子层面的信息。

句子与句子之间用一个 [SEP] 分割,它代表 separate。

image-20240222201913130

上图即为BERT嵌入层的做法,分为三部分:

  • Token Embedding:词元的嵌入,就是正常的单词嵌入向量
  • Segment Embedding:词元属于哪一个句子的嵌入,是属于第一个句子,还是属于第二个句子(第一个[SEP]属于第一个句子)
  • Position Embedding:词元的位置嵌入,是在整个输入序列中的位置(不是在单独某一个句子中的位置)

BERT用的是transformer的编码器(没用decoder),所以它的每一个词都会跟句子中的其他词计算注意力关系。

预训练中两个比较重要的点:(1)目标函数;(2)数据。

任务一:Masked LM,预训练的数据有Mask,但是微调的数据没有Mask,这会带来一些问题(什么问题??),解决方案是:

  • 15%被选中的待预测词,有80%的概率被替换成 [Mask] 掩码符号,有10%的概率被替换成随机的词元,有10%的概率保持不变但依然去做预测。

在这里插入图片描述

任务二:Next Sentence Prediction(NSP),预测下一个句子

  • 两个句子A和B,50%的概率B是在A之后(正例),有50%的概率B就是从其他地方选取出来的、跟A无关的一个句子(负例)
image-20240222204150332

注:上面的 ## 表示后面的那个词跟前面的词是一个单词,因为 flightless 是一个不常见的单词,所以就把它分开成两个常见的单词flight和less。

BERT的Fine-Tuning:根据下游任务的形式,设计模型的输入和输出(模型本身不需要做太多改变)

  • 如果做分类,就用第一个词元 [CLS] 的输出来做分类;
  • 如果做句子预测,就对每个词元的输出再加一个输出层,做softmax做预测;

4、实验

GLUE:分类任务,对第一个词元 [CLS] 的输出做softmax,然后分类。

SQuAD v1.1:Q&A任务,给模型一段话,然后提一个问题,需要在这段话中找出这个问题的答案,这个答案已经在这段话里面了,模型只需要找出答案片段的开始和结尾。

5、消融实验

BERT用作Feature-Based的效果并不好,用作Fine-Tuning更好一些。

6、结论

(1)使用非监督的预训练是很好的,这使得那些数据量很小的下游任务也能使用神经网络

(2)主要的贡献就是把前人的工作成果扩展到双向的深度结构上

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

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

相关文章

公司中常用的系统有哪些--制造业篇

摘要 本系列博客主要介绍不同行业中使用的常见系统,本文介绍在制造业或是智能制造方向的常见系统。 智能制造发展史 1973年美国约瑟夫哈林顿(Joseph Harrington)博士在《Computer Integrated Manufacturing》一书中首次提出 CIM&#xff08…

C# 本地方法和lambda实现

概念: 本地函数是一种嵌套在另一成员中的类型的方法。 仅能从其包含成员中调用它们。 下面是本地方法最简单的一个demo: public static int Show(){int c NewMethod(); return c;static int NewMethod(){#region 测试int a 3;int b 9;int c a b;#endregionre…

python opencv实现车牌识别

目录 一:实现步骤: 二:实现车牌检测 一:实现步骤: 使用Python和OpenCV实现车牌识别的步骤大致可以分为以下两部分: 车牌检测: 读取需要进行车牌识别的图片。 对图像进行灰度化处理,可能还包括高斯模糊和灰度拉伸。 进行开运算,消除图像中的噪声。 将灰度拉伸后的图…

培养纳税筹划思维方式,企业税务筹划实务操作

一、教程描述 本套税务筹划教程,大小447.87M,共有6个文件。 二、教程目录 前言.mp4 培养纳税筹划思维方式.mp4 增值税的税务筹划.mp4 企业所得税的税务筹划.mp4 个人所得税的税务筹划.mp4 企业税务筹划实务操作(课件).pdf…

MDST150-16-ASEMI三相可控整流模块MDST150-16

编辑:ll MDST150-16-ASEMI三相可控整流模块MDST150-16 型号:MDST150-16 品牌:ASEMI 正向电流(Id):150A 反向耐压(VRRM):1600V 正向浪涌电流:1200A 正…

大数据揭秘:Hadoop短视频流量分析实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

PyTorch概述(一)---图像变换和增强

TorchVision torchvision 包由流行的数据集、模型架构以及用于计算机视觉的通用图片转换工具组成 TorchVision 包构成 图像变换和增强TVTensors模型和预训练的权重数据集工具操作图像和视频的编/解码用于模型检测的特征提取 图像变换和增强 torchvision支持通用的计算机视…

基于springboot+vue的车辆管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

获取淘宝商品详情API、商品主图、图片搜索api

获取淘宝详情API的方式有以下几种: 使用淘宝开放平台提供的接口:淘宝开放平台提供了多个API接口,让开发者可以通过接口获取商品详情信息。你可以到淘宝开放平台官网申请开发者账号,并查看相关接口文档,了解如何使用接…

C语言翻译环境:预编译+编译+汇编+链接详解

目录 翻译环境和运行环境 翻译环境 预处理(预编译) 编译 词法分析 语法分析 语义分析 汇编 链接 运行环境 ⭐翻译环境和运行环境 在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被…

H桥逆变方式介绍(单极性)

H桥逆变电路实现的就是一个从DC——AC的过程 这个电路有两个时序,Q6Q4是一个导通时序,Q5Q7是一个导通时序 左边两个是高频20KHZ的、互补的sPWM波,右边是低频的50HZ的PWM波 三角波一般叫载波,正弦波叫调制波(单片机内…

Hbase和Clickhouse对比简单总结

Hbase和Clickhouse是两种不同的数据库系统,它们各自适用于不同的场景。以下是两者之间的对比: 数据模型: HBase 是一种基于列的存储系统,它适合处理大规模的数据集,特别是那些需要快速随机访问的场景。ClickHouse 则是…

对“绝地求生“源码调节

调整了一些界面和降低游戏难度 #include "c.h" using namespace std; ExMessage msg; struct ME {int x 100; int y 100; int life 1000; int knapsack[18]; int Maximum_ammunition_capacity 0;int Ammunition_capacity 0; int primary_weapon 0; int moveme…

springboot/ssm仓库管理系统Java货物出入库管理系统wms系统web

springboot/ssm仓库管理系统Java货物出入库管理系统wms系统web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&#xff1a…

Vi/Vim 使用小窍门,如何消除搜索后的关键字高亮

Vim/Vi 基本上是 *nix 世界最受欢迎的编辑器了,不知道为什么,一直以来觉得和 Emacs 比起来,Vim 更加有亲和力。用起来很舒服。 今天就记录一个困扰了我很久的问题。 大家应该都知道,在 Vi 里面如果要搜索某个关键字,…

C语言开发教程

C语言开发教程 电子书下载 下载地址 第一章 导言 1.1 入门 1.2 变量与算术表达式 1.3 for语句 1.4 符号常量 1.5 字符输入/输出 1.6 数组 1.7 函数 1.8 参数--传值调用 1.9 字符数组 1.10 外部变量与作用域 第二章 类型、运算符与表达式 2.1 变量名 2.2 数据类型及长度 2.3 常…

汽车会撞死人,应不应该限制汽车?

激进派表示事故率很低,损失相比汽车带来的收益不值一提,不能限制汽车 保守派表示行人什么也没有做错,却飞来横祸,只要发生一起事故,可能对一个家庭就是灭顶之灾,应该严格限制汽车 两边都有道理&#xff0c…

Python-pdfplumber读取PDF内容

文章目录 前言一、pdfplumber模块1.1 pdfplumber的特点1.2 pdfplumber.PDF类1.3pdfplumber.Page类 二 pdfplumber的使用2.1 加载PDF2.2 pdfplumber.PDF 类2.3 pdfplumber.Page 类2.4 读取PDF2.5 读取PDF文档信息2.6 查看总页数2.7 查看总页数读取第一页的宽度,页高等…

263集成客服系统:提升电商平台用户体验

{连接:无缝整合客服渠道} 在电子商务领域,客服是保持客户满意度和忠诚度的关键因素。263集成客服系统允许电商平台无缝连接到各种客服通道,包括在线聊天、电子邮件和社交媒体等。这种无代码开发方式不仅消除了传统API开发的复杂性&#xff…

使用Java调用Cplex求解带时间窗的车辆路径问题

使用Java调用Cplex求解VRPTW问题 一、带时间窗车辆路径优化问题(Vehicle Routing Problem with Time Window,VRPTW)1.1 问题描述1.2 模型构建 二、使用Java调用Cplex求解VRPTW问题2.1 完整代码2.2 求解结果 三、求解过程中踩的坑 一、带时间窗…