trackIn是一种模型解释的方法,可用于评价每一个样本对模型的贡献度,通常可用于找出训练样本中,标注错误的样本。

本篇post以Bert QA问题为切入,研究一下这个问题。

QA问答系统

问答系统的类型有许多种,目前研究比较多的抽取式QA,目前认同度最大的数据集是SQuAD。抽取式QA的pipeline是,给定一篇文章,与这个文章对应着一些问题,抽取式QA从文章中选择出正确的答案,通常是确定答案的起始以及终止位置,基本框架如下:

image-20200311010615222

即【问题,文章】-> 【抽取式QA】 ->【答案的收尾位置】

Embedder:对词进行embedding

Encoder:分别对问题和文章用LSTM进行建模。

Interaction Layer:各种Attention机制花式结合问题和文章,对问题和文章进行交互,在原文上得到query-aware的文章表示。(差别主要在这一部分)

Answer Layer:用query-aware的文章表示来预测答案,一般是用两个网络分别预测答案起止位置,或者直接对文章进行答案标注。

一些比较有名的模型:Match-LSTMBiDAFFastQAExtR-NET

本文从huggingface提供的bert-Squad pretrain model入手,可选择的模型有:BERT/RoBERTa/XLNet/XLM

SQuAD

image-20200311010632954

(图片引用:https://www.cnblogs.com/xuehuiping/p/12262700.html)

SQuAD的指标

EM:exact match,即预测结果完全匹配占所有结果的百分比

F1: F1的选取是question预测结果与所有GT的最大F1,最终的F1为所有question的平均。
$$
F_1 = 2 \frac{precisionrecall}{precision + recall}
$$

transformer

transformer结构如下所示,是一个由encoder和decoder组成的模块,其中encoder和decoder的数量为Nx个。

image-20200311155847088

一个transformer有6个encoder,decoder组成,如下:

image-20200311160905424

NLP回归模型

经典的NLP问题通常为自回归语言模型:单方向预测,只能根据上文预测下文,或下文预测上文。经典的网络有GPT,ELMO。另一种为自编码语言模型:通过在输入的X中随机mask掉一些词,通过上下文的单词来预测这些被mask掉的词。这也有一个缺点,就是在输入侧引入了【mask】,导致预训练阶段和fintune阶段不一致的问题,这种类型的网络有Bert以及Bert类似的网络。

Bert

image-20200311165643576

bert结构如上,采用的是MASK双向的语言模型,规则是随机选择15%的词,在这15%的词中间,只有80%真正被替换成[mask]标记,10%被随机替换成另外一个单词,10%不做改动。

Bert的缺点:它在预训练中使用了[MASK],但是这种人为的符号在finetune的时候在实际数据中时没有的,导致了预训练 — finetune的不一致。[MASK]的另一个缺点是它假设所预测的(mask掉的)token是相互独立的,给出的是未掩码的tokens。

XLNet

XLNet基于以上两点,目前是使用自回归语言模型从左到右的方法,并且在引入MASK还要上下文的语义,学习双向的上下文信息。

在预训练阶段,引入Permutation Language Model的训练目标,直接的想法就是对句子进行排列组合,然后选择部分的组合输入到模型中,这样任意位置上的词就能看到它的上下文了。

image-20200311121638110

直观上来说,,他的做法是当前预测到T位置,从句子中随机选择T-1个数,放到T的前面,作为预测T位置元素来使用,其他词通过掩码隐藏掉。

双流自注意力机制:1)内容流自注意力,其实就是标准的Transformer的计算过程;2)Query流自注意力,例如预测x3的值,query流直接忽略掉x3输入了,只保留这个位置信息,用参数w来代表位置的embedding编码。

image-20200311201431222

attention mask的含义如上右边,输入还是1,2,3,4,mask表中,每一列存在的值表示能看到的位置,其中内容流能看到自身信息,但是查询流看不到自身的信息。

UNILM

由于mask的训练方式对生成式的任务效果不好,对理解式的任务有着较好的性能,因此UNILM希望从训练方式上做创新,得到一个能够处理生成任务和理解任务的模型。

UNILM的预训练基于三个目标:单向LM(左到右和右到左),双向LM,sequence2sequence LM。

该模型采用一个共享参数的Transformer网络的同时还使用了特定的self-attention masks用以控制预测时候所用到的上下文信息。模型结构如下:

image-20200311214538762

作者通过自动self-attention masks掩码的方式,来选择输入token的上下文,然后在训练阶段,每个batch训练的时间分别为1/3。

RoBERTa

1)动态Masking,相比于静态,动态Masking是每次输入到序列的Masking都不一样;

2)移除next predict loss,相比于BERT,采用了连续的full-sentences和doc-sentences作为输入(长度最多为512);

3)更大batch size,batch size更大,training step减少,实验效果相当或者更好些;

4)text encoding,基于bytes的编码可以有效防止unknown问题。另外,预训练数据集从16G增加到了160G,训练轮数比BERT有所增加。

GLUE

通常来说,NLP可以分为自然语言理解(NLU)和自然语言生成(NLG)。在NLU方面,我们拿时下最流行的GLUE(General Language Understanding Evaluation)排行榜举例,其上集合了九项NLU的任务,分别是

  • CoLA(The Corpus of Linguistic Acceptability):纽约大学发布的有关语法的数据集,该任务主要是对一个给定句子,判定其是否语法正确,因此CoLA属于单个句子的文本二分类任务;
  • SST(The Stanford Sentiment Treebank),是斯坦福大学发布的一个情感分析数据集,主要针对电影评论来做情感分类,因此SST属于单个句子的文本分类任务(其中SST-2是二分类,SST-5是五分类,SST-5的情感极性区分的更细致);
  • MRPC(Microsoft Research Paraphrase Corpus),由微软发布,判断两个给定句子,是否具有相同的语义,属于句子对的文本二分类任务;
  • STS-B(Semantic Textual Similarity Benchmark),主要是来自于历年SemEval中的一个任务(同时该数据集也包含在了SentEval),具体来说是用1到5的分数来表征两个句子的语义相似性,本质上是一个回归问题,但依然可以用分类的方法做,因此可以归类为句子对的文本五分类任务;
  • QQP(Quora Question Pairs),是由Quora发布的两个句子是否语义一致的数据集,属于句子对的文本二分类任务;
  • MNLI(Multi-Genre Natural Language Inference),同样由纽约大学发布,是一个文本蕴含的任务,在给定前提(Premise)下,需要判断假设(Hypothesis)是否成立,其中因为MNLI主打卖点是集合了许多不同领域风格的文本,因此又分为matched和mismatched两个版本的MNLI数据集,前者指训练集和测试集的数据来源一致,而后者指来源不一致。该任务属于句子对的文本三分类问题。
  • QNLI(Question Natural Language Inference),其前身是SQuAD 1.0数据集,给定一个问句,需要判断给定文本中是否包含该问句的正确答案。属于句子对的文本二分类任务;
  • RTE(Recognizing Textual Entailment),和MNLI类似,也是一个文本蕴含任务,不同的是MNLI是三分类,RTE只需要判断两个句子是否能够推断或对齐,属于句子对的文本二分类任务;
  • WNLI(Winograd Natural Language Inference),也是一个文本蕴含任务,不过似乎GLUE上这个数据集还有些问题;