带你熟悉NLP预训练模型:BERT
本文分享自华为云社区《【昇思技术公开课笔记-大模型】Bert理论知识》,作者: JeffDing。
NLP中的预训练模型
语言模型演变经历的几个阶段
- word2vec/Glove将离散的文本数据转换为固定长度的静态词向量,后根据下游任务训练不同的语言模型
- ELMo预训练模型将文本数据结合上下文信息,转换为动态词向量,后根据下游任务训练不同的语言模型
- BERT同样将文本数据转换为动态词向量,能够更好地捕捉句子级别的信息与语境信息,后续只需对BERT参数进行微调,仅重新训练最后的输出层即可适配下游任务
- GPT等预训练语言模型主要用于文本生成类任务,需要通过prompt方法来应用于下游任务,指导模型生成特定的输出。
BERT模型本质上是结合了ELMo模型与GPT模型的优势。
- 相比于ELMo,BERT仅需改动最后的输出层,而非模型架构,便可以在下游任务中达到很好的效果;
- 相比于GPT,BERT在处理词元表示时考虑到了双向上下文的信息;
Bert介绍

2018年Google发布了BERT(来自Transformer的双向自编码器)预训练模型,旨在通过联合左侧和右侧的上下文,从未标记文本中预训练出一个深度双向表示模型。因此,BERT可以通过增加一个额外的输出层来进行微调,就可以达到为广泛的任务创建State-of-the-arts 模型的效果,比如QA、语言推理任务。
当时将预训练模应用于下游任务的策略通常有两种:基于特征的(feature-based)和基于微调(fine-tuning);前者比如ELMo,后者比如OpenAI GPT;
这两种策略在预训练期间具有相同的目标函数,在预训练期间,它们使用单向语言模型来学习一般的语言表示。但当前对预训练方法的限制(尤其是对基于微调的方法)是标准语言模型是单向(unidirectional)的,所以限制了在预训练阶段可选的模型结构体系。
比如GPT是从左到右的,每个token只能关注到前一个token的self-attention layers。这种局限对于句子级任务(sentence-level tasks)来说还不是很打紧,但是对于token-level tasks(比如QA)就很致命,所以结合两个方向的上下文信息至关重要。
Bert Input
第一步:Tokenization, 输入的句子经过分词后,首尾添加[CLS]与[SEP]特殊字符,后转换为数字id
第二步:Embedding, 输入到BERT模型的信息由三部分内容组成:
表示内容的token ids
表示位置的position ids
用于区分不同句子的token type ids

将三种信息分别输入Embedding层

如果出现输入是句子对的情况呢?

BERT Architecture
BERT由Encoder Layer堆叠而成,Encoder Layer的组成与Transformer的Encoder Layer一致:
自注意力层 + 前馈神经网络,中间通过residual connection和LayerNorm连接

BERT(Bidirectional Encoder Representation from Transformers)是由Transformer的Encoder层堆叠而成,BERT的模型大小有如下两种:
BERT BASE:与Transformer参数量齐平,用于比较模型效果(110M parameters)
BERT LARGE:在BERT BASE基础上扩大参数量,达到了当时各任务最好的结果(340M parameters)
BERT Output
BERT会针对每一个位置输出大小为hidden size的向量,在下游任务中,会根据任务内容的不同,选取不同的向量放入输出层

pooler output
例如,在诈骗邮件分类任务中,我们会将表示句子级别信息的[CLS] token所对应的向量,经过Bert Pooler放入classfier中,得到对spam/not spam分类的预测。

我们一般称[CLS]经过线性层+激活函数tanh的输出为pooler output,用于句子级别的分类/回归任务
sequence output
例如,在词性标注任务(POS Tagging)中,我们需要获得每一个token所对应的类别,因此需要将[CLS]和[SEP]中有实际意义的token输出,分别输入对应的classifier中。

我们一般称BERT输出的每个位置对应的vector为sequence output
BERT的不同下游任务


BERT预训练
BERT预训练任务有两种:Masked Language Modelling(MLM) 和 Next Sentence Prediction (NSP)。
MLM:随机遮盖输入句子中的一些词语,并预测被遮盖的词语是什么(完形填空)
NSP:预测两个句子是不是上下文的关系

Masked Language Model(MLM)
Masked Language Modelling(MLM) 捕捉词语级别的信息
在输入中随机遮盖15%的token(即将token替换为[MASK])
将[MASK]位置对应的BERT输出放入输出层中,预测被遮盖的token

在将[MASK]位置所对应的BERT输出放入输出层后,本质上是在进行一个多分类任务


为了使得预训练任务和推理任务尽可能接近,BERT在随机遮盖的15%的tokens中又进行了进一步的处理:
80%的概率替换为[MASK]
10%的概率替换为文本中的随机词
10%的概率不进行替换,保持原有的词元

