天天看点

【BERT】学习笔记之BERT理论部分

1. 初识BERT

  • BERT是Google开发的自然语言处理开源框架,是自然语言处通用的解决方案(所谓通用,就是可以基于BERT框架,做些微调,便可应用于多种NLP问题)。

2. word2vec的局限性(为什么引入BERT)

  • 基于word2vec训练好的词向量不会再改变,也就是说,若某个单词位于不同上下文语境中,该单词的此向量表达都是一样的,其缺陷一是没有考虑到单词在不同语境中的含义可能不同,其缺陷二是计算机不能识别文本中重要、有价值的部分。

3. Transformer

  • 理解BERT的核心在于Transformer。
  • 以机器翻译为例,输入“我是一名学生。”,Transformer对这句话的每个词进行编码(Embedding)形成向量,然后对编码后的向量解码成目标语言:“I am a student.”
  • Transformer的关键在于self-attention。

4. Self-attention

  • attention就是关注的意思,在NLP中意为让计算机关注有价值的文本信息。
  • self-attention加了个反身代词,意为让计算机自己根据上下文关系识别文本关键信息(对word2vec的改进)。
  • Self-attention步骤:
    1. Input:输入n个单词 x 1 . . . x n x_1...x_n x1​...xn​
    2. Embedding: 对这n个单词分别编码为行向量, x 1 ( . . . . . . ) , x 2 ( . . . . . . ) . . . x_1(......), x_2(......) ... x1​(......),x2​(......)...
    3. 利用第二步形成的每个单词的行向量,分别都乘以三个权重矩阵 W q , W k , W v W^q, W^k, W^v Wq,Wk,Wv,得到 q 1 . . . q n , k 1 . . . k n , v 1 . . . v n q_1...q_n, k_1...k_n, v_1...v_n q1​...qn​,k1​...kn​,v1​...vn​(都为行向量)。
    4. 计算每个单词与其余单词的关系。如 x 1 x_1 x1​与 x 2 . . . x n x_2...x_n x2​...xn​的关系,则将 x 1 x_1 x1​对应的 q 1 q_1 q1​分别与 k 2 . . . k n k_2...k_n k2​...kn​进行内积,若 q 1 ⋅ k 2 > q 1 ⋅ k 3 q_1·k_2 > q_1·k_3 q1​⋅k2​>q1​⋅k3​,则说明与 x 3 x_3 x3​相比, x 1 x_1 x1​与 x 2 x_2 x2​关系更密切(这一步考虑了上下文关系)。
    5. 第四步计算的内积结果是数值,无法直观地对重要性进行衡量,因此需要将第四部得到的数值转化为百分比,softmax可以实现数值到百分比的转化。以三行一列的向量为例, [ 1 4 7 ] \left[ \begin{matrix} 1 \\ 4 \\ 7 \end{matrix} \right] ⎣⎡​147​⎦⎤​softmax就是将其变为 [ e 1 e 4 e 7 ] \left[ \begin{matrix} e^1 \\ e^4 \\ e^7 \end{matrix} \right] ⎣⎡​e1e4e7​⎦⎤​再变为 [ e 1 e 1 + e 4 + e 7 e 4 e 1 + e 4 + e 7 e 7 e 1 + e 4 + e 7 ] \left[ \begin{matrix} \frac {e^1}{ e^1+e^4+e^7} \\ \frac {e^4}{ e^1+e^4+e^7} \\ \frac {e^7}{ e^1+e^4+e^7} \end{matrix} \right] ⎣⎢⎡​e1+e4+e7e1​e1+e4+e7e4​e1+e4+e7e7​​⎦⎥⎤​实现了百分比化。
    6. 第五部得到了每个单词的百分比,然后每个单词 x i x_i xi​的百分比分别乘以自己的 v i ( v 1 . . . v n ) v_i(v_1...v_n) vi​(v1​...vn​)便得到每个单词最终的特征向量表达(该向量表达可以实现在不同上下文语境下变化的功能)。

5. multi-head

  • multi-head就是说通过多组 q , k , v q, k, v q,k,v得到多组词特征表达。
  • 得到多组词特征表达后,对多组词特征表达进行组合,然后再进行降维,最终可以得到更好的特征向量。

6. 多层堆叠

  • 多层堆叠就是堆叠多层self-attention和multi-head,以期得到更好的特征向量。

7. 位置信息表达

  • 因为transformer对词向量的训练考虑了每个词与上下文语境的关系,因此可能对词的位置信息不那么强调了。
  • 位置信息表达就是在对词Embedding时加入一层位置信息编码,考虑到词的位置信息。

8. Transformer总体回顾

  1. Self-attention(最核心)
  2. multi-head(为了得到更好的最终向量)
  3. 多层堆叠与位置编码(为了得到更好的最终向量)
  4. 并行训练(并行完成多个向量生成任务,效率更高)
  5. 得到最终特征向量结果

9. BERT

  • transformer是BERT的核心,理解了transformer就理解了BEERT。
  • BERT就是指在transformer中做训练,是transformer中的Encoder部分。
  • 如何训练BERT:
    1. 取15%的字(词),把它们mask掉,训练BERT去预测这些mask掉的部分。
    2. 训练BERT判断两个句子是否应该连在一起,[SEP]是两个句子间的连接符;[CLS]是要做分类的向量。BERT需要做的是通过[CLS]向量来判断两个句子是否应该连接在一起(二分类:是或否)
  • BERT的特征向量生成与模型训练是放在一起的(这也体现出当今各种技术追求的是方便快速,能放一起解决的就放一起解决)。

继续阅读