【略解】copy机制与SpanPtr

一、概述

背景:学习多领域多轮问答DST模型TRADE,发现其中一个技术点copy机制,对其调研如下:

1.1 Copy机制相关论文

No. 标题 简介
1 Vinyals et al., 2015 《Pointer networks》 Pointer network;index-based copy;copy机制起源
2 Gulcehre et al., 2016《Pointing the unknown words》 Pointer Softmax Network;hard-gated copy;copy机制第一次用于摘要生成和机器翻译
3 Gu et al., 2016《Incorporating copying mechanism in sequence-tosequence learning.》 CopyNet;copy机制用于摘要和单轮对话
4 He et al., 2017《Generating natural answers by incorporating copying and retrieving mechanisms in sequence-to-sequence learning.》 copy机制用于问答
5 Eric . 2017. 《A copy-augmented sequence-to-sequence architecture gives good performance on task-oriented dialogue.》 copy机制第一次用于任务型对话
6 See , 2017《Get to the point: Summarization with pointer-generator networks》 soft-gated copy;copy机制用于摘要生成
7 McCann et al., 2018 《The natural language decathlon:Multitask learning as question answering》 soft-gated copy;copy机制用于问答
8 Madotto 2018《Mem2seq: Effectively incorporating knowledge bases into end-to-end task-oriented dialog systems.》 Mem2seq;hard-gated copy;memory network与copy机制结合。
9 Xu and Hu, 2018 《An end-to-end approach for handling unknown slot values in dialogue state tracking.》 SpanPtr;index-based copy;copy机制用于单领域生成式DST
10 Chien-Sheng Wu 2019 《Global-to-local memory pointer networks for task-oriented dialogue》 GLMP;hard-gated copy
11 Chien-Sheng Wu 2019 《Transferable Multi-Domain State Generator for Task-Oriented Dialogue Systems》 TRADE,soft-gated copy;copy机制用于多领域生成式DST

1.2 Copy机制的来历

经典模型框架seq2seq,用于各类语言生成任务,如机器翻译、摘要生成、对话、问答等,拥有很强的建模能力,但是在KB retrieval上效果不力,无法将正确的实体映射到生成的序列里。由于在对话任务中,response 经常会 repeat spans of the input (e.g., “good morning” in response to “good morning”)或者包含专有名词这种出现概率低的词,这种词靠标准RNN很难生成。所以人们尝试将copy机制引入seq2seq的decoder,通过 “copy and paste” words between dialoge context and response,提升模型的性能。这些模型假设,target words要么是从一个fixed-size vocabulary (类似于 a seq2seq model) 中抽取的,要么是用attention机制从source sequence中择出来的(类似于a pointer network)。copy机制的repeat 专有名词 以及 其他input中的词 的能力大大加强了seq2seq的性能。此外,即使dialog history中出现unknown token , 用copy机制加强的模型依然能够产生正确而相关的实体,所以在解决OOV问题上也很有作用。其实,这种从input中repeat词的机制也更像human behavior。

Copy机制与 Pointer Network(PtrNet)关系:copy机制起初启发自 Pointer Network模型。Pointer Network使用注意力 attention 作为 a pointer 以选择 input source的一部分作为output。copy机制可以一句话概括为 直接从 input sources中copy words到output responses,输入源可以是context或KB信息。

【按:copy与PtrNet基本可以看做一个同义词】

Copy机制也用于问答、神经机器翻译、语言建模、摘要生成等任务。 与chatbot相比,copy机制尤其适用与任务型问答,因为专有名词常作为response中的实体。

Copy机制的同义词:copy mechanism;attention-based copy mechanism;copy-augmented seq2seq;memory pointer;extract keywords

总结:copy机制的本质是提取(extract)关键词,这个输出可以作为上游模块,和其它任务相结合。

1.3 copy机制的早期实例

CopyNet:Copy机制的最早一个instance。 copyNet不算复杂, 前提是能看懂PtrNet

Eric 2017使用了 copy-augmented Seq2Seq,通过KBs中copy相关信息,提升了utterance selection方法。

Memory-to-Sequence (Mem2Seq):一个end-to-end任务型对话系统,使用一个序列生成技术提升现存的MemNN框架,使用全局多跳(multi-hop)attention机制来直接从dialog history or KBs中copy words。copy机制还能用于改善对话中的OOV问题,即对话中的在词表中不出现的word可以通过模型copy而认识。Mem2seq将端到端memory network(MN)与序列生成结合, 证明了MN的multi-hop机制可用于提升 copy attention。

