BERT家族:族长BERT

自18年底谷歌BERT问世以后,NLP便逐渐步入bert时代,bert家族儿孙满堂,如RoBERTa、ALBert、ERNIE等等,这些bert们正在给并持续给nlp领域输入无限生机,让人工智能皇冠上的明珠更加光彩夺目,在其光芒的照耀下,人类的人工智能之路必定越来越清晰、明朗。

通过阅读大量博客资料,知乎专栏和论文,文本以通俗易懂而不失专业的方式总结了Bert以及其13个衍生版本,分享给大家,不足之处,望请指出。后期会不定期分享各个版本bert的详细解读以及实战代码,敬请期待。

1. BERT

论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

论文地址:https://arxiv.org/pdf/1810.04805

作者/机构:google

年份:2018.10

1.1 概述

Bert是基于Transformer的深度双向预训练语言模型,神经语言模型可直接用于下游NLP任务的微调。Bert的出现使finetune技术应用于NLP领域真正走向成熟,并在工业界得到了广泛的应用,在不太消耗算力的情况下能显著提升各类任务的性能;在学术界也成为了研究热点,Bert出现会后,基于Bert的各类任务的SOTA模型也逐渐出现,Bert的改进版本也逐渐被提出。

1.2 模型解读

模型由输入层(Embedding),编码层(Tansformer encoder)和输出层三部分组成。

(1)Embedding

输入又三类特征相加而得,如下:

Token Embedding:词特征(词向量)的嵌入,针对中文,目前只支持字特征嵌入;

Segment Embedding:词的句子级特征嵌入,针对双句子输入任务,做句子A,B嵌入,针对单句子任务,只做句子A嵌入;

Position Embedding:词的位置特征,针对中文,目前最大长度为 512;

(2)Encoder

使用的是具有强大特征提取能力的Transformer的编码器,其同时具有RNN提取长距离依赖关系的能力和CNN并行计算的能力。这两种能力主要是得益于Transformer-encoder中的self-attention结构,在计算当前词的时候同时利用了它上下文的词使其能提取词之间长距离依赖关系;由于每个词的计算都是独立不互相依赖,所以可以同时并行计算所有词的特征。Transformer与Transformer-encoder结构如下:

图:Transformer

图:Transformer-encoder

(3)输出层

Bert预训练的时候使用两大任务联合训练的,根据任务不同,其输出也不同,两大任务包括,掩码语言模型(MLM)任务和句子连贯性判定(NSP)任务其细节如下:

图:MLM任务

MLM随机将输入中15%的词遮蔽起来,通过其他词预测被遮盖的词(这就是典型的语言模型),通过迭代训练,可以学习到词的上下文特征、语法结构特征、句法特征等,保证了特征提取的全面性,这对于任何一项NLP任务都是尤为重要。

其中,在选择mask的15%的词当中,80%情况下使用mask掉这个词,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。这么做的主要原因是:在后续微调任务中语句中并不会出现[MASK]标记,这样做可以削弱后续微调输入与预训练输入的不匹配为题;而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇(10%概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。

图:NSP任务

NSP输入句子A和句子B,判断句子B是否是句子A的下一句,通过迭代训练,可以学习到句子间的关系,这对于文本匹配类任务显得尤为重要。

1.3 BERT的特点

(1)真正的双向:使用双向 Transformer,能同时利用当前单词的上下文信息来做特征提取,这与双向RNN分别单独利用当前词的上文信息和下文信息来做特征提取有本质不同,与CNN将上下文信息规定在一个限定大小的窗口内来做特征提取有本质不同;

(2)动态表征:利用单词的上下文信息来做特征提取,根据上下文信息的不同动态调整词向量,解决了word2vec一词多义的问题;

(3)并行运算的能力:Transformer组件内部使用自注意力机制(self- attention),能同时并行提取输入序列中每个词的特征。

(4)易于迁移学习:使用预训练好的BERT,只需加载预训练好的模型作为自己当前任务的词嵌入层,后续针对特定任务构建后续模型结构即可,不需对代码做大量修改或优化。

1.4 用法

针对不同的NLP任务,有不同的使用方式,如下:

(a)句对分类

判断两句子之间的关系,如句子语义相似度、句子连贯性判定等,其本质是文本分类。

输入:两句子;

输出:句子关系标签。

(b)单句子文本分类

判断句子属于哪个类别,如新闻自动分类、问题领域分类等。

输入:一个句子;

输出:输出句子类别标签。

(c)抽取式问答

给定问答和一段文本,从文本中抽取出问题的答案,如机器阅读理解等。其本质是序列标注。

输入:一个问题,一段文本;

输出:答案在文本中的索引。

(d)单句子序列标注

给输入句子的每个token打上目标标签,如分词、词性标注、实体识别等。

输入:一段文本;

输出:文本中每个token对应的标签。

针对google开源的中文Bert模型和源码,对两类任务做微调的用法如下:

序列标注

(1)加载预训练Bert模型;

(2)取输出字向量:embedding = bert_model.get_sequence_output();

(3)然后构建后续网络。

文本分类

(1)加载预训练BERT模型;

(2)取输出句向量:output_layer=bert_model.get_pooled_output();

(3)然后构建后续网络。

更多NLP相关技术干货,请关注微信关注【NLP有品】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值