8

关于BERT预训练模型,你想知道的都在这~

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650428958&%3Bidx=5&%3Bsn=4bd76cf808d875517d6b4b0cde934931
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

关于BERT预训练模型,你想知道的都在这~

AINLP 2022-02-07 10:19

The following article is from 笑傲NLP江湖 Author 晋百川

640?wx_fmt=jpeg
BERT模型自18年10月推出,到目前为止已经有3年多时间了。BERT问世即引起轰动,之后,各种改进版本的预训练模型(Pre-Training Model, PTM)与应用层出不穷。BERT及它的继任者们,确实也不负众望,在多种NLP数据集竞赛榜单,连续多年被各种新出现的预训练模型霸榜,有些榜单,个别模型已经把指标刷到超过人类。今天就带大家聊一下BERT并进行案例实战。

BERT介绍

640?wx_fmt=pngBERT的架构图如图1所示,从架构图我们可以看到BERT分三个模块,分别是Embedding模块、Transformer模块和输出的预微调模块。
640?wx_fmt=png
图1(1)Embedding模块:BERT中的该模块是由三种Embedding共同组成而成,如下图所示。
640?wx_fmt=png
图2
  • Token Embeddings 是词嵌入张量,第一个单词是CLS标志,可以用于之后的分类任务。
  • Segment Embeddings 是句子分段嵌入张量,是为了服务后续的两个句子为输入的预训练任务。
  • Position Embeddings 是位置编码张量,此处注意和传统的Transformer不同,不是三角函数计算的固定位置编码,而是通过学习得出来的。
  • 整个Embedding模块的输出张量就是这3个张量的直接加和结果。
(2)双向Transformer模块:BERT中只使用了经典Transformer架构中的Encoder部分,完全舍弃了Decoder部分。BERT的Transformer的Encoder部分具有12个隐层,输出768维张量,共有12个自注意力头。不了解Transformer的同学可以看这里!!!https://zhuanlan.zhihu.com/p/396221959(3)预微调模块:
  • 经过中间层Transformer的处理后,BERT的最后一层根据任务的不同需求而做不同的调整即可。
  • 比如对于sequence-level的分类任务,BERT直接取第一个[CLS] token 的final hidden state,再加一层全连接层后进行softmax来预测最终的标签。

  • 对于不同的任务,微调都集中在预微调模块,几种重要的NLP微调任务架构图展示如下
640?wx_fmt=png
图3从上图中可以发现,在面对特定任务时,只需要对预微调层进行微调,就可以利用Transformer强大的注意力机制来模拟很多下游任务,并得到SOTA的结果(句子对关系判断, 单文本主题分类, 问答任务(QA),单句贴标签(NER))。

BERT的预训练任务

640?wx_fmt=png
  • 任务一:Masked LM (带mask的语言模型训练)
    • 关于传统的语言模型训练,都是采用left-to-right,或者left-to-right + right-to-left结合的方式,但这种单向方式或者拼接的方式提取特征的能力有限。为此BERT提出一个深度双向表达模型(deep bidirectional representation)。即采用MASK任务来训练模型。
    • 1. 在原始训练文本中,随机的抽取15%的token作为参与MASK任务的对象。
    • 2. 在这些被选中的token中,数据生成器并不是把它们全部变成[MASK],而是有下列3种情况。
      • 2.1 在80%的概率下,用[MASK]标记替换该token,比如my dog is hairy -> my dog is [MASK]
      • 2.2 在10%的概率下,用一个随机的单词替换token,比如my dog is hairy -> my dog is apple
      • 2.3 在10%的概率下,保持该token不变,比如my dog is hairy -> my dog is hairy
    • 3. 模型在训练的过程中,并不知道它将要预测哪些单词?哪些单词是原始的样子?哪些单词被遮掩成了[MASK]?哪些单词被替换成了其他单词?正是在这样一种高度不确定的情况下,反倒逼着模型快速学习该token的分布式上下文的语义,尽最大努力学习原始语言说话的样子。同时因为原始文本中只有15%的token参与了MASK操作,并不会破坏原语言的表达能力和语言规则。

  • 任务二:Next Sentence Prediction (下一句话预测任务)
    • 在NLP中有一类重要的问题比如QA(Quention-Answer),NLI(Natural Language Inference),需要模型能够很好的理解两个句子之间的关系,从而需要在模型的训练中引入对应的任务。在BERT中引入的就是Next Sentence Prediction任务。采用的方式是输入句子对(A,B),模型来预测句子B是不是句子A的真实的下一句话。
    • 1. 所有参与任务训练的语句都被选中作为句子A。
      • 1.1 其中50%的B是原始文本中真实跟随A的下一句话。(标记为IsNext,代表正样本)
      • 1.2 其中50%的B是原始文本中随机抽取的一句话。(标记为NotNext,代表负样本)
    • 2. 在任务二中,BERT模型可以在测试集上取得97%-98%的准确率。

BERT的变体有哪些

640?wx_fmt=png
  • bert-base-uncased:编码器具有12个隐层, 输出768维张量,12个自注意力头,共110M参数量,在小写的英文文本上进行训练而得到。
  • bert-large-uncased:编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在小写的英文文本上进行训练而得到。
  • bert-base-cased:编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在不区分大小写的英文文本上进行训练而得到。
  • bert-large-cased:编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在不区分大小写的英文文本上进行训练而得到。
  • bert-base-multilingual-uncased:编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在小写的102种语言文本上进行训练而得到。
  • bert-large-multilingual-uncased:编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在小写的102种语言文本上进行训练而得到。
  • bert-base-chinese:编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在简体和繁体中文文本上进行训练而得到。
相信大家学到这里肯定又了一些收获,把你们的收获和疑问可以打在评论区,大家一起交流学习!!!
0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
342篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK