Masque论文笔记

2022/1/10 23:08:37

本文主要是介绍Masque论文笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Multi-Style Generative Reading Comprehension

这是2019年发表在ACL的一篇文章,与前面所读的几篇RC、QA文章不同,这篇文章关注的是生成式的RC模型,并且引入多风格的答案生成。

Overview

以往的QA模型通常是抽取式的,即从passage中抽取出一段区间作为预测答案(span prediction),因此这篇文章希望设计出一种生成式的模型,并且希望通过单个模型生成不同风格的答案。这里的不同风格我的理解是传统QA基于span抽取的和语言模型进行生成的这两种风格,通过本文提供的例子可以直观感受一下

在这里插入图片描述

这里作者标注了Q&A和NLG,因此这应该就是本文所谈到的不同风格的答案。

本文的主要贡献有两个:

  1. Multi-source abstraction summarization:多源摘要,使用指针生成器机制从问句、多段落中生成多样化风格的答案,并扩展至Transformer,允许生成器从词表,或从问句、段落原文中以复制方式生成答案。
  2. Multi-style learning for style control and transfer:多风格学习,控制答案输出样式,满足RC所有形式输出,引入风格化的人工token扩展指针生成器为条件解码器,给定风格下,每一步解码控制三个分布占解码输出的权重。

总体来说,这篇文章所提出的方法是很新颖的,但是也的确比较不好理解。

Task Description

本文采用的是MS Masco数据集,所作的任务是:给定一个问题和多个段落,模型生成一段答案。训练数据是一个六元组: ( x q , { x p k } , s , y , a , r p k ) (x^{q},\{x^{p_{k}}\},s,y,a,r^{p_k}) (xq,{xpk​},s,y,a,rpk​): s s s表示答案风格,生成的答案风格控制; a ∈ { 0 , 1 } a \in \{0,1\} a∈{0,1}表示问题是否可回答; r p k ∈ { 0 , 1 } r^{p_{k}} \in \{0,1\} rpk​∈{0,1}表示该段落是否对答案有贡献

Model Architecture

模型主要分为四大部分:

  1. Passage-Question Reader:说白了就是encoder
  2. Passage Ranker:用于计算不同段落的重要度,参考PageRank
  3. Answer Possibility Classifier:用于判断问题是否有答案
  4. Answer Sentence Decoder:说白了就是decoder

作者管他们的模型叫Masque

在这里插入图片描述

Passage-Question Reader

这个部分有点类似QANet中encoder的结构,也是分为四个子模块:

  1. Word Embedding
  2. Shared Encoder Block
  3. Dual Attention
  4. Modeling Encoder Block

Word Embedding

词向量本文采用的是Glove+ELMo,其中ELMo代替了positional embedding的作用,然后作者又把这两种word embedding输入两层highway network中进行融合。

Shared Encoder Block

采用Transformer的encoder block,做multi-head self-attention,passage和question共享,分别得到 E p k ∈ R d × L E^{p_{k}}\in R^{d \times L} Epk​∈Rd×L和 E q ∈ R d × J E^{q} \in R^{d \times J} Eq∈Rd×J

Dual Attention

