跟李沐学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表示段嵌入,输出句子使用1表示段嵌入

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

  • CLS\]:位于每条输入序列的开头,用于分类任务。

  • MASK\]:用于替换那些在MLM任务中被随机选中遮盖的词汇。

具体修改可参考下图:

(图源: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的特征也会不同。

相关推荐
道可云17 分钟前
道可云AI元宇宙平台入选2025年度视听系统典型案例
人工智能
AI-小柒44 分钟前
从零入门大语言模型(LLM):系统学习路线与实践指南
大数据·开发语言·人工智能·学习·信息可视化·语言模型·自然语言处理
才聚PMP1 小时前
NPI项目如何用控制计划(CP)锁死 “量产一致性”?
人工智能
marteker1 小时前
现代租赁汽车的原厂锁车和解锁警报声替换成科基蛙的叫声
人工智能
remender9991 小时前
降本增效双赋能,IT人力外包成企业破局新路径
大数据·人工智能·物联网
Peter·Pan爱编程1 小时前
RegexBox:让正则表达式变得简单,AI 驱动的正则工具箱
人工智能·正则表达式
马士兵教育1 小时前
AI大模型通用智能体项目从原理到落地:Agent Skills 的核心逻辑与中间件 + 动态工具实践方案+架构项目实战!
人工智能·中间件·架构
C++ 老炮儿的技术栈1 小时前
KUKA机器人程序抓料
linux·运维·c语言·人工智能·机器人·库卡
wangmengxxw1 小时前
SpringAI-简介及入门案例
人工智能·springai
Elastic 中国社区官方博客1 小时前
Agent Builder,超越聊天框:推出增强型基础设施
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索