BERT全称BidirectionalEncoder Representations from Transformer(基于Transformer的双向编码器?)。BERT模型利用大规模无标注的预料训练,获得包含文本内在语义信息的Representation

  • 输入:文本中各个词的原始向量。这个向量既可以是随机初始化,也可以是使用word2vec初步训练得到的。
  • 输出:文本中各个词融合了全文语义后的向量表示

bert向量embedding_transformer

输入模型的向量包括三个部分:字向量(Token Embedding)、文本向量(Segment Embedding)、位置向量(Position Embedding),最后将这三个向量加和输入到BERT模型中。

  • 字向量就是普通的词嵌入:Embedding
  • 文本向量是用embedding的信息将上下文分开
  • 位置向量是学习出来的

1. 模型任务

1.1 三种NLP任务

对于不同的任务,BERT有着不同的输入和输出

  • 单文本分类:例如文章情绪分析。BERT模型在输入的文本前添加一个[CLS]符号,并将该符号对应的输出向量作为最终整篇文章的语义表示。与其他文本字相比,这个[CLS]向量能更公平的融合各个字词的语义信息
  • 语句对文本分类: 例如问答系统。这时输入向量不仅添加了[CLS],还添加了[SEP]用于分割语句。
  • 序列加标注:此类任务每个字对应的输出向量是对该字的标注,可以理解为分类

1.2 两种预训练模型

  • Masked LM:给定一句话,随即抹去其中几个词,要求根据上下文判断缺失字词。形象理解为“完形填空”。原文作者在一句话中随机选择15%的词汇用于预测。对于被抹去的词汇,80%用[MASK]替换,10%用其他字替换,10%保持不变。这样做的原因是,模型在实际预测使并不知道对应位置的词汇是否为正确答案,这迫使模型更加依赖上下文信息去预测。
  • Next Sentence Prediction: 给定两句话,判断第二句是否紧挨着第一句。类似四六级中的段落重排序。

2. Attention

BERT的核心是Transformer,而Transformer的核心是Attention,注意力机制。

Attention的作用是让神经网络把注意力集中在一部分输入上。最原始的应用于序列入序列出类问题的模型是Encoder Decoder模型。

输入bert向量embedding_transformer_02经过Encoder编码,生成中间语义cbert向量embedding_自然语言处理_03送入Decoder,根据中间语义和已生成的历史信息生成bert向量embedding_bert向量embedding_04时刻的结果bert向量embedding_自然语言处理_05

这么做的缺陷也很明显。首先当输入量较大时,将规模极大的信息一股脑地压入c显然对于Decoder压力很大,且容易出现梯度消失;其次,先后进入Encoder的信息价值是不等的,理论上越后输入的单词影响力越大;而且,可以看出Decoder中,任何时刻的语义信息C是相同的,显然也不合理。

Attention机制则在其基础上改用多个中间语义c

bert向量embedding_bert向量embedding_06


在预测Y1时可能它的注意力放在C1上,那么就用C1作为其中间语义,以此类推。也就是说原先一成不变的C,变成了会根据要生成的单词而不断变化的Ci。举例,在为“鹄”注音时,可能会觉得陌生,但放入“鸿鹄之志”里时就豁然开朗了。在“鸿鹄之志”四个字中,“鸿”对“鹄”的理解作用最大,相反“之”对想起来“鹄”念什么帮助微乎其微。这个帮助理解的能力,就类似于注意力Attention机制主要涉及到三个概念:Query,Value,Key。

bert向量embedding_transformer_07


其中

  • Query:目标字,或待生成的标注的词
  • Value:上下文各字的原始Value表示
  • Key:上下文各字的Key向量表示
    通过计算Query和Key的相似度对Value加成,生成目标字的Attention值。bert向量embedding_自然语言处理_08其中bert向量embedding_bert_09得到目标字的增强语义表示
Self-Attention自注意机制

bert向量embedding_word2vec_10


自注意机制将每个字作为Query,加权融合所有字的语义信息,得到各字的增强语义向量

Multi-head Self-Attention

bert向量embedding_transformer_11


将每个字的多个增强语义向量进行线性组合,最终获得一个与原始字向量长度相等的增强语义向量。Multi-head的出现是因为不仅词具有多义性,有些句子在不同场景下所表达的意思也不一样。例如“女朋友 / 很 / 重要吗”和“女朋友 / 很重 / 要吗”两句话,“要”字是否和“重”组合所表达的语义不同。Multi-head Self-Attention可以看作是对文本中每个字分别增强其语义向量表示的黑盒

3. Transformer

大名鼎鼎的Transformer是Multi-head Self-Attention的升级版。由于BERT没有Decoder模块,下文只涉及Transformer Encoder结构。

bert向量embedding_bert向量embedding_12


Transformer在Multi-head基础上又添加了

  • 残差连接:将multi-head模块的输入和输出直接相加。
  • 标准化:对神经网络节点做0,1标准化
  • 线性转换:再做两次线性变化,变换后的向量和原向量长度相同

4. BERT模型

重点来了。

组装好TransformerEncoder之后,将Transformer Encoder堆叠起来,就是BERT模型。

bert向量embedding_word2vec_13


重点结束了。