当前位置: 首页 > article >正文

跟李沐学AI:BERT

什么是NLP中的迁移学习

使用预训练好的模型来抽取词、句子的特征:Word2Vec或者预训练好的语言模型。

使用预训练好的语言模型,一般不会再对语言模型进行微调,即不进行更新。

Word2Vec一般用于替代embedding层

但是Word2Vec往往忽略了时序信息,语言模型也往往只看了一个方向,不善于处理长序列。

BERT的动机

希望像CNN一样,可以有一个基于微调的NLP模型。预训练的模型以及抽取了足够多的信息,遇到新的任务只需要增加一个简单的输出层。

BERT架构

BERT是一个只有编码器的Transformer。

BERT原始提供两个版本:

Base:Block = 12, hidden_size = 768, head = 12, parameters = 110M

Large:Block = 24, hidden_size = 1024, head = 24, parameters = 340M

BERT在大规模数据上进行训练,有大于3B词。

对输入的修改

BERT训练时,每个训练样本是一个句子对:(source, target),为了区分输入句子和输出句子,输入句子使用0表示段嵌入e_A,输出句子使用1表示段嵌入e_B

同时,为了标识句子的开始和结束,以及区分一对句子,BERT引入了几个特殊字符:

  • [CLS]:位于每条输入序列的开头,用于分类任务。
  • [SEP]:用来分隔一对句子,或者标志单个句子的结束。
  • [MASK]:用于替换那些在MLM任务中被随机选中遮盖的词汇。

BERT的位置编码为可学习参数。

具体修改可参考下图:

(图源:https://zh.d2l.ai/chapter_natural-language-processing-pretraining/bert.html) 

预训练任务1:带掩码的语言模型

为了使BERT更加通用,BERT的预训练包括以下两个任务:掩蔽语言模型和下一句预测。

Transformer的编码器使双向的,而标准的语言模型是单向的。

为此,BERT会随机按照一定概率(15%)将句子中的词元换成掩码<mask>,要求模型预测掩码(类似完形填空)。因此,BERT在此任务中是可以观察双向信息的。

因为微调任务中不出现<mask>掩码,因此BERT在训练更换掩码时,80%将选中的词元变为掩码<mask>,10%的概率换成随机词元,10%的概率保持原有词元不更换。

预训练任务2:下一句子预测

该任务用于预测两个句子在原始文本中是否相邻。

训练样本中:50%概率选择相邻句子对。50%概率随机拼接两个句子作为句子对。

由于Transformer编码器中的自注意力,特殊词元“<cls>”的BERT表示已经对输入的两个句子进行了编码。因此该任务将<cls>对应的输出作为全连接层的输入,全连接层的输出结果代表该任务的预测结果。

微调BERT

BERT对每一个词元(包括<cls>和<sep>)返回抽取了上下文信息的特征向量。因为BERT的特征是基于TransformerBlock即Attention的,因此单个词元的特征向量页包含了上下文的所有信息。

不同的任务可以使用不同的特征

句子分类

可以将<cls>对应的向量输入到全连接层进行分类

单句分类:情感分类、测试语言可接受性

句子对:语义文本相似度(计算句子1、2的相似性得分)

文本标注

为每个词分配一个标签,如对每个词做词性标注。

命名实体识别

识别一个词元是不是命名实体,如人名、机构、位置

将每一个非特殊词元的特征放入全连接层(二分类问题?)

问题回答

给定一个问题和描述文字,找出一个片段作为回答。

输入为句子对,句子1为问题,句子2为描述文字。分类器对描述文字中的每一个词元预测是否是答案的开始或结束,或不是开始或结束(三分类问题)。

微调总结

即使下游任务有所不同,使用BERT未调试只需增加输出层即可。

不同任务,输入的表示和BERT的特征也会不同。


http://www.kler.cn/a/381301.html

相关文章:

  • 【大数据学习 | kafka】kafka的偏移量管理
  • ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合
  • python-读写Excel:openpyxl-(4)下拉选项设置
  • 【ROS2】话题发布和订阅的频率控制
  • 2-Ubuntu/Windows系统启动盘制作
  • 十四届蓝桥杯STEMA考试Python真题试卷第二套第一题
  • Angular引用控件类
  • unity 三维数学 ,角度 弧度计算
  • 小程序Android系统 校园二手物品交换平台APP
  • .net core mvc 控制器中页面跳转
  • 【PHP小课堂】一起学习PHP中的反射(二)
  • Chrome与火狐的安全功能全面评估
  • 红队知识学习入门(4)Windows病毒编写
  • Mac如何将多个pdf文件归并到一个
  • 【Java】集合详解及常见方法
  • CasaOS香橙派安装HomeAssistant智能家居系统并实现远程管理家中智能设备
  • Docker 镜像体积优化实践:从基础镜像重建到层压缩的全流程指南
  • 56. 数组中只出现一次的数字
  • JavaScript知识点梳理及案例实践
  • Rust数据NoSQL 数据库的使用
  • Pod安装软件将CDN改为国内的镜像
  • 智谱发布AI助理,帮人类敲响AGI的大门
  • 什么是开源软件(OSS)?
  • 【Linux】linux c语言调用send()接口内核调用流程
  • 从实验室到生活:超分子水凝胶湿电发电机的应用之路
  • 使用免费的飞书机器人,实现消息推送实时通知