1.4 copy机制用于生成式DST

除了用于chatbot生成response,copy机制也可以用于任务型对话中的DST(生成式)。即generates dialogue states (slot values) from utterances(& text from the input source) using a copy mechanism.

copy机制通常有三种实现方式:index-based copy、hard-gated copy 以及soft-gated copy。区别见第三节

(1)SpanPtr:

SpanPtr是第一个使用PtrNet进行 single-domain DST的模型,方法是 generates both start and end pointer来进行copy

DST的输出和阅读理解一样,多数情况下是一个input sequence中的a word segment,因此可以自然地建模为pointing problem。为了识别 word segment,需预测starting index and the ending index。这就是index-based copy。

SpanPtr性能不如TRADE。推测原因是使用的copy方法是index-based copying,例如某个槽位的真实标注是cheap,而用户非常可能说economical, inexpensive, or cheaply之类近义词,而非cheap。而TRADE使用soft-gated copy。

(2)Chien-Sheng Wu团队:TRADE

生成式Generative DST,是TRADE提出来的DST的approach,与open-vocabulary DST意思相近,但强调的侧重点不同。TRADE不在每个predefined ontology term(value)上预测概率, 取而代之地,直接让模型生成slot values,这就离不开用对text from the input source进行copy的机制来加强Generator/decoder。

对比copy机制通常的三种运行方式,由于true slot/value word常常无法直接在utterance中找到,因此index-based copy并不适合DST任务;而hard-gate copy 通常需要给予门(gate)函数额外的监督信号;因此TRADE采用soft-gated copy,将vocabulary上的分布与对话历史上的分布合成成单一输出分布。

二、Pointer network介绍

参考:

从attention机制到copy

详解Pointer network

2.1 [1]PointerNet (index-based copy)

论文内容:首次提出PtrNet

PtrNet的思路是让decoder输出一个由output序列指向input序列的指针序列(pointer)。

attention机制中有一个对齐系数a,(a每个维度的值)表示output序列当前step与input序列的所有steps的相关性。PtrNet中,我们可以选取a中数值最大的那个维度( 向量a的长度等于源序列的steps长度,每个维度指向源序列的一个step ),看做一个指针,这个指针所指向的input序列中的词就可以提取出来,作为输出。

对output序列的每一步step,各用上述方式获取出一个指针,那么decoder输出的就不是具体的句子,而是一个指针序号的序列。

综上我们可以看出PtrNet的潜力,可以用于翻译任务提取命名实体,或摘要生成提取关键词任务等。

【按:PtrNet可以看做attention机制的一种应用场景,也可以看做是一种简化版的attention。attention机制即让a作为权重与encoder各step隐藏状态加权求和,作为decoder这个step的输入。 pointer不一样, 它在attention的softmax时直接拿到最大的a的编号, 直接把编号的encoder输入作为decoder这个step的输入。Instead of generating longer output sequences, the decoder only has to predict the starting index and the ending index in order to identify the word segment.】

2.2 [2] Pointer Softmax Network (hard-gated copy)

论文内容:首次将PtrNet用于NLP任务(机器翻译,文本摘要生成)

这篇论文提出的Pointer Softmax Network模型包含三个主要模块,描述如下:

(1)Shortlist Softmax:传统模型。这个模块由传统的Attention机制实现,输出一个在词表里的词的条件概率。这个模块需要维护一个固定大小的词表。

(2)Location Softmax:PtrNet模型。这个模块利用了Attention机制的对齐系数a。对齐系数a每个维度的值表示decoder当前step输出源序列每个step的概率大小。在对齐系数a的各个维度中取出数值最大的那个维度,作为decoder当前step的指针,这个维度上的值就是其概率大小。该模块输出词表的大小为steps长度即a的长度。

(3)Switching Network:开关模型。决定是采纳Shortlist Softmax输出的预测词,还是采纳Location Softmax输出的预测词。Switching Network由一个多层感知机MLP实现,并在最后接一个sigmoid**函数,再通过判决门限看哪个模型效果好,输出效果好的那个。

注: 这篇论文和论文[3],都有提及,虽然引入PtrNet机制会扩大网络规模,增加网络的参数,但是在模型训练环节,反而会让模型收敛得更快。

