欢迎关注公众号K的笔记阅读博主更多优质学习内容
自然语言处理通用解决方案
- 需要熟悉 word2vec,RNN 网络模型,了解词向量如何建模
- 重点在于 Transform 网络架构,BERT训练方法,实际应用
- 开源项目都是现成的,提供预训练模型,基本任务拿过来直接用就成
Bert 核心原理
Transformer结构是谷歌大脑在2017年底发表的一篇论文 Attention is All You Need 中提出的一种语言结构,是一种 Seq2Seq 的模型,Bert 就是从 Transformer 中衍生出来的一种预训练的语言模型。
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为Decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
1 Transformer 直观理解
1.1 Transformer做了啥
- 其基本组成仍是机器翻译中常见的Seq2Seq网络,也就是类似输入一串中文,输出对应的英文。
- 传统架构中,中间的网络设计就是一个RNN,但是RNN不能并行计算,比如输入 x 0 , x 1 , . . . x n x_0,x_1,...x_n x0,x1,...xn一串字符串,RNN会处理 x 0 x_0 x0得到一个当前输出 h 0 h_0 h0和一个隐藏特征,然后 x 1 x_1 x1与 x 0 x_0 x0不是独立的,会用到前面一个隐藏特征,也就是每个下一步都会用到前面的中间结果,因此我们在计算过程中不能独立计算。这就是RNN的问题,没办法做并行计算。Transformer 能做并行计算。
- 实际任务中我们对每个词不是一视同仁的,对重要程度不够高的词随便看看就好,对重要程度较高的词需要多关注一下 —— Transformer结构中使用 Self-Attention 机制。其输出结果是同时被计算出来的,而不是RNN中一步输出一个结果。
- 传统的 word2vec表达向量时在不同语境下相同的词无法改变,也就是预训练好的向量永久不变,但实际任务中会需要用到一个词的不同语义表示。
- Transformer使用位置嵌入(positional encoding)来理解语言的顺序
1.2 Attention是啥意思呢?
比较两个句子:
- The animal didn’t cross the street because it was too tired.
- The animal didn’t cross the street because it was too narrow.
我们要让计算机识别这两个it具体指代的是animal还是street,我们考虑对it编码时,前后文各个词在该编码中所占的比例,也就是要把上下文语境融入到当前计算的词向量中,这就是self-attention。
大概长得像这样:
Self-attention is the method the Transformer uses to bake the “understanding” of other relevant words into the one we’re currently processing.
2 Transformer 架构分析
我们从整体层面来看,输入一个句子,经过Transformer处理后,输出另一个句子:
把Transformer稍微拆开一点,我们看到了句子输入后先由Encoder处理,经过某些转换,再由Decoder输出:
事实上,中间的Encoder-Decoder可能是由更多的Encoders-Decoders拼接起来的,看起来像这样:
每一个Encoder都是独立的,训练的时候权重参数可能完全不同,每一个Encoder都被分为两个子模块 ——— Self-Attention和前馈神经网络。
使用Embedding Algorithm将每个单词转化为词向量:
然后把词向量依次流入两个组件中,输出向量作为下一个Encoder的输入向量
3 细看Self-Attention机制
第一步:对每个单词进行计算得到Queries,Keys,Values三个向量
第二步:使用单词A的Queries与单词A、C、D…的Keys计算出单词A与单词A、B、C、D…的相关程度,这个相关程度决定了我们编码该单词时需要考虑其他单词的比例:
第三步:将上面得到的Score除以向量的维度(为了让梯度更稳定),Softmax规范化转化为概率:
第四步:将该单词对应的每个单词的Softmax值分别乘上每个单词的Value,加和得到最终结果:
4 一点说明
ADDITION1:事实上上面的操作我们可以向量化表示,这样我们就实现了前面说的效率更高的并行计算:
ADDITION2:我们可以用一个公式概括上面的步骤:
ADDITION3: Mulit-head attention:
ADDITION4:总结图