资源经验分享解构 BERT:从 1 亿个参数中提炼出 6 个模式

解构 BERT:从 1 亿个参数中提炼出 6 个模式

2020-03-06 | |  71 |   0

原标题: 解构 BERT:从 1 亿个参数中提炼出 6 个模式

来源:AI研习社     链接:http://cloud.tusaishared.com.cn/resources/detail.do?id=19687


2018年是自然语言处理领域的一个转折点,一系列深度学习模式在从问答到情感分类的自然语言处理任务上取得了最新的成果。最近,Google的BERT算法出现了一种“一个模式来统治所有”局面,因为这个模型在各种任务上取得了卓越性能。

1583465101106334.png


        BERT建立在两个关键思想的基础上,这两个思想对NLP的许多最新进展具有贡献:(1)transformer结构 和(2)无监督的预训练。transformer是一个序列模型,它放弃了RNN的递归结构,而采用完全基于attention的方法,attention在经典论文attention is All You Need中描述的很详尽。BERT也是预先训练的;它的权重是通过两个无监督任务预先学习到的:掩码双向语言模型(MLM, masked language modeling)和 下句预测任务(NSP, next-sentence prediction)。因此,对于每个新任务,BERT不需要从头开始训练;相反,它的权重是经过微调的。有关Bert的更多细节,请查看博文The Illustrated Bert.。


BERT是一个  (多头) 野兽

       Bert不像传统的attention模型,传统的attention在RNN的隐藏状态上使用平坦的attention结构。相反,BERT使用了多个attention层次(12或24取决于模型),并且在每一层(12或16)中也包含了多个attention “heads”。由于模型权重不在层之间共享,因此一个BERT模型有效地具有多达24x 16=384个不同的attention机制。


Bert可视化

      由于BERT的复杂性,很难直观地了解其学习权重的含义。深度学习模型通常是众所周知的不透明的模型,并且已经开发了各种可视化工具来帮助理解它们。然而,我还没有找到一个能揭示Bert正在学习的attention模式的方法。幸运的是,Tensor2Tensor在编码器-解码器 transformer模型中有一个很好的可视化attention工具,所以我使用PyTorch实现的BERT对其进行了修改,使其与BERT的体系结构协同工作。调整后的界面如下所示,您可以使用Github上的notebooks自己运行。

02.png

该工具将注意力可视化为连接正在更新的位置(左)和正在处理的位置(右)的线。颜色表明了注意力头的关系,而线条粗细则反映注意分数。在工具的顶部,用户可以选择模型层,以及一个或多个attention 头(通过单击顶部的色块,表示12个attention头)。


Bert实际是在学习什么?

        我使用这个工具来探索预训练的BERT模型(the BERT-Base, uncased version)的各个层/头的注意模式。我尝试了不同的输入,但出于演示目的,我只使用以下输入:

句子 A: I went to the store.

句子 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]

我发现了一些相当独特和令人惊讶的直观的注意力模式。下面我确定了六个关键模式,对于每一个,我展示了该模式的特定层/头部的可视化效果。


模式1:下一词注意力

在这个模式中,在一个特定位置上的大部分注意力被指向序列中的下一个标记。下图是第2层头部0的一个例子。(所选头部由顶部颜色栏中突出显示的正方形指示。)左侧的图形显示所有标记的注意力,而右侧的图形显示一个所选标记的注意力(“i”)。在本例中,几乎所有的注意力都指向了序列中的下一个标记“went”。

1583465181976585.png

模式 1: 下一词注意力模式. 左: 所有标记的注意力权重. 右: 标记"i"的选择权重

在左边,我们可以看到[SEP]标记扰乱了下一词的注意力模式,因为[SEP]的大部分注意力都指向了[CLS]而不是下一个标记。因此,这种模式似乎主要在每个句子中起作用。

此模式与后向RNN相关,后者从右到左依次进行状态更新。模式1出现在模型的多个层上,在某种意义上模拟了RNN的递归更新。

模式2:前一个词注意力模式

在这种模式中,大部分注意力都集中在句子的前一个词上。例如,“went”的大部分注意力都集中在下图中的前一个单词“i”。这个模式没有上一个那么明显;一些注意力也分散到其他词上,特别是[SEP]标记。与模式1一样,这与顺序RNN(在本例中是前向RNN)弱相关。

1583465202657657.png

模式 2: 前一词注意力.左侧:词的注意力权重。右侧:went的选择权重 

模式3:相同或相关词注意力

在这个模式中,注意力集中在相同或相关的词上,包括源词本身。在下面的例子中,第一次出现“store”的大部分注意力都指向它本身和第二次出现“store”。这种模式不像其他模式那样明显,注意力分散在许多不同的单词上。

1583465228174731.png

模式3:相同或相关词的注意力;左侧:所有词的注意力权重;右侧:store的选择注意力权重

模式4:其他句中相同或相关词注意力模式

在这个模式中,注意力在另一个句子中相同或相关的词。例如,第二句中“store”的大部分注意力都集中在第一句中的“store”上。可以想象这对下一个句子预测任务特别有帮助,因为它有助于识别句子之间的关系。

1583465246295073.png

模式5:其他预测词的注意力

在这个模式中,注意力似乎被指向其他能够预测源词的词,而不包括源词本身。在下面的例子中,“straw”的大部分注意力都集中在“##berries”上,“##berries”的大部分注意力集中在“straw”上。

1583465468607321.png

这种模式没有其他模式明显。例如,大部分注意力都集中在分隔符标记([CLS]),这是下面讨论的模式6的定义特征。


模式6:定界符标记注意力

在这个模式中,大部分注意力都集中在定界符标记上,[CLS]标记或[SEP]标记。在下面的示例中,大部分注意力都集中在两个[SEP]标记上。正如本文所讨论的,这种模式是一种“no-op”:当在输入句子中找不到任何有意义的东西时,注意力集中在SEP标记上。

08.png

模式6:定界符标记注意力;左侧:所有词的注意力权重;右侧:store选择词的注意力权重

说明:

有人说,数据可视化有点像Rorschach测验:我们的解释可能会被我们自己的信念和期望所影响。虽然上面的一些模式是非常明显的,但也有一些模式是主观的,因此这些解释只能作为初步观察。


另外,以上6种模式描述了BERT的粗略注意结构,并没有试图描述注意可能捕获的语言模式。例如,在模式3和模式4中有许多不同类型的“关系”,例如同义词、共指等。看看不同的注意力集中在不同类型的语义和句法关系可能很有趣。

试试看!

可视化工具可以在Github找到。玩耍起来,分享你的发现。


未来阅读:

在第2部分中,我扩展了可视化工具,以展示BERT是如何形成其独特的注意模式的。在我最近的一篇文章中,我探讨了OpenAI的新文本生成器GPT-2。

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:如何从 Matlab 过度到 Python

下一篇:实例讲解Python魔术方法

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...