2.3 [3] CopyNet

论文内容:将PtrNet用于文本摘要生成和单轮对话任务。

创新点:

(1)Generate-Mode & Copy-Mode:

将[2]中两个输出预测模型融合到了一个, Generate-Mode & Copy-Mode模块。这个模块维护2个词表,一个传统的词表(但不包含UNK),一个由input sequence中的词构成的词表。

对于传统词表中的词及UNK,采用Generate-Mode生成词(onehot词向量乘decoder隐藏状态归一化获取概率);对于input构建的词表中的词,采用Copy-Mode,注意对output序列词y,y在input序列中各step中每出现一次,就要根据公式计算一次概率值,最终的概率是所有step对应概率值之和。

最后,将 Generate-Mode & Copy-Mode输出的词概率进行加和,作为最终词概率分布。

(2)state update:

在decoder中,step的状态s等于输出词的词向量与一个类似上下文的向量ζ的拼接。

总结:

(1)CopyNet模型融合了生成式(abstractive)摘要任务和抽取式(extractive)摘要任务的思想。decoder输出的大部分关键词来源于Copy-Mode,这体现了extractive summarization。然后再由Generate-Mode把语句撸通顺,这体现了abstractive summarization。

(2)copy机制的本质是提取关键词,这个输出可以作为上游模块,和其它任务相结合,例如文本分类任务。

(3)本论文有很多细思极傻的设定。

2.4 [6] Pointer-Generator Networks (soft-gated copy)

论文内容:将PtrNet用于文本摘要生成。

模型和Pointer Softmax Network比较像,包括以下结构:

(1)传统的带Attention机制的Generator Network

(2)用于从源序列copy词语的Pointer Network

(3)最后利用开关网络汇总概率值

注: 这篇论文还提出了一个创新点:Coverage Mechanism。这个创新点和本文主题无关,但是又非常经典,所以作个简单的介绍:Coverage Mechanism通过统计各个词语在历史对齐向量a中的出现的概率值的累积和,将累计和分别纳入Generator Network公式和惩罚项,以达到解决序列生成任务中,相同文本不停循环出现的问题。

【按:已介绍的四篇论文,如果只读一篇的话,建议读这篇。】

总结:PtrNet逐渐不作为独立组件,而是以“copy机制”的形式作为传统seq2seq模型的威力加强版。

三、三种copy机制的关系

TRADE把过去模型运行copy机制的方式分为三类:index-based copy、hard-gated copy 以及soft-gated copy。现在,我们可以对其做个总结了。

1、index-based copy:其实就是PtrNet。最简单的copy机制,每个decoder step产生一个关于input的指针序号,从input中copy一部分词到output。

2、gate:模型会结合Generate与Copy两种方式,让系统在每个decoder step选择是generating a word from the vocabulary by sampling from vocabulary distribution,还是copying a word from the input sequence by sampling from the attention distribution。即有个门限看哪个模型效果好,输出效果好的那个,又叫classify-and-copy mechanisms,classify即这个门限。

3、hard-gated copy:Generate-Mode与Copy-Mode是两个绝对分离的网络,通过一个显式存在的hard Switch模块,学习一个门限函数(hard gate),通过门限函数输出和判决门限阈值(通常0.5,二分类器)来决定使用哪一个模块输出word。

4、soft-gated copy:Generate-Mode与Copy-Mode没有明确的使用哪一个之分,而是同时使用, 每个decoder step会计算一个generation probability pgen[0,1]p_{gen} \in [0,1]标量作为soft switch,将generating与copying两个输出概率分布汇总(加权和)作为概率值。

【按:PtrNet相当于soft-gated copy pgenp_{gen}恒为0的特例,传统decoder相当于pgenp_{gen}恒为1的特例。】

TRADE作者:对话中,由于true slot/value word常常无法直接在utterance中找到,因此index-based copy并不适合DST任务;而hard-gate copy 通常需要对门函数做额外的监督;因此TRADE采用soft-gated copy,将vocabulary上的分布与dialogue history上的分布汇总成最终输出分布。

四、[9]SpanPtr

标题:《An end-to-end approach for handling unknown slot values in dialogue state tracking.》

关键词:unknown

创新点

(1)着眼单领域DST,提出unknown问题

(2)基于PtrNet提出一个E2E结构,可以extract unknown slot values,并在DSTC2上取得SOTA性能。

