语言模型BERT理解

news2024/11/16 9:24:26

在这里插入图片描述


一、BERT概述

BERT是由Google在2018年提出的一种预训练语言模型。BERT的创新之处在于采用了双向Transformer编码器来生成上下文相关的词向量表示

传统的单向语言模型只考虑了左侧或右侧的上下文信息,而BERT则同时考虑了左侧和右侧的上下文信息,使得生成的词向量具有更好的语义表达能力。

BERT的训练包括两个阶段:预训练和微调

  • 在预训练阶段,BERT使用了大规模的未标记语料来学习通用的语言表示。预训练任务包括“掩码语言模型”和“下一句预测”。掩码语言模型任务要求模型预测被掩码的词语,而下一句预测任务要求模型判断两个句子是否是相邻的。

  • 在微调阶段,BERT使用已标记的任务特定数据进行微调,比如文本分类、命名实体识别等。通过在特定任务上微调,BERT可以将通用的语言表示应用到具体的任务中。

BERT的出现对自然语言处理领域产生了重大影响。它在多个语言任务上取得了最先进的性能,并且可以通过简单的微调适应不同的任务。BERT的开源代码和预训练模型使得它成为了自然语言处理研究和应用中的重要工具。

github开源地址:https://github.com/google-research/bert

二、BERT架构

2.1 主体架构

BERT 框架分为两个步骤:预训练和微调。在预训练过程中,模型在不同的预训练任务上对未标记数据进行训练。对于微调,首先使用预训练的参数初始化BERT模型,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。如图1所示:
在这里插入图片描述
在这里插入图片描述

2.2 预训练方法

Task1: Masked LM (MLM)

随机屏蔽(masking)掉输入序列的部分输入token,然后只预测那些被屏蔽的token。论文将这个过程称为“masked LM”(MLM),而在其他文献中它经常被称为完形填空(Cloze)任务(Taylor, 1953)。这样做的好处是学习到的表征能够融合左右两个方向上的context。过去的同类算法在这里有所欠缺,比如ELMo模型,它用的是两个单向的LSTM然后把结果拼接起来;还有OpenAI GPT,虽然它一样使用了transformer,但是只利用了一个方向的注意力机制,本质上也一样是单项的语言模型。

不过MLM虽然确实能获得双向预训练模型,但这种方法有以下缺点:预训练和fine tuning之间可能不匹配,因为在fine tuning期间从未看到masking token。为了解决这个问题,本文并不总是用实际的masking token替换被masked的词汇。而是对于选取到的15%的词汇。例如在句子“my dog is hairy”中,它选择的token是“hairy”。执行以下过程:

  • 80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]
  • 10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple
  • 10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。

因此,通过这样的方式,Transformer编码器不知道最终要预测哪个词,更不知道输入句子对里哪个词是被随机替换成其他词了,所以它必须保留每个词语的语境表达分布信息。也就是说,要充分利用上下文信息。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。

Task2: Next Sentence Prediction(NSP)

Next Sentence Prediction (NSP):在第一阶段MLM训练结束后,此时模型基本具备语言模型的能力,但是,在一些任务中,比如问答和常识推理,这些任务往往看重的不是模型的语言能力,而是模型能够判断句子之间的关系,因此,论文又进行了第二阶段的训练,即NSP。该训练的目的是判别给定的两个句子A和B,判断B是否是A的下一句,本文从预训练的语料库中构造了一个训练集,其中,有50%的样本中,A和B是上下文的关系,其标签为“IsNext”,有50%的样本中,B是随机从语料抽取的句子,这时两者的标签是“NotNext”,然后将A 和B拼接后输入预训练的模型进行训练

2.3、模型微调和feature-based

BERT的微调方法非常直观。在预训练阶段结束后,此时可以将模型迁移到具体的NLP任务中,由于BERT对输入进行了良好的设计,因此,迁移到很多NLP任务时需要改动的地方非常少,比如对于文本分类,则直接将文本传入序列传入模型,然后用[CLS]的输出向量C 传入输出层即可。对于配对文本的输入,比如问答、文本蕴涵等,则直接将文本作为A,B句输入模型即可,不需要做什么修改。

可以发现,BERT与ELMo和GPT等模型相比,其迁移能力和语言表达能力更强了,但是此时也有一个问题,就是模型的参数量也很庞大,此时,如果对于每一个NLP任务,都直接用预训练模型进行微调,可能会有点大材小用,因此,本文也尝试像ELMo那样,直接利用预训练模型各层的输出作为各个NLP任务的输入,然后在每个NLP任务时单独训练一个新的小型模型,即基于“Feature-based”的方法而不是“Fine-tuning”。作者以NER任务为例,选取了BERT最后四层的输出向量进行拼接,作为NER任务的输入,然后用两层BiLstm进行命名实体识别,最后发现模型效果也很强。

三、实验效果

  • BERT刷新了11项NLP任务的性能记录。

