摘要:上一篇广告行业中那些趣事系列3:NLP中的巨星BERT,从理论的角度讲了下NLP中有里程碑意义的BERT模型。BERT具有效果好和通用性强两大优点,其中效果好最主要的原因就是使用了Transformer作为特征抽取器。本篇主要详解下这个从配角到C位出道的Transformer,主要从宏观和微观的角度分析Transformer,讲下它的核心注意力机制Attention,然后以翻译任务举例讲下Transformer是如何进行工作的。
对充满挑战的高薪行业NLP感兴趣的小伙伴可以多多关注。不仅仅是技术,大家也可以了解到身边的翻译任务、对话机器人是怎么做出来的。
目录
01 BERT和Transformer的关系
02 为什么要用Transformer
03 从宏观视角看Transformer
04 从微观视角看Transformer
01 BERT和Transformer的关系
图1 回顾Word Embedding的演化历史
这里作为引言回顾下NLP中预训练技术Word Embedding的演化历史:
Word2vec将文本映射到向量空间,从而实现了在低维向量空间表示文本。通过向量空间中距离的长短可以表示文本语义的相似度。但是因为一个词在向量空间中位置是唯一的,所以无法解决多义词的问题。比如”legend”既可以代表传奇,还可以代表图例。归根结底是静态的Word Embedding。
ELMO采用联系上下文的三层embedding来表示词,不仅包括词向量,还包括了句法特征向量和语义特征向量,很好的解决了多义词问题。
而目前项目中使用的BERT模型相比于ELMO,因为使用了Transformer作为特征抽取器,所以模型效果很好。
总结下,google推出的BERT模型在11项NLP任务中效果有很大提升。最重要的一个原因是使用Transformer作为特征抽取器。
02 为什么要用Transformer
图2 传统的特征抽取器RNN和CNN
NLP中传统的特征器主要是RNN和CNN。
RNN(或者变种LSTM、GRU等)由于本身的机制只能按顺序依次计算,这种机制存在两个问题:
- 时间片t的计算依赖上一时间片t-1的计算结果,这样限制了模型的并行能力
- 信息计算的过程中信息会丢失,虽然LSTM等通过门机制会一定程度缓解长期依赖的问题,但是对于特别长的依赖现象LSTM还是无能为力
CNN虽然可以并行化计算,但是不适合捕捉长距离特征。
因为RNN和CNN各自存在的问题,所以google团队在论文《Attention is All You Need》中提出了Transformer模型。中文的意思是变形金刚,听着就很霸气。
Transformer抛弃了传统的CNN和RNN,整个网络完全由Attention机制组成,同时具有可并行化计算和捕捉长距离特征的优点。
03 从宏观视角看Transformer
1. Transformer的组成
图3 从宏观视角看Transformer
拿翻译系统举例,我们输入一种语言,通过Transformer模型,输出是另外一种语言。
进一步剖析Transformer模型,主要有编码组件和解码组件组成。编码组件中包含很多个编码器,解码组件也包含很多个解码器。
2. 编码器和解码器结构
图4 编码器和解码器结构
编码器主要包含自注意力层(Self-Attention)和前馈神经网络层(Feed Forward Neural Network)。
解码器和编码器很相似,也包含自注意力层和前馈神经网络层,另外还有一层编码解码层(Encoder-Decoder Attention)。
小结下,我们从宏观视角了解了Transformer的结构。Transformer主要包含编码组件和解码组件,编码组件中又包含很多编码器,解码组件同理。编码器中主要有自注意力层和前向神经网络层,解码器相比于编码器多了编码解码层。总体来说还是比较容易理解。
04 从微观视角看Transformer
1. 从张量计算查看Transformer内部转化流程
大部分NLP任务首先需要将语料转化成词向量的表征形式x。
对于编码组件来说,底层的编码器作为整个Transformer的入口,接收词向量作为模型输入。
这里咱们通过具体输入输出的维度表示来方便小伙伴们更好的理解Transformer中的各个环节。我们假设词向量的维度为512维。这里的512是可以设置的参数,一般是训练集中最长句子的长度。
因为编码组件中所有编码器的输入维度是相同的,初始的词向量是1X512维,那么底层的编码器的输入是1X512维,所以其他的编码器的输入也是1X512维。编码器内部会依次经过自注意力层和前馈神经网络层。
低层编码器的输出会作为上一层编码器的输入,不断进行,直到穿过整个编码组件。比如图5中编码器1的输入是词向量,编码器2的输入是编码器1的输出。编码器内部转化流程和编码器之间的转化流程如下图所示:
图5 编码器内部以及之间的转化流程
2. 查看自注意力层的计算流程
Transformer中最重要的就是这个自注意力机制Self-Attention。Self-Attention主要用于计算当前词对所有词的注意力得分,整个流程如下:
图6 计算注意力得分整个流程
这里通过计算词"thinking"的注意力得分举例,详细分析步骤如下:
(1) 将编码器的输入x转化成三个向量
通过词向量x(1X512)和三个不同的权值矩阵