(3)使用一个trick:feature dropout technique,应对unknown问题,提高模型对UNK values的召回率

背景

discriminative 方法:

早期DST模型着眼于建模 joint distribution of dialogue states,取得广泛应用,但large state spaces带来的scalable问题限制了这类模型的可用性。

另一方面,discriminative方法,例如NBT等,根据从conversation history中累积的给定evidences 直接建模posterior distribution of dialogue states,取得了好效果。这些技术通常涉及multi-class classification step at the end (e.g. in the form of a softmax layer) which for each slot predicts the corresponding value based on the dialogue history. 有时候,multi-class classification会被 binary prediction 取代,决定某一个slot-value pair是否应该表达。the list of candidates comes from either a fixed ontology or the SLU output.。对一组predefined set of slots进行填充,通常基于分类和对每个slot-value pair独立打分。

open-vocabulary DST:unbounded and dynamic value sets,解决unknown问题;提升模型scalable。eg:Rastogi《Scalable multi-domain dialogue state tracking》

PtrNet

(1)基本原理

1、encoder

用Bi-LSTM把up-to-turn tt的对话历史序列w1,...,wt{w_1,...,w_t}做embedding。为了区分各words,用speaker role信息对word embedding做进一步增强。其他特征如每个word的实体类型也同时送入encoder以抽取更丰富的信息。

encoder的每个step position的隐藏状态记为hih_i

2、deocder

deocder的第一个input用一个表示slot type的特殊符号(例如<food><food>),其embedding记为EtypeE_{type}。decoder的初始隐藏状态用encoder的最后一个前向隐藏状态htfh_t^f表示。则slot value的starting index s0s^0这样计算:

第一步:取decoder第一个step的state d0d^0

d0=LSTM(htf,Etype)d^0=LSTM(h^f_t, E_{type})

第二步:应用attention机制,计算input中每个word的attention分数。

ui0=vTtanh(Whhi+Wdd0)u^0_i=v^T tanh(W_hh_i+W_dd_0), i=0,1,...,ti=0,1,...,t

其中v,Wh,Wdv,W_h,W_d都是可学习的参数

第三步:计算每个word的对齐参数

ai0=softmax(ui0)a^0_i=softmax(u^0_i)

第四步:应用copy机制,获取starting index s0s^0(input中权重最大的那个元素的index)

s0=argmaxi ai0s^0=argmax_i\ a^0_i

第二个decoding step的attention分数的计算过程相似。用d0d^0作deocder的第二个input,index s0s^0的那个word的embedding Ews0E_{w_{s^0}}作第二个隐藏状态,学习ui1u^1_is1s^1s1s^1就是end position(ending index)。

PtrNet模型本身没有一个保证一定s1>s0s^1>s^0的机制,所以模型未必总能输出reasonable word segments,当s1<s0s^1<s^0时,一般意味着answer不存在于input中(例如DST任务内的none slot)。出于任务的特性,可以添加一个约束,确保一定s1>s0s^1>s^0

只要word明确出现在input里,模型就有机会发现它,从而实现应对unknown问题。

(2)改写与分类

1、改写

我们的模型,直接从对话历史中精确找出user express-surface form的slot value,而不考虑同一实体多词一义的问题。因此,抽取出来的dialogue state可能不与数据库里的标准形式的value一致,这造成了search数据库的困难,也影响准确率。这个问题可以通过在search数据库之前增加一个额外的canonicalization 步骤 (setting dialogue states to standard forms)来解决。

2、分类

真正的困难是对话历史里没有显式出现任何和slot value可比的word或phrase。我们把这样的slot values称为non-pointable。例如none value就是这样的,表示用户对slot没有特别约束。显然pointer是绝对无法应对这种情况的,尽管这种信息可以非常简单地从对话推理出来。类似地还有dontcare​ value,表示用户对slot可以接受任何value。

为了解决non-pointable问题,我们增加一个多分类模块,在对话的每一个turn,分类器判断这个slot应该被给予non-pointable values(none or dontcare),还是应该送入PtrNet处理(other)。

【按:这就是TRADE的slot gate机制的雏形和初心,不仅仅是为了计算效率。】

【略解】copy机制与SpanPtr

如图1,蓝色的encoder,红色是decoder,黄色是分类器,给定starting word,模型正在预测slot value的ending word。encoder的前向最后state作为用于分类层的特征向量。分类器与PtrNet联合训练。