这一部分用于计算P2Q和Q2P的双向attention。首先计算similarity score,得到相似度矩阵 S p k ∈ R L × J S^{p_{k}} \in R^{L \times J} Spk​∈RL×J
S l j p k   =   w α T [ E l p k ; E j q ; E l p k ∘ E j q ] S^{p_{k}}_{lj} \ =\ w^{T}_{\alpha}[E^{p_{k}}_{l};E^{q}_{j};E^{p_{k}}_{l} \circ E^{q}_{j}] Sljpk​​ = wαT​[Elpk​​;Ejq​;Elpk​​∘Ejq​]
接着分别对row和column做softmax得到attention weights
A p k   =   s o f t m a x j ( S p k T )                 B p k   =   s o f t m a x l ( S p k ) A^{p_{k}}\ =\ softmax_{j}({S^{p_{k}}}^{T}) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ B^{p_{k}}\ =\ softmax_{l}(S^{p_{k}}) Apk​ = softmaxj​(Spk​T)               Bpk​ = softmaxl​(Spk​)
接下来作者借鉴DCN来计算Dual Attention:
G q → p k   =   [ E p k ; A ˉ p k ; A ^ p k ; E p k ∘ A ˉ p k ; E p k ∘ A ^ p k ] G p → q   =   [ E q ; B ˉ ; B ^ ; E q ∘ B ˉ ; E q ∘ B ^ ] G^{q \rightarrow p_{k}}\ =\ [E^{p_{k}};\bar{A}^{p_{k}};\hat{A}^{p_{k}};E^{p_{k}}\circ \bar{A}^{p_{k}};E^{p_{k}} \circ \hat{A}^{p_{k}}]\\ G^{p \rightarrow q}\ =\ [E^{q};\bar{B};\hat{B};E^{q}\circ \bar{B};E^{q} \circ \hat{B}]\\ Gq→pk​ = [Epk​;Aˉpk​;A^pk​;Epk​∘Aˉpk​;Epk​∘A^pk​]Gp→q = [Eq;Bˉ;B^;Eq∘Bˉ;Eq∘B^]
我们分别解释公式中的这几个量:

  1. A ˉ p k \bar{A}^{p_k} Aˉpk​: E q A p k E^{q}A^{p_{k}} EqApk​,表示段落各位置的问题context向量
  2. B ˉ p k \bar{B}^{p_{k}} Bˉpk​: E p k B p k E^{p_{k}}B^{p_{k}} Epk​Bpk​,表示问题各位置的问题context向量
  3. A ^ p k \hat{A}^{p_{k}} A^pk​: B ˉ p k A p k \bar{B}^{p_{k}}A^{p_{k}} Bˉpk​Apk​,表示query-aware的文章各位置context向量
  4. B ^ p k \hat{B}^{p_{k}} B^pk​: A ˉ p k B p k \bar{A}^{p_{k}}B^{p_{k}} Aˉpk​Bpk​,表示passage-aware的问题各位置context向量
  5. B ˉ \bar{B} Bˉ: m a x k B ˉ p k max_{k} \bar{B}^{p_{k}} maxk​Bˉpk​
  6. B ^ \hat{B} B^: m a x k B ^ p k max_{k}\hat{B}^{p_{k}} maxk​B^pk​

Modeling Encoder Block

这里依然是stack几层encoder block,passage堆叠5层,query堆叠2层,最终得到 M p k ∈ R L × d M^{p_{k}} \in R^{L \times d} Mpk​∈RL×d和 M q ∈ R J × d M^{q} \in R^{J \times d} Mq∈RJ×d

Passage Ranker

passage ranker是用来评估每个段落的重要程度,在后面decoder部分会用到。作者取每个 M p k M^{p_{k}} Mpk​的第一个token向量(也就是 M 1 p k ∈ R d M_{1}^{p_k} \in R^{d} M1pk​​∈Rd)来计算
β p k   =   σ ( w r M 1 p k ) \beta^{p_k}\ =\ \sigma(w^{r}M_{1}^{p_{k}}) βpk​ = σ(wrM1pk​​)
使用sigmoid的原因是我们只需要0或1的输出来判断该段落是否有用。

Answer Possibility Classifier

这一层是用来判断该问题是否能够被回答,作者将每个段落的第一个token向量concat起来,乘一个向量,然后再用sigmoid激活:
P ( a )   =   s i g m o i d ( w c [ M 1 p 1 ; M 1 p 2 ; …   ; M 1 p k ] ) P(a)\ =\ sigmoid(w^{c}[M^{p_{1}}_{1};M^{p_{2}}_{1};\dots;M^{p_{k}}_{1}]) P(a) = sigmoid(wc[M1p1​​;M1p2​​;…;M1pk​​])

Answer Sentence Decoder

decoder同样分为四个子模块:

  1. Word Embedding
  2. Decoder Block
  3. Multi-source Pointer-Generator
  4. Combined Attention

Word Embedding

与Encoder相同,但是ELMo采用单向,因为这一部分要做生成

Decoder Block

与Transformer的Decoder Block结构相同,有一点变化是在Encoder-Decoder attention部分,我们要分别将answer与query和passage做self-attention,对于answer-passage attention,作者将encoder部分得到的 M p k M^{p_{k}} Mpk​拼接起来得到 M p a l l = [ M p 1 ; M p 2 ; …   ; M p k ] M^{p_{all}}=[M^{p_{1}};M^{p_{2}};\dots;M^{p_{k}}] Mpall​=[Mp1​;Mp2​;…;Mpk​]再去做attention。这一层得到的输出是一个生成的答案序列 [ s 1 , s 2 , … , s T ] [s_1,s_2,\dots,s_T] [s1​,s2​,…,sT​]

Multi-source Pointer-Generator

这一部分就是overview里所说的允许模型从词库、问题和段落中复制来作为答案,而这一部分得到的输出也是passage、query和decoder自身三部分加权得到的结果。

Extend Vocabulary

