©PaperWeekly 原创 · 作者|蔡杰
学校|北京大学硕士生
研究方向|问答系统
近年来预训练模型(ELMo, GPT, BERT, XLNet, ALBERT 等)给许多 NLP 任务带来了显著的改进,但是有一个问题一直困扰着大家:被当做黑盒的神经网络到底是如何做的以及为什么会这样做?
最近,人们对解决这个谜团越来越感兴趣,就此,我将最近看的一些相关论文进行总结,希望可以和大家一起探讨学习。
引言
在正式介绍论文之前,先给大家简单介绍一下目前比较主流的分析方法:
Analyse Pre-trained Model
我们都知道预训练(pre-train)方法因为数据量巨大需要消耗大量的计算资源,那这么多计算资源最后都变成了啥?或者说在整个pre-train的过程中,模型到底学到了什么能力?以下的 pre-train model 以 BERT 为例。
Probing tasks:一般做法是设计一些简单的分类任务(一种任务包含一种特定的语言学信息),将 BERT 每一层的输出作为 embedding,在得到 embedding 后通过简单的分类器(例如一层的 FFN,为了不过多干扰模型本身的能力),来验证模型的不同层在不同 probing task 上的能力。
Visualization:我们都知道 BERT 是由多层 Transformer 构成的,每一层 Transformer 都有一个 multi-head self-attention 模块。在这个模块中,每个 word 和其他所有 word 都会有交互,从而得到一个注意力(attention)分数,通过可视化这个分数,可以知道在不同层,甚至不同 head 中,不同的 word 关注的部分。还有的做法是将不同层的特定词 embedding 做聚类,同样也可以了解模型不同层的能力。
Analyse Fine-tuned Model
目前 NLP 许多任务的 SOTA 都是通过微调(fine-tune)预训练(pre-train)的模型达到的。那么问题来了,在 Fine-tune 的过程中,模型又学到了什么能力?
在这一部分同样有 Probing tasks 和 Visualization 两种做法,而且做法同上述方法类似,只是将 pre-train 的 model 作为对比对象。
Adversarial attacks:对于fine-tuned model,对抗性攻击是一种新做法。对抗性攻击通过使用特定干扰信息创建的例子来验证模型的鲁棒性。具体例子请见之后的论文。
Pre-trained model Analysis
1. Probing tasks Method
论文标题:Open Sesame: Getting Inside BERT’s Linguistic Knowledge
论文来源:ACL 2019
论文链接:https://arxiv.org/abs/1906.01698
引言
本文在尝试解释 BERT 上主要做了两件事:
通过设计 probing tasks 来证明 BERT 在 pre-train 之后得到的 word embeddings 包含语法信息;
提出了基于 attention 的对主谓一致和共指消解问题的评价分数,根据 self-attention 来确定 BERT 对语言相关元素的关注程度。
实验1
设计了三个 probing tasks 分别是识别一句话中的助动词、主语名词以及第 n 个 token。
Training 和 Development 集合是原有数据集。Generalization 集合是根据一些语法规则(加了一些从句,名词替换为复合名词或所有格名词等)在 Training 和 Development 基础上生成的。Generalization 集合才是最后实验的数据。
之后实验获取 BERT 每一层的 embedding,每一层都训练一个简单的分类器,这样每个 token 都有一个结果(如下图)。label 是一个 one-hot 向量,使用交叉熵作为损失函数。
结果1
Figure 1 在第 4 层突然准确率变得很高,作者认为是因为浅层特征是一个高度 localized 的特征,包含的句子上下文信息不足以确定 main auxiliary。随着 self-attention 的作用,层数加深,信息变得越来越抽象,到 4-6 层左右正好能足够表示 main auxiliary,之后层数再加深,信息变得更抽象,导致 acc 有所下降。
在复合名词的分类任务(Figure 2 是复合名词的结果)中,large 的效果就要差很多了。base 上的效果很好,作者认为是由于主语名词特征的显著性。至于为什么 large 效果很差,作者也没有给出很好的解释。
在所有格问题(Figure 3 是所有格名词的结果)上,base 和 large 的表现都很差,作者认为是是所有格的歧义性导致的(she's sleeping 中的 's 可能表示的是所有格关系,也有可能表示的是 is 的缩写)。
N_th token(Figure 4 是 N_th token 的结果)对比了两个 baseline,一个是 pre-embedding,另一个是 pre-embedding 去掉 position-encoding,可以看到 1-3 层判断 2-9 位置的准确率都还是挺高的,其余的准确率随层数增加而降低。没有 position-encoding 的在第一层就很低,表明 BERT 的 position 信息主要来源于 position-encoding。
之所以在 4 层之后会下降有可能是因为舍弃了位置信息,转而获得一些抽象的层次信息。而 position 1-3 的准确率随着层数增加一直没有下降,作者认为这有可能是因为自然语言分布的特性造成的,句子开头的词性可能是固定的,但是随着句子长度的增加,词性的类别就不固定了。
实验2
主谓一致和共指消解都具有一个先行词(trigger)元素,比如判断谓词(target)的时候需要先知道主语,共指消解的时候也得先知道后面的词指代的是什么。但是如果这个先行词有多个,就可能导致模型不知道那个先行词才是正确的。因此作者提出了一个叫“confusion score”的概念,定量地表示一句话给模型带来的混淆程度。
由 Table 2 可知,上半部分是主谓一致的 example,下半部分是共指消解的 example。
A1 和 A2 是带有介词短语的 example,A3 和 A4 是带有关系从句的 example,有论文指出带有介词短语的句子要比带有关系从句的句子更难处理,因此 A1 和 A2 的 score 要更高,而 A1 和 A3 中的“dog”和“the cat”一样都是可以接“does”的,而 A2 和 A4 的“dogs”是不能接“does”的,所以 A2 和 A4 的 score 要比 A1 和 A3 低。
对于共指消解问题,作者同样在插入了一些 distractor,比如 R1,“the lord”是先行词,但是“the wizard”的语法同样正确,但是 R2 中的语法就不对了,所以 R2 的 score 比 R1 低。R3 和 R4 在关系从句中插入了 distractor,因为如果“himself”共指了关系从句中的 distractor 的话语法是不正确的,所以分数要比 R1 和 R2 低。R5-R8 包括相对修饰语,宾语名词短语,分数普遍要高很多。
接下来就讲讲这个 confusion score 是怎么计算的:作者根据两种语法现象(主谓一致和反身回指)设计了通过 self-attention 来确定 BERT 对语言相关元素的关注程度。
首先先计算一个 attention_score,token 可能包含多个 word(比如 Table 2 里的 the lord),相当于让每个 word 都和 Y 计算 attention,这里的 attn 函数就是 self-attention 计算的值。求和之后再在 head 层面上求和取平均,得到每个 token 对 target 的 attention。
之后根据上式得到“confusion score”。
结果2
Figure 5 和 Table 3 显示了共指消解的混淆程度与层深度的负相关。主谓一致性的混淆分数呈现出相似的趋势。作者推测 BERT 随着层数的加深,包含的信息也更抽象。还有就是作者观察到的 BERT 的自我注意值对语法扭曲的敏感性表明,BERT 的句法知识实际上被编码在其注意力矩阵中。
最后,值得注意的是,对于共指消解和主语动词一致的混淆在第 4 层增加,而在 N_th token 的实验中,正好也是第 4 层之后结果开始下降。作者为未来留下了一个对这两者之间联系的伏笔。
2. Visualization Method
论文标题:What does BERT look at? An Analysis of BERT’s Attention
论文来源:ACL 2019
论文链接:https://arxiv.org/abs/1906.04341
引言
本文主要通过可视化 BERT 的 attention 层,以了解 BERT 的 attention 层都在关注什么地方,发现有很多 attention 集中在 [CLS] 和 [SEP] 符号上。文章还通过实验得出不同的 multi-head 中不同的 head 关注的是不同的语法现象。此外文章也实验了融合多个 head,得出模型关于语法整体的建模程度。
实验
Surface-Level Patterns in Attention
作者通过可视化 attention 的权重,得到了几种不同的 attention 的 pattern。如 Figure 1 所示,有的 attention 是 broadly 形式(关注所有的词),有的 attention 是关注的是其下一个 token,有的 attention 则集中关注 [SEP] 符号上,还有的 attention 则关注标点符号。
Attending to Separator Tokens
作者在分析 attention 的过程中发现一个很有趣的现象。在 6-10 层,有超过一半的 attention 关注的是 [SEP](Figure 2 的上图),一开始作者的想法是 [SEP] 用于聚合段与段之间的信息,方便后面的 head 去获取信息。
如果假设成立的话,那 [SEP] 关注的信息应该是整句话,但是 Figure 2 的下图表明,90% 以上的 [SEP] 关注的是他们自身,所以作者又推测,指向 [SEP] 很可能是一种“no-op”(无作用)的操作。
为了进一步验证以上的假设,作者又采用了一种基于梯度的可以衡量特征重要性的方法(Sundararajan et al., 2017) 简单地说,这个值的大小意味着将注意力转移到 token 上会多大程度改变 BERT 的输出。Figure 3 中可以看到,在 5 层之后,[SEP] 的梯度就基本下降到 0,说明这个时候给 [SEP] 或多或少的 attention 都改变不了模型的输出,进一步验证了作者“no-op”的结论。
Figure 4 是作者计算每一层的 attention 的熵值,可以看到低层的熵值比较大,说明在低层模型更偏向于 broadly 的 attention 方式,基本上每个单词在其余每个单词上的 attention 只有 10%,对 [CLS] attention 的熵值分布也和 Figure 4 类似,最后一层有较高的熵值,因为这层的 [CLS] 聚合了之前的所有信息,之后用于 next-sentence prediction 任务中。
看看每个attention head都学到了什么
上图是直接宾语,名词修饰语的例子。除此之外,作者还例举了好几种例子,在这里就不一一列举了,感兴趣的读者可以去看论文。
接下来作者在 Penn Tree bank 的数据集上做了统计,每个词都有一个 dependency。为了测试 BERT 中对词与词的 dependency 的建模程度,作者直接把 attention map 拿了出来,把每个词给了最多 attention 的词作为 dependency,baseline 的话就是把括号内的数字(正数表示右边第几个词,负数则表示左边第几个词)对应的 word 作为 baseline,可以看到 BERT 还是学到了很多 dependency 的信息的。
作者还做了一个共指消解的任务,在句子中找出给定词之前的 antecedent。发现某一个 head 的正确率在 65% (neural supervised model 是 83%)。
Fine-tuned Model Analysis
1. Adversarial attacks
论文标题:What does BERT Learn from Multiple-Choice Reading Comprehension Datasets?
论文链接:https://arxiv.org/abs/1910.12391
引言
目前最新模型已经在多个 MCRC 数据集上实现了 SOTA。然而,作者认为这样的表现可能并不能反映模型真正的语言理解和推理能力。在这项工作中,作者采用了两种方法来研究 BERT 从 MCRC 数据集中学到了什么:
不可读的数据攻击:添加一些不可读数据来混淆 BERT,误导其作出错误的判断;
不可回答的训练数据:增加不可回答的训练数据或者洗牌 examples 来训练 BERT。
实验
不可读的数据攻击
Un-Readable Data Attack(不可读数据攻击)例子,在原始的文章结尾加上一句乱序的话(这句话由原始问题和错误选项拼接而成),该方法就是 Figure 2 中的 (a)。
作者探索了三种对抗攻击方法(Figure 2 (a),(b),(c),详细的例子请见论文),通过在文章或原始干扰源(错误的选项)中添加额外的干扰信息来测试模型的鲁棒性。对抗性攻击的目标是操纵输入,误导模型做出错误的预测,而人类在这些攻击下仍然能够选择正确的答案。
不可回答的训练数据
通过用不可回答的数据来训练 BERT(Un-Answerable Data Training),从这些数据中,人类可以学到一些关于如何回答问题的知识。
Figure 4 中文章(passage)的次顺序被打乱了(P-Shuffle),变成了不可读的数据。作者还尝试了另外两种方法:
打乱 question 中的词序(Q-Shuffle)
既打乱 passage 的词序,也打乱 question 的词序(PQ-Shuffle)
作者同样尝试了删除整个 passage (P-Remove),删除整个 question (Q-Remove) 以及删除 passage 和 question (PQ-Remove)。
结果
不可读的数据攻击
顶端的两行分别是随机猜测的结果和正常训练 BERT 的结果。
我们可以看到几乎所有的数据集上 BERT 的性能都显著下降,而且对于某些数据集,BERT 的性能甚至低于随机猜测。这意味着 BERT 无法检测出正确的词序和语法,严重依赖于关键词匹配。
不可回答的训练数据
我们可以看到在所有这些设置上训练的 BERT 比“Random Guess”和“Longest Baseline”要好得多,“Longest Baseline”总是选择最长的答案作为预测。而且 BERT 在“P-Shuffle”设置下进行训练,随机地对训练集中的所有段落单词进行洗牌,甚至可以获得与原始完全训练设置非常接近的性能,特别是在 MCScript 和 MCScript2.0 数据集上。
进一步比较“P-Shuffle”和“P-Remove”,我们会发现,尽管被洗牌的段落没有遵循正确的语法,不再是可解释的,但它仍然比删除整个段落要好。通过比较“Q-Shuffle”和“Q-Remove”、“PQ Shuffle”和“PQ Remove”,也可以发现类似的结论。
那么说明 BERT 仍然可以从无序输入中学习,这表明它对词序或句法信息不敏感。
小结
以上论文解读更多的是希望给大家了解该领域的进展,以及在该领域中大家的普遍做法,涉及到结论性的内容还得具体细看论文,欢迎大家共同学习交流。
相关论文推荐
Pre-trained model Analysis
论文标题:What do you learn from context? Probing for sentence structure in contextualized word representations
论文来源:ICLR 2019
论文链接:https://arxiv.org/abs/1905.06316
论文标题:BERT Rediscovers the Classical NLP Pipeline
论文来源:ACL 2019
论文链接:https://arxiv.org/abs/1905.05950
Fine-tuned Model Analysis
论文标题:How Does BERT Answer Questions? A Layer-Wise Analysis of Transformer Representations
论文来源:CIKM 2019
论文链接:https://arxiv.org/abs/1909.04925
点击以下标题查看更多往期内容:
抛开约束,增强模型:一行代码提升ALBERT表现
浅谈Knowledge-Injected BERTs
从 Word2Vec 到 BERT
后 BERT 时代的那些 NLP 预训练模型
从三大顶会论文看百变Self-Attention
自然语言处理中的语言模型预训练方法
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
???? 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
???? 投稿邮箱:
• 投稿邮箱:[email protected]
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
????
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。
▽ 点击 | 阅读原文 | 获取最新论文推荐