3.1 GLUE (通用语音理解能力评估)

  • GLUE基准测试包含一系列不同的自然语言理解任务。在所有的GLUE任务上,作者使用了batch-size=32,epochs=3。对于每个任务,都通过开发集的验证来选择了最佳的微调学习率(在5e- 5,4e - 5,3e -5和2e-5之间)。另外,对于BERT的large模型,作者发现微调有时候在小数据集上不稳定,所以随机训练了几次,并选择了开发集上表现最佳的模型。

在这里插入图片描述

3.2 SQuAD v1.1(斯坦福问答数据集)

  • 这是一个100k的问答对集合。给定一个问题和一篇短文,以及对应的答案,任务是预测出短文中的答案文本范围(the answer text span in the passage)。 本文微调了3个epochs,学习率设置为5e-5,batch-size设置为32。得到结果如下:
    在这里插入图片描述

3.3 SWAG

  • 具有对抗性生成的情况 (SWAG)数据集包含113k个句子对示例,用于评估一些基于常识的推理。任务是给定一个句子,然后从四个给出的选项中选择出最有可能是对的一个作为这个句子的延续。
  • 在对SWIG数据集进行微调时,我们构建了四个输入序列,每个序列都包含给定句子(句子A)和可能的延续(句子B)的连接。引入的唯一特定于任务的参数是一个向量,它与单词的点积C表示每个选项的分数,该分数使用Softmax层进行了归一化。
  • 论文对模型进行了3个阶段的微调,学习率为2E-5,batch大小为16。BERTLARGE的性能比ESIM+ELMO模型高+27.1%,比OpenAI GPT高8.3%。结果如下图:
    在这里插入图片描述

四、模型选择

BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,它在各种NLP任务中取得了显著的成果。下面列举一些常见的BERT模型:

  • BERT-base:BERT-base是最基本的BERT模型,它包含12个Transformer编码器层,总共有110M个参数。BERT-base的输入嵌入向量维度为768,隐藏层的维度也是768。

  • BERT-large:BERT-large相对于BERT-base来说更大,它包含24个Transformer编码器层,总共有340M个参数。BERT-large的输入嵌入向量维度和隐藏层维度都是1024。

  • BERT-wwm:BERT-wwm是BERT的一种改进版本,它采用了整词(Whole Word Masking)的方式进行预训练,可以更好地处理中文的分词问题。

  • BERT-multilingual:BERT-multilingual是一种支持多语言的BERT模型,它可以同时处理多种语言的文本。该模型的预训练任务包括了来自多个语言的大规模文本。

  • BERT-uncased:BERT-uncased是将英文文本中的大写字母转换为小写字母后训练的模型。这种模型适用于不区分大小写的任务。

  • BERT-cased:BERT-cased是保留英文文本中的大小写信息后训练的模型。这种模型适用于区分大小写的任务。

  • 除了以上列举的几种,还有一些其他的BERT模型,如BERT-tiny、BERT-mini等,这些模型规模更小,适用于资源受限的环境或小规模任务。

需要注意的是,BERT模型是通过预训练和微调的方式使用的,预训练任务通常是掩码语言建模(Masked Language Modeling)和下一句预测(Next Sentence Prediction)。在实际应用中,可以将预训练的BERT模型微调到特定的任务上,如文本分类、命名实体识别、情感分析等。
在这里插入图片描述

五、结论

本文提出了Bert模型,主要贡献有以下两点:

  • 1、证明了双向预训练对语言表示模型的重要性。与之前使用的单向语言模型进行预训练不同,BERT使用掩盖语言模型来实现预训练的深度双向表示,并且取得了非常优良的效果。
  • 2、BERT是第一个基于微调的表示模型,它在大量的句子级和token级任务上实现了最先进的性能,强于许多面向特定任务体系架构的系统。刷新了11项NLP任务的性能记录。并且作为预训练模型,Bert可以随时接到其他的NLP任务中进行训练。

参考资料:https://www.zhihu.com/people/wei-zhi-jiao-yu-11

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

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

相关文章

YOLOv5改进系列(15)——增加小目标检测层

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

手把手教您kaiber,吊炸天的AI视频生成工具

什么是Kaiber AI? 一种人工智能视频生成器,可以将图像和文字生成视频。 如何使用Kaiber AI? 请按照以下步骤使用 Kaiber AI: 前往kaiber ai注册或登录。点击右上角“创建视频”。 如果订阅的时候提示要绑定银行卡,则找…

Basics——指针和引用(详解)

指针和引用 1.初始化规则2.面试题 :引用和指针的区别是什么3.引用使用场景4.拓展 为什么C支持引用而C没有 1.初始化规则 指针和引用在初始化方面有不同的规则: 指针的初始化规则: 直接初始化:可以将指针初始化为指向特定变量或…

Linux系统运行时参数命令(性能监控、测试)(3)网络IO性能监控

目录 5. 网络IO性能监控5.1 性能指标5.2 网络信息5.2.1 网络配置5.2.2 套接字信息5.2.3 网络吞吐-sar命令5.2.4 连通性和延时 5.3 其他常用的网络相关命令5.3.1 telnet5.3.2 nc5.3.3 tcpdump5.3.4 lsof5.3.5 nmap 6.其他工具6.1 nmon性能监控6.2 glances系统监控 5. 网络IO性能…