Next Sentence Prediction(NSP)
Next Sentence Prediction (NSP) 捕捉句子级别信息,简单来说是一个针对句子对的分类问题,判断一组句子中,句子B是否为句子A的下一句(IsNext or NotNext)


Bert微调
在下游任务中,我们使用少量的标注数据(labelled data)对预训练Transformer编码器的所有参数进行微调,额外的输出层将从头开始训练。

带你熟悉NLP预训练模型:BERT的更多相关文章
- 【转载】最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
本文介绍了一种新的语言表征模型 BERT--来自 Transformer 的双向编码器表征.与最近的语言表征模型不同,BERT 旨在基于所有层的左.右语境来预训练深度双向表征.BERT 是首个在大批句 ...
- 最强中文NLP预训练模型艾尼ERNIE官方揭秘【附视频】
“最近刚好在用ERNIE写毕业论文” “感觉还挺厉害的” “为什么叫ERNIE啊,这名字有什么深意吗?” “我想让艾尼帮我写作业” 看了上面火热的讨论,你一定很好奇“艾尼”.“ERNIE”到底是个啥? ...
- NLP预训练模型-百度ERNIE2.0的效果到底有多好【附用户点评】
ERNIE是百度自研的持续学习语义理解框架,该框架支持增量引入词汇(lexical).语法 (syntactic) .语义(semantic)等3个层次的自定义预训练任务,能够全面捕捉训练语料中的词法 ...
- 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】
2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...
- BERT的通俗理解 预训练模型 微调
1.预训练模型 BERT是一个预训练的模型,那么什么是预训练呢?举例子进行简单的介绍 假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一个新 ...
- 使用Huggingface在矩池云快速加载预训练模型和数据集
作为NLP领域的著名框架,Huggingface(HF)为社区提供了众多好用的预训练模型和数据集.本文介绍了如何在矩池云使用Huggingface快速加载预训练模型和数据集. 1.环境 HF支持Pyt ...
- NLP与深度学习(五)BERT预训练模型
1. BERT简介 Transformer架构的出现,是NLP界的一个重要的里程碑.它激发了很多基于此架构的模型,其中一个非常重要的模型就是BERT. BERT的全称是Bidirectional En ...
- BERT预训练模型的演进过程!(附代码)
1. 什么是BERT BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Tr ...
- 最强 NLP 预训练模型库 PyTorch-Transformers 正式开源:支持 6 个预训练框架,27 个预训练模型
先上开源地址: https://github.com/huggingface/pytorch-transformers#quick-tour 官网: https://huggingface.co/py ...
- 预训练模型——开创NLP新纪元
预训练模型--开创NLP新纪元 论文地址 BERT相关论文列表 清华整理-预训练语言模型 awesome-bert-nlp BERT Lang Street huggingface models 论文 ...
随机推荐
- hdu 5685
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5685 解题思路:前缀积+费马小定理求逆元. AC代码: 1 #include<iostream> ...
- django数据库事务操作celery任务注意事项
from django.db import transaction from django.http import HttpResponseRedirect @transaction.atomic d ...
- Android联系人增删改查
1:申请权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-p ...
- Linux服务器安装好Jenkins,IP+端口无法访问的问题排查
1.是否已安装jdk,命令:java -version 2.查看Jenkins进程是否还在,命令 ps -ef|grep jenkins 3.查看8080(Jenkins默认)端口号是否开放,命令:f ...
- 这些常见的python编码习惯,你都会吗
本文分享自华为云社区<不得不知的十个常见PY编码习惯>,作者:码乐. 简介 语言在发展和变化,编码习惯也在发生改变.这里简单聊聊 17个python中常见的编码习惯或者风格. 1,可变数据 ...
- 【开源】EDUCN网站
EDUCN https://scrc.rth1.link/ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&q ...
- 微短剧市场暴涨267.65%,用微短剧场景AUI Kit精巧入局
微短剧,不仅上头,更要上心. 微短剧,深度"拿捏"了这个碎片化时代,也是刚过去的2023年绕不开的热词. 与传统影视剧制作精益求精.耗时长相反,门槛与耗时"双低" ...
- 多模态AI开发套件HiLens Kit:超强算力彰显云上实力
摘要:Huawei HiLens Kit是一款端云协同多模态AI开发套件,支持图像.视频.语音等多种数据分析与推理计算,可广泛用于智能监控.智能家庭.机器人.无人机.智慧工业.智慧门店等分析场景. 在 ...
- CodeArts TestPlan:一站式测试管理平台
摘要:华为云正式发布CodeArts TestPlan,这是一款自主研发的一站式测试管理平台,沉淀了华为30多年高质量的软件测试工程方法与实践,覆盖测试计划.测试设计.测试执行和测试评估等全流程. 本 ...
- 解读分布式调度平台Airflow在华为云MRS中的实践
摘要:Airflow是一个使用Python语言编写的分布式调度平台,通过DAG(Directed acyclic graph 有向无环图)来管理任务. 本文分享自华为云社区<分布式调度平台Air ...