一文图解BERT注意力机制
2018年是自然语言处理领域的转折点,一系列深度学习模型在从问答到情感分类的NLP任务上取得了最先进的成果。
谷歌的BERT算法已经成为一种“一个模型来统治其他所有NLP模型”,基于其在各种各样的任务上的优异性能。
这篇文章通过可视化输出,尝试使用BertViz进行交互式演示。
https://github.com/jessevig/bertviz
BERT建立在两个关键思想的基础上,这两个思想是NLP最近取得的许多进展的原因:
- Transformer架构;
- 无监督预训练。
Transformer是一种序列模型,它放弃了RNN的递归结构,采用了完全基于注意力的方法,如经典的Attention Is All You Need中所述。
BERT也是预先训练的;它的权重是通过两个无监督任务提前学习的:Mask语言建模(在给定左右上下文的情况下预测丢失的单词)和下一个句子预测(预测一个句子是否跟随另一个句子)。
因此,BERT不需要为每个新任务从头开始训练。相反,它的权重可以通过微调优化下游任务。
BERT is a (multi-headed) model
Bert不像传统的注意力模型,它在RNN的隐藏状态上使用平面注意力结构。相反,BERT使用多层注意力(12层或24层,取决于模型),并且在每一层中包含多个注意力“头”(12层或16层)。
由于模型权重在层之间不共享,单个BERT模型有效地具有多达24 x 16 = 384个不同的注意力机制。
Visualizing BERT
由于BERT的复杂性,很难直观地理解其学习的权重的含义。深度学习模型通常是出了名的不透明,人们开发了各种可视化工具来帮助理解它们。
然而,我还没有找到一个可以阐明BERT正在学习的注意力模式的方法。还好Tensor2Tensor有一个很好的工具,可以在编码器-解码器Transformer模型中可视化注意力,所以我们使用BERT的PyTorch实现来使用BERT的架构。
该工具将注意力可视化为连接正在更新的位置(左)和正在关注的位置(右)的线条。
颜色标识相应的注意力头部,而线条粗细反映注意力分数。在工具的顶部,用户可以选择模型层,以及一个或多个注意力头(通过点击顶部的色块,代表12个头)。
What does BERT actually learn?
Sentence A: I went to the store.
Sentence B: At the store, I bought fresh strawberries.
BERT使用WordPiece标记化并插入特殊的分类器([CLS])和分隔符([SEP])标记,因此实际的输入序列是:[CLS] i went to the store。[SEP]At the store, I bought fresh strawberries.[SEP]
我们发现了一些相当独特和令人惊讶的直觉注意力模式。下面,我确定了六个关键模式,并为每一个模式显示了展示该模式的特定层/头部的可视化。
Pattern 1: Attention to next word
在这种模式中,特定位置的大部分注意力都集中在序列中的下一个标记上。下面我们看到一个例子,layer 2, head 0.(选定的头部由顶部颜色条中突出显示的正方形指示。
左边的图显示了所有标记的注意力,而右边的图显示了一个选定标记(“i”)的注意力。
在这个例子中,几乎所有的注意力都集中在“went”上,即序列中的下一个标记。
(左:所有标记的注意力权重。右:所选标记(“i”)的注意力权重)
在左边,我们可以看到[SEP]标记破坏了下一个标记的注意力模式,因为[SEP]的大部分注意力都指向[CLS]而不是下一个标记。
因此,这种模式似乎主要在每句话中起作用。这种模式与后向RNN有关,其中状态更新从右到左顺序进行。
模式1出现在模型的多个层上,在某种意义上模拟了RNN的周期性更新。
Pattern 2: Attention to previous word
在这个句型中,大部分注意力都集中在句子的前一个标记上。例如,“went”的大部分注意力都指向下图中的前一个单词“i”。
这个模式不像上一个那么明显;一些注意力也分散到其他标记上,特别是[SEP]标记。
与模式1一样,这与顺序RNN(在本例中为前向RNN)有松散的关系。
(左:所有标记的注意力权重。右:所选标记的注意力权重(“went”)
Pattern 3: Attention to identical/related words
在这种模式中,注意力集中在相同或相关的词上,包括源词本身。在下面的示例中,第一次出现的“store”的大部分注意力都指向它本身和第二次出现的“store”。
这种模式不像其他一些模式那样明显,注意力分散在许多不同的单词上。
(左:所有标记的注意力权重。右:所选标记(“store”)的注意力权重)
Pattern 4: Attention to identical/related words in other sentence
在这种模式中,注意力会集中在另一个句子中相同或相关的词上。例如,第二句中的“store”的大部分注意力都指向第一句中的“store”。
可以想象,这对下一个句子预测任务(BERT预训练的一部分)特别有帮助,因为它有助于识别句子之间的关系。
(左:所有标记的注意力权重。右:所选标记(“store”)的注意力权重)
Pattern 5: Attention to other words predictive of word
在这种模式中,注意力似乎被引导到其他词,这些词是源词的预测,不包括源词本身。
在下面的示例中,来自“straw”的大部分注意力都指向“##berries”,而来自“##berries”的大部分注意力都集中在“straw”上。
(左:所有标记的注意力权重。右:所选标记(“##berries”)的注意力权重)
这个模式不像其他一些那么明显。例如,大部分注意力都集中在一个标记([CLS])上,这是模式6的定义特征,下面将讨论。
Pattern 6: Attention to delimiter tokens
在这种模式中,大部分注意力都集中在[CLS]token或[SEP]token上。在下面的例子中,大部分注意力都集中在两个[SEP]tokens上。
正如本文所讨论的,这种模式是一种“无操作”:当注意力头在输入句子中找不到任何有意义的东西时,它会专注于[SEP]标记。
(左:所有标记的注意力权重。右:所选标记(“store”)的注意力权重)
参考:https://towardsdatascience.com/deconstructing-bert-distilling-6-patterns-from-100-million-parameters-b49113672f77