事实上,过去的那种对全部slot-all values做softmax的那种DST模型,就是一种广义,大型的分类器。所以,用另一种视角,本文的模型也可以看做是分类器与PtrNet的combined architecture。这与pointer-generator model等generte-Mode & Copy-Mode系列的模型其实是一样的,都是结合两种机制的优点,对non-pointable values用generate,对pointable values用copy。

(3)Targeted Feature Dropout

Feature dropout是一个有效避免feature co-adaption并提高模型generalization的技术,广泛用于神经网络模型,也有用于基于特征的模型的。而Targeted Feature Dropout, (Xu and Sarikaya, 2014)提出,用于应对一种slot filling中的特别的co-adaptation问题 , 即insufficient training of word context features(词对上下文相关特征训练不足的问题)

对于slot filling,这个问题经常发生于(1)字典(precompiled possible values list)覆盖了训练集中slot values的绝大部分;(2)多数slot values频繁重复导致insufficient tail representations。在这两种情况,contextual Features倾向于严重地欠训练(under-trained),结果是模型无法泛化到既不出现于字典中、也不出现于训练中的unkown slot values

举个例子:
【略解】copy机制与SpanPtr

如图2:训练数据中,绝大部分food type slot出现了超过10次。结果是模型会仅学习到记忆这些频繁出现的slot values,而不是contextual patterns which can bemore crucial for extracting slot values not known in advance.

为了缓解这个问题,我们应用了一个targeted dropout trick,随机地把utterances中与slot alues相关的输入词向量set为0。例如,italian food tyoe在训练数据中出现了500次。那么,在训练时,每个italian word 被对话提到作为lable时,我们在模型输入用一个概率来关闭(turn off) “italian” 的词向量,强制让模型从上下文来识别这个slot value。

同理词典特征也可以用相似的方式turn off,或者干脆不用于实验。

这个trick有效地提升了模型对Unkown slot values的泛化能力,而不影响对known & observed values的准确率。

【按:这个trick本质还是为了提高word embedding的上下文相关性,其实就像SUMBT和COMER一样直接上Bert,就不用这个trick。这节我没仔细看,感兴趣的自行查阅资料。】

五、[10]GLMP

论文提出全局(global)-局部(local)记忆(memory)指针(pointer)(GLMP)网络来解决端到端任务型对话系统的大型动态数据库难以纳入学习框架的问题。我们模型提出一个global memory encoder和一个local memory decoder共享外部知识。encoder对对话历史进行编码,修改global contextual representation,并生成global memory pointer 。decoder首先生成带有未填充的slots的response骨架,接下来它传递global memory pointer过滤掉外部知识以获得relevant信息,然后通过global memory Pointers实例化slots。我们凭经验表明,我们的模型可以提高copy的准确性,减轻OOV问题。结果显示,GLMP能够在自动和人工两方面评估中超越bAbI和SMD数据集中的现有模型。

模型 = global memory encoder + local memory decoder + shared external knowledge

传统copy: generating system responses directly

the local memory decoder:先用一个sketch RNN 获取sketch responses(没有 slot values ,只有sketch tags), 相当于一个学习生成 dialogue action template的对话管理组件。然后decoder从external knowledge生成local memory pointers,通过softly filtering words that are not necessary for copying来调节external knowledge,从 external knowledge 中copy words,并实例化sketch tags。

为了利用外部知识, 使用end-to-end memory networks (MN) 为both structural KB (KB memory) and temporal-dependent dialogue history (dialogue memory),存放word-level 信息。这借鉴了Mem2seq的将端到端memory network(MN)与序列生成结合, 体现了MN的multi-hop机制可用于提升 copy attention。

KB的知识被表示为(Subject, Relation, Object) structure的三元组结构。在inference阶段,一旦memory position被指向,我们就copy object词。例如,当(Toms house, distance, 3 miles) is selected,我们就copy其中的3 miles。

y),存放word-level 信息。这借鉴了Mem2seq的将端到端memory network(MN)与序列生成结合, 体现了MN的multi-hop机制可用于提升 copy attention。

KB的知识被表示为(Subject, Relation, Object) structure的三元组结构。在inference阶段,一旦memory position被指向,我们就copy object词。例如,当(Toms house, distance, 3 miles) is selected,我们就copy其中的3 miles。

【按:这个论文是TRADE作者在发TRADE前发的。把TRADE看明白了就够了】