BERT预训练模型学习笔记

1.Transforme

1.1 要做一件什么事

  • 基本组成依旧是机器翻译模型中常见的Seq2Seq网络
  • 输入输出都很直观,其核心架构就是中间的网络设计了
  • MxN,输入M,输出N

1.2 传统的RNN网络有什么问题

BERT预训练模型学习笔记_第1张图片

  • 传统RNN是一个时序模型,下一个RNN的输入依靠上一个RNN的输出,不能做到并行计算
  • 由于不能并行计算,到时无法在工业级进行大规模数据处理使用

1.3 Self-Attention机制

  • Self-Attention机制来进行并行计算,在输入和输出都相同

  • 输出结果是同时被计算出来的,现在基本已经取代RNN了

  • BERT预训练模型学习笔记_第2张图片

  • 传统的word2vec表示向量时有什么问题? 预训练好的向量就永久不变了

  • 不同语境中相同的词如何表达?

对于输入的数据,你的关注点是什么?如何才能让计算机关注到这些有价值的信息?对于一句话,在不同的语境中所关注的地方也不一样,例如这两句话中的it:

BERT预训练模型学习笔记_第3张图片

1.4 self-attention如何计算?

  1. 输入经过编码后得到向量

  2. 想得到当前词语上下文的关系,可以当作是是加权

  3. 构建三个矩阵分别来查询当前词跟其他词的关系,以及特征向量的表达。

    BERT预训练模型学习笔记_第4张图片

    三个需要训练的矩阵:Q: query,要去查询的;K: key,等着被查的;V: value,实际的特征信息

    BERT预训练模型学习笔记_第5张图片

    q与k的内积表示有多匹配;输入两个向量得到一个分值;K: key,等着被查的;V: value,实际的特征信息

    BERT预训练模型学习笔记_第6张图片

    每个词的Attention计算,每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征

    BERT预训练模型学习笔记_第7张图片

    Attention整体计算流程:

    • 每个词的Q会跟每一个K计算得分
    • Softmax后就得到整个加权结果
    • 此时每个词看的不只是它前面的序列而是整个输入序列
    • 同一时间计算出所有词的表示结果

1.5 multi-headed机制

一组q,k,v得到了一组当前词的特征表达;通过不同的head得到多个特征表达;将所有特征拼接在一起;可以通过再一层全连接来降维

BERT预训练模型学习笔记_第8张图片

堆叠多层,计算方法都是相同的

在self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,但是这跟实际就有些不符合了,我们希望模型能对位置有额外的认识。

  1. 加入归一化Normalize 2. 连接:基本的残差连接方式

2.BERT

BERT(Bidirectional Encoder Representations from Transformers),说白了就是transformer的encoder部分,并不需要标签,有预料就能训练了

2.1 如何训练BERT

方法1:句子中有15%的词汇被随机mask掉

交给模型去预测被mask的家伙到底是什么

词语的可能性太多了,中文一般是字

如果BERT训练的向量好,那分类自然OK

BERT预训练模型学习笔记_第9张图片

方法2:预测两个句子是否应该连在一起

[seq]:两个句子之前的连接符,[cls]:表示要做分类的向量

BERT预训练模型学习笔记_第10张图片

2.2 如何使用BERT

  • github已经开源,直接使用训练好了的模型就行
  • 所需的任务融入BERT中即可,它俩一起训练的!
  • 端到端的输入输出方式,直接套用深度学习模型关注输入输出

你可能感兴趣的:(NLP自然语言处理,bert,NLP,pytorch,transformer,attention)