DataWhale零基础入门NLP赛事——Task6 基于深度学习的文本分类bert

DataWhale零基础入门NLP赛事——Task6 基于深度学习的文本分类bert_第1张图片
这里只介绍Bert里面的pretrain和finetune。

Google在NAACL 2018发表的论文中提出了BERT,采用了预训练-微调这一两阶段模式。

  1. 什么是预训练模型?
    预训练就是预先训练好的模型,之前word2vec也是预训练的一种,预先训练好语言模型然后在各种任务中重复使用。
  2. 什么是transform?
    transform是一种Encode&Decode模型,网络中用到了Multi-HeadAttention的模型,在bert中是个很重要的单元。
    Bert的预训练
  3. Bert的输入表示
    DataWhale零基础入门NLP赛事——Task6 基于深度学习的文本分类bert_第2张图片
    对于每个sentence 都会由三个张量来表示, 最后的结果是三个张量的和(三个张量shape相同):
    (1)Token Embedding主要用于表示char级别信息,
    (2)Segment Embedding 用于表示句子级别的信息,
    (3)Position Embedding 用于表示整篇文档里的位置信息
  4. Bert预训练的两个任务:一个是完形填空式的预测,一个是上下句关系的预测。
    第一个任务类似于CBOW用窗口里的词预测中心词,不同的是CBOW会对每个词都进行预测,通过双向transform的方法得到信息比其它语言模型更深更广。 这个任务采用MASK学习的方式, 只预测[MASK]的值, [MASK]的个数占总词表长度的15%, MASK操作 80%用[MASK] 代替词, 10% 用其它词代替选中的词,10%不做操作。
    由于使用了Transformer的模型结构,Transformer可以并行一个序列,对于它来说每个词的位置没有意义,因为self attention对所有输入一致看待,就算打乱顺序输入到模型也没有任何差别,所以需要加上一个位置embedding。值得注意的时候,这个也直接让模型的finetune有了长度限制。因为预训练的时候,position embedding也是跟着一起训练的,在预训练的时候只训练了128或者512的position embedding,如果在下游任务的输入过长,一般就做截断处理。

segment embedding实际上就是一个2hidden_size的embedding。
这里embedding都是随机初始化的,所以直接加起来得到最终的输入,最终实际一条样本的输入就是[seq_len
hidden_size]。
模型认为输出的每个位置和输入的位置是一一对应的,在[CLS]位置,我们认为这个位置集中了两个句子之间的关系,而每个单词位置的hidden state代表了预测的单词。

第二个任务是预测下一个句子, 这是因为语言模型往往会用于QA和NLI等需求,需要有获取句子间关系的能力。 训练的输入就是前后两个句子判断是否是上下文的关系。

DataWhale零基础入门NLP赛事——Task6 基于深度学习的文本分类bert_第3张图片
由于模型训练的时候,mask任务让模型尽力去理解上下文关系,next sentence任务则是句子间关系。我们可以认为一个训练好的BERT模型在每个词的位置都充分融合了上下文信息,在[CLS]位置包含了句子关系信息。
这一块貌似还不算特别理解。

你可能感兴趣的:(DataWhale零基础入门NLP赛事——Task6 基于深度学习的文本分类bert)