首先作者对词库进行扩充,新词库包含词典中常见词、所有query中的词和所有passage中的词。令 P v ( y t ) P^{v}(y_{t}) Pv(yt​)表示答案中第 t t t个单词的概率分布,计算公式为:
P v ( y t )   =   s o f t m a x ( W 2 ( W 1 s t + b 1 ) ) P^{v}(y_t)\ =\ softmax(W^2(W^1s_t+b^1)) Pv(yt​) = softmax(W2(W1st​+b1))
W 1 W^1 W1和 b 1 b^1 b1是可训练的参数, W 2 ∈ R d w o r d × V e x t W^2 \in R^{d_{word} \times V_{ext}} W2∈Rdword​×Vext​

Copy Distribution

作者认为传统的随机选取一个注意力头来复制分布效果并不好,本文选择再添加一层attention来进行copy distribution:
e l p k   =   w p T t a n h ( W p m M l p k + W p s s t + b p ) α t p   =   s o f t m a x ( [ e p 1 ; e p 2 ; …   ; e p k ] ) c t p   =   ∑ l α t l p M l p a l l e_{l}^{p_{k}}\ =\ {w^{p}}^{T}tanh(W^{pm}M^{p_{k}}_{l}+W^{ps}s_{t}+b^{p})\\ \alpha^{p}_{t}\ =\ softmax([e^{p_{1}};e^{p_{2}};\dots;e^{p_{k}}])\\ c_{t}^{p}\ =\ \sum_{l}\alpha_{tl}^{p}M_{l}^{p_{all}} elpk​​ = wpTtanh(WpmMlpk​​+Wpsst​+bp)αtp​ = softmax([ep1​;ep2​;…;epk​])ctp​ = l∑​αtlp​Mlpall​​
同理得到query的attention weight和context vector α t q , c t q \alpha^{q}_{t},c^{q}_{t} αtq​,ctq​,然后query和passage的copy distribution计算方式如下:
P q ( y t )   =   ∑ j : x j q = y t α t j q P p ( y t )   =   ∑ l : x l p k ( l ) = y t α t l p P^{q}(y_{t})\ =\ \sum_{j:x_{j}^{q}=y_{t}}\alpha^{q}_{tj}\\ P^{p}(y_{t})\ =\ \sum_{l:x_{l}^{p_k(l)}=y_{t}}\alpha^{p}_{tl} Pq(yt​) = j:xjq​=yt​∑​αtjq​Pp(yt​) = l:xlpk​(l)​=yt​∑​αtlp​

Final Distribution

最终的概率分布为三者的加权和:
P ( y t )   =   λ v P v ( y t ) + λ q P q ( y t ) + λ p P p ( y t ) λ v , λ q , λ p   =   s o f t m a x ( W m [ s t ; c t q ; c t p ] + b m ) P(y_t)\ =\ \lambda^{v}P^{v}(y_t)+\lambda^{q}P^{q}(y_t)+\lambda^{p}P^{p}(y_t)\\ \lambda^{v},\lambda^{q},\lambda^{p}\ =\ softmax(W^{m}[s_t;c^{q}_{t};c^{p}_{t}]+b_m) P(yt​) = λvPv(yt​)+λqPq(yt​)+λpPp(yt​)λv,λq,λp = softmax(Wm[st​;ctq​;ctp​]+bm​)

Combined Attention

之前我们计算了一个passage rank,这里我们要用它来过滤掉与答案按不相关的passage来防止copy distribution复制到这些不相关的passage。我们把 α t p \alpha_t^{p} αtp​修改为以下形式:
α t l p   =   α t l p β l p k ∑ l ′ α t l ′ p β l ′ p k \alpha^{p}_{tl}\ =\ \frac{\alpha_{tl}^{p}\beta^{p_{k}}_{l}}{\sum_{l'}\alpha_{tl'}^{p}\beta^{p_{k}}_{l'}} αtlp​ = ∑l′​αtl′p​βl′pk​​αtlp​βlpk​​​

Loss Function

最后还有一个损失函数的问题,模型的最终损失函数由三个部分组成
L   =   L d e c + γ r a n k L r a n k + γ a n s L a n s L\ =\ L_{dec}+\gamma_{rank}L_{rank}+\gamma_{ans}L_{ans} L = Ldec​+γrank​Lrank​+γans​Lans​
在这里插入图片描述

在这里插入图片描述

Experiment

本文实验部分倒是没有什么特别要说的,因为这篇文章的核心就是对模型的创新,简单来看一下实验数据,首先是在MS Marco数据集上的效果

在这里插入图片描述

然后是在NarrativeQA数据集上的效果

在这里插入图片描述

消融实验证明了本文所提出的多风格学习还是很有效的
在这里插入图片描述



这篇关于Masque论文笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程