Js提升:如何实现图片懒加载

知其然,更要知其所有然,在不同场景下该用什么方法,如何做到最优。 为什么要出现图片懒加载,解决了什么问题?除了懒加载,还有预加载呢?什么是预加载,怎么实现,相比于懒加载…

软件设计模式与体系结构-软件体系-层次软件体系结构

目录 四、层次软件体系结构简介代码两种方式的区别双向分层分层风格 VS 主程序-子过程风格:二者的不同层次软件体系结构的优点层次软件体系结构的缺点 课程作业 四、层次软件体系结构 层次之间存在接口,通过接口形成call/return的关系,上层是…

【内存优化】内存优化以及oom排查整体思路

linux疑难问题排查实战专栏,分享了作为公司专家,在解决内存、性能、各类死机等疑难问题的排查经验,认真学习可以让你在日后工作中大放光彩。 本文总结介绍了项目开发过程中oom排查和内存优化的一些方法,主要是从内存问题查看到堆内…

阿里云轻量服务器和ecs区别(最新更新)

阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻…

组合模式:如何设计实现支持递归遍历的文件系统目录树结构?

组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。这里讲的“组合模式”,主要是用来处理树形结构数据。这里的“数据”,你可以简单理解为一组对象集合,待会我们会…

使用 geopandas 和 shapely(.shp) 进行地理空间数据处理和可视化

文章目录 前言1. 安装所需库2. 读取 Shapefile 文件3. 可视化地图4. 用户输入坐标和清除指定区域内的图形5. 可视化删除指定区域内的图形之后的地图6. 保存为新的 Shapefile (.shp)文件完整代码及解析分析说明 测试文件地址特别说明完结 前言 在地理信息系统(Geogra…

力扣竞赛勋章 | 排名分数计算脚本

文章目录 力扣竞赛勋章介绍竞赛评分算法脚本(本文的重点内容)运行结果 代码修改自:https://leetcode.cn/circle/discuss/6gnvEj/ 原帖子的代码无法正常运行。 力扣竞赛勋章介绍 https://leetcode.cn/circle/discuss/0fKGDu/ 如果你想知道自…

【Elasticsearch】初识elasticsearch

目录 初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK技术栈 1.1.3.elasticsearch和lucene 1.1.4.为什么不是其他搜索技术? 1.1.5.总结 1.2.倒排索引 1.2.1.正向索引 1.2.2.倒排索引 1.2.3.正向和倒排 1.3.es的一些概念 1.3.1.文档…

前端各种方法自我整理

Javascript方法 slice [slaɪs]切片 slice (-2)取出数组中倒数两个植变生成一个新数组 slice(0,3)取出数组下标0到下标3的值,生成新数组 includes [ɪnˈkluːdz]包含 查看数组或字符串内是否有该值,有返回true,无返回false 例子&#…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十二)完结篇

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

linux常用压缩/解压缩命令的使用

目录 gzipbzip2tar gzip gzip 的常用选项: -l(list) 列出压缩文件的内容。 -k(keep) 在压缩或解压时,保留输入文件。 -d(decompress) 将压缩文件进行解压缩。 如果 gzip 不加任何选项,此时为压缩。压缩完该文件会生成后缀为.gz 的压缩文…

java读取excel,指定列A列为空,将下方空行上移,并将指定列F列数据拼接

java读取excel,将空行上移 改造前: 效果图: 上代码: import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream; import java.io.FileOutputStream; import jav…

SqueezeNet算法解析—鸟类识别—Paddle实战

文章目录 一、理论基础1.前言2.设计理念2.1 CNN微架构(CNN MicroArchitecture)2.2 CNN宏架构(CNN MacroArchitecture)2.3 模型网络设计探索过程2.4 结构设计策略2.5 Fire模块 3.网络结构4.评估分析 二、实战1.数据预处理2.数据读取…

树莓派登录密码忘记了怎么办????

我们常常会不记得我们的密码,比如说我近期想玩一下我们树莓派开发版,登录的时候忘记了怎么办,第一想到的就是重刷系统,从头再来,今天我给大家带来了一个解决忘记了登录密码如何去修改它,从而进入系统里。 …

分享一款超级好用的下载软件,IDM--不限速,破解版,IDM破解版下载安装

本片文章分为四个部分: 第一部分,下载安装IDM 第二部分,IDM破解 第三部分,浏览器插件的安装 第四部分,百度网盘使用IDM下载 下载IDM 首先大家可以在浏览器搜索IDM 网址:https://www.internetdownloadma…

Zynq PS无法读取SD卡(TF卡)异常分析及如何读写SD卡

最近我正在进行一个Zynq项目,我使用了Xilinx SDK自带的系统库函数来读取SD卡中的配置信息。然而,一直读取异常。 我进行了一系列的调试和检查,包括确认PS部分的代码正确性以及Xilffs的配置是否正确,但是问题仍然没有解决。最后&am…