©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 向量,使用交叉熵作为损失函数。