Bert学习笔记(简单入门版)

目 录

一、基础架构

二、输入部分

三、预训练:MLM+NSP

3.1 MLM:掩码语言模型

3.1.1 mask模型缺点

3.1.2 mask的概率问题

3.1.3 mask代码实践

3.2 NSP

四、如何微调Bert

五、如何提升BERT下游任务表现

5.1 一般做法

5.2 如何在相同领域数据中进行further pre-training

5.3 参数设置Trick

六、如何在脱敏数据中使用Bert等预训练模型


一、基础架构

基础架构为Transformer的Encoder:
具体解释可参考简单易懂的Transformer学习笔记_十七季的博客-CSDN博客

Base bert -12层Encoder堆叠。
 

其中位置编码部分与Trm的positional encoding不同,具体在下面进行解释。

二、输入部分

Input=token \space emb +segment \space emb+position \space emb

CLS向量不能代表整个句子的语义信息

区分句子:上图中第一个句子E_A=0, 第二个句子E_B=1

位置信息:TRM正余弦;Bert随机初始化,模型自学习

三、预训练:MLM+NSP

3.1 MLM:掩码语言模型

没有标签,无监督。

AR:自回归模型,只能考虑单侧信息;GPT
AE:自编码模型,从损坏的输入数据中预测重建原始数据,可以使用上下文信息;Bert

Eg:

3.1.1 mask模型缺点
 

认为两个mask之间是独立的(但实际未必独立)

3.1.2 mask的概率问题
 

3.1.3 mask代码实践

3.2 NSP

NSP样本如下:

  1. 从训练语料库中取出两个连续的段落作为正样本

  2. 从不同的文档中随机创建一对段落作为负样本

缺点:

主题预测(是否属于同一个文档)和连贯性预测合并为一个单项任务

四、如何微调Bert

对输出Softmax

五、如何提升BERT下游任务表现

5.1 一般做法

1.获取谷歌中文Bert

2.基于任务数据进行微调

以微博文本情感分析为例:

  1. 在大量通用语料上训练一个LM(Pretrain);——中文谷歌BERT

  2. 在相同领域上继续训练LM(Domain transfer);——在大量微博文本上继续训练这个BERT

  3. 在任务相关的小数据上继续训训练LM(Task transfer); ——在微博情感文本上(有的文本不属于情感分析的范畴)

  4. 在任务相关数据上做具体任务(Fine-tune)。-

先Domain transfer再进行Task transfer最后Fine-tune性能是最好的

5.2 如何在相同领域数据中进行further pre-training

  1. 动态mask: 每次epoch去训练的时候mask,而不是一直使用同一个。

  2. n-gram mask: 比如ERNIE和SpanBerti都是类似于做了实体词的mask

5.3 参数设置Trick

Batch size:16,32——影响不太大
earning rate(Adam):5e^{-5},3e^{-5},2e^{-5}——尽可能小一点避免灾难性遗忘
Number of epochs:3,4
Weighted decay修改后的adam,使用warmup, 搭配线性衰减

数据增强/自蒸馏/外部知识的融入

六、如何在脱敏数据中使用Bert等预训练模型

对于脱敏语料使用BERT,一般可以分为两种:

  1. 直接从零开始基于语料训练一个新的BERT出来使用;

  2. 按照词频,把脱敏数字对照到中文或者其他语言【假如我们使用中文】,使用 中文BERT做初始化,然后基于新的中文语料训练BERT。

参考资料
BERT从零详细解读,看不懂来打我_哔哩哔哩_bilibili

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

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

相关文章

MongoDB之索引和聚合

文章目录 一、索引1、说明2、原理3、相关操作3.1、创建索引3.2、查看集合索引3.3、查看集合索引大小3.4、删除集合所有索引(不包含_id索引)3.5、删除集合指定索引 4、复合索引 二、聚合1、说明2、使用 总结 一、索引 1、说明 索引通常能够极大的提高查…

数据采集与大数据架构分享

实现场景 要实现亿级数据的长期收集更新,并对采集后的数据进行整理和加工,用于人工智能的训练数据素材集。 数据采集 java支持的爬虫框架还是有很多的,如:webMagic、Spider、Jsoup等添加链接描述 pipeline处理管道 数据并发开发…

黔院长 | 为什么要调经络?原来通经络对人体健康如此重要!

人体的组成较为复杂,在外有皮肤、毛发;在内有经络、五脏;其他还有我们看不到的精气、津液等等,也因此人体会生各种各样的疾病。 为什么说经络畅通对人体健康如此重要?身体内外始终是一个统一的整体,内外之间…

Dynamsoft Barcode Reader新框架将医疗视觉提升到新水平

Dynamsoft Vision 框架将医疗保健领域的计算机视觉提升到新的水平 引入图像捕获、内容理解、结果解析和交互式工作流程的聚合 SDK,以简化复杂的流程。 温哥华 – 2023 年 7 月 17 日 – Dynamsoft™ 发布了 Dynamsoft Barcode Reader SDK C Edition v10.0.0。更新…

OpenAI发布会中不起眼的重大更新

上周,OpenAI的历史首届开发者大会上,OpenAI的首席执行官山姆奥特曼展示了一系列产品更新,包含了众多重磅功能,就算单独拿出来都能让科技圈震一震,一下能发布这么多也真是家底厚。 果不其然,接下来的一周&am…

新版mmdetection3d将3D bbox绘制到图像

环境信息 使用 python mmdet3d/utils/collect_env.py收集环境信息 sys.platform: linux Python: 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) [GCC 9.4.0] CUDA available: True numpy_random_seed: 2147483648 GPU 0,1: NVIDIA GeForce RTX 3090 …

【算法挨揍日记】day30——300. 最长递增子序列、376. 摆动序列

300. 最长递增子序列 300. 最长递增子序列 题目解析: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如&#…

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列8

文章目录 前言一、原始代码二、对每一行代码的解释:总结 前言 这是该系列原型网络的最后一段代码及其详细解释,感谢各位的阅读! 一、原始代码 if __name__ __main__:##载入数据labels_trainData, labels_testData load_data() # labels_…

odoo17前端js框架的演化

odoo17发布了,从界面上看,变化还是很明显的,比16更漂亮了,本来以为源码不会发生太大的变化,结果仔细一瞧,变化也不小。 1、打包好的文件数量和大小发生了变化 打包好的文件从两个变成了一个,在…

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列7(承接系列6)

文章目录 前言一、原始代码---保存原型点,加载原型点二、代码逐行解释 前言 此部分为原型网络的两个函数,分别为保存原型点函数和加载原型点函数,与之前的系列相承接。 一、原始代码—保存原型点,加载原型点 def save_center(self,path):datas []for …

【算法挨揍日记】day29——139. 单词拆分、467. 环绕字符串中唯一的子字符串

139. 单词拆分 139. 单词拆分 题目描述: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 解题思路&am…