Motivation:
现有的生成式对话摘要方法往往需要引入一些辅助信息,比如key words, dialog act,topic等等,来提高生成的摘要的信息性,相关性,减少摘要的冗余性。这些辅助信息的引入往往依赖于一些开源的工具,这些工具可能本身并不是针对于对话的,不能很好适应对话的特点,或者需要大量的手工标注。本文将DialogGpt改造成无监督的dialogue annotator,自动完成三种标记任务,Keywords Extraction,Redundancy
Detection,Topic Segmentation,下图给出了这三种任务的示例,keywords extraction是提取出对话中的关键词,redundancy detection的目标是发现冗余的语句,也就是对于对话的总体意思没有太大贡献的句子,Topic Segmentation的目标是根据topic将对话分成连续的若干段。用DialoGPT annotator对SAMSUM和AMI数据集进行标记,然后再用BART模型和PGN模型生成摘要。
Method
上图给出了DialoGPT annotator的总体架构:
Dialogue Preprocessing
首先将对原始的对话进行预处理,得到两种形式的输入,一种是context-response对,另一种是dialogue sequence ,将所有utterance拼接在一起,使用EOS分割。
DialoGPT Forward Passing
然后将预处理后的对话输入到DialoGPT中,进行forward pass。对于每对context-response,得到每个word的loss l o s s i , t loss_{i,t} lossi,t?和每个utterance的loss l o s s t loss_t losst?。对于每个dialogue sequence,得到对话的上下文表示 h E O S 1 , h E O S 2 , h E O S 3 , . . h E O S D = H ( E O S ) h_{EOS1},h_{EOS2},h_{EOS3},..h_{EOSD}=H(EOS) hEOS1?,hEOS2?,hEOS3?,..hEOSD?=H(EOS)
Annotation
利用Forward Pass的结果进行Annotation,包含三项任务,Keywords Extraction,Redundancy Detection,Topic Segmentation。
Keywords Extraction
作者认为keywords是unpredictable的词汇,如果golden response中的一个词很难被DialoGPT预测出来,这个词很可能包含了更多的信息,因此可以被视为key word。
在上一步得到了每个word u i , j u_{i,j} ui,j?的loss l o s s i , j loss_{i,j} lossi,j?,从对话中提取出loss最大的 r k e r_{ke} rke?比例的词作为key words,同时把所有的speaker的名字P也加入key words中,并添加一个特殊标记 # K E Y \#KEY #KEY,最后得到标记后的dialogue为 D K E = [ p 1 , u 1 , 1 , … , # K E Y # , P , Key ? 1 , K e y 2 , … ? ] \mathcal{D}_{\mathrm{KE}}=[p_{1}, u_{1,1}, \ldots, \underbrace{\# \mathrm{KEY} \#, \mathbb{P}, \operatorname{Key}_{1}, \mathrm{Key}_{2}, \ldots}] DKE?=[p1?,u1,1?,…,
#KEY#,P,Key1?,Key2?,…?]
Redundancy Detection
每个 h E O S i h_{EOSi} hEOSi?可以看做是对话上下文 [ u 1 , u 2... u i ] [u1,u2...u_i] [u1,u2...ui?]的表示,当添加一个新的utterance u i + 1 u_{i+1} ui+1?,如果新的 h E O S i + 1 h_{EOSi+1} hEOSi+1?和前一个 h E O S I h_{EOSI} hEOSI?相似,就可以认为 u i + 1 u_{i+1} ui+1?带来较少的信息,从而将 u i + 1 u_{i+1} ui+1?看做冗余。
从最后两个对话上下文的表示 h E O S ∣ D ∣ h_{EOS|D|} hEOS∣D∣?和 h E O S ∣ D ? 1 ∣ h_{EOS|D-1|} hEOS∣D?1∣?开始,计算之间的相似度,如果相似度得分超过预设的阈值, u D u_{D} uD?就是一个冗余,如果没有超过阈值,就继续计算前两个句子的相似度重复这一过程直到开头。
在每个荣誉的句子之前添加一个特殊标志 [ R D ] [RD] [RD],最后得到标记后的对话为 D R D = [ p 1 , [ R D ] , u 1 , 1 , … , EOS ? 1 , … , p ∣ D ∣ , … , EOS ∣ D ∣ ] D_{RD}=\left[p_{1},[\mathrm{RD}], u_{1,1}, \ldots, \operatorname{EOS}_{1}, \ldots, p_{|\mathcal{D}|}, \ldots, \text { EOS }_{|\mathcal{D}|}\right] DRD?=[p1?,[RD],u1,1?,…,EOS1?,…,p∣D∣?,…, EOS ∣D∣?]
Topic Segmentation
DialoGPT擅长生成上下文一致的对话,所以如果一句回复很难被DialoGPT预测,就认为这句回复属于另一个话题,在这里添加一个分隔。
在上一步得到了每个utterance的loss l o s s i loss_i lossi?,选择loss最大的前 r T S r_{TS} rTS?比例的utterances作为话题分割的断点,在每个选择的句子之前添加一个特殊标志 [ T S ] [TS] [TS],最后得到标记后的对话为 D T S = [ p 1 , [ T S ] , u 1 , 1 , … , EOS ? 1 , … , p ∣ D ∣ , … , EOS ∣ D ∣ ] D_{TS}=\left[p_{1},[\mathrm{TS}], u_{1,1}, \ldots, \operatorname{EOS}_{1}, \ldots, p_{|\mathcal{D}|}, \ldots, \text { EOS }_{|\mathcal{D}|}\right] DTS?=[p1?,[TS],u1,1?,…,EOS1?,…,p∣D∣?,…, EOS ∣D∣?]
Summarizer
使用BART模型和pointer-generator模型生成最终的摘要,在此不做太多介绍。