博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于语义分割的不完整话语重写
阅读量:2242 次
发布时间:2019-05-09

本文共 5735 字,大约阅读时间需要 19 分钟。

近年来,不完整话语重写的任务引起了广泛关注。以前的方法通常将其转换为机器翻译任务,并采具有复制机制的生成模型。在本文中,作者将该任务转换为语义分割任务,引入了基于词的编辑操作,并将问题重新定型为词编辑矩阵的预测。这种方法能够捕获本地和全局信息,在多个公共数据集上实现了最优性能,并且比标准方法快四倍。

刘乾:北京航空航天大学与微软亚洲研究院联合培养博士,主要关注在上下文建模、语义解析、组合泛化等话题,目前以第一作者身份在ACL, EMNLP, NeurIPS等会议发表若干论文。

一、对话中的共指消解问题

多轮对话中,因为用户在句子间倾向于使用不完整的表达,通常会忽略对话上下文中出现的实体或概念,即共指消解。根据以前的研究,在超过70%的对话中存在共指消解,因此对话系统必须共指消解的处理能力。最近,研究人员专注于一个更明确和可解释的解决方案:不完整话语重写(Incomplete Utterance Rewriting, IUR,也称为上下文重写)。IUR的目的是将不完整的话语改写成在语义上等效但无需上下文即可的话语。如表1所示,不完整话语x3不仅省略了主题“北京”,而且还通过“这样”来指代“阴天”的语义。通过将x3的隐藏语义显式恢复出来,生成x3*,IUR可以使下游对话建模更加精准。

 

表 1  IUR任务数据示例

大多数情况下,共指和省略都可以不通过引入原句子以外的词解决。也就是说,重写句子的词几乎来自上下文或本句。基于此发现,之前的大多数工作采用指针网络或具有复制机制的生成模型。这些模型通过逐字解码来生成重写的句子,但是它们都忽略了一个关键特征,即大部分情况下重写句子的主干结构与原句相同。举例来说,读者可以将重写的句子想象为对原句的一系列编辑操作(即替换和插入)后的结果。以表1为例,通过将x3中的“这样”(this)替换为x2中的“阴天”(cloudy),并在“为什么”(Why)之前插入“北京”(Beijing),可以获得x3*,比逐字解码产生x3*容易得多。这些编辑操作是在上下文话语和原句子之间进行的,类似于图像中的语义分割任务。把词对之间的相关性视作图像,模型将预测编辑每个单词对的类型作为掩码。基于上述思想,本文提出了一种新颖且通用的方法,将IUR任务视为一个为语义分割任务。

二、 基于语义分割的不完全话语重写

图1 词级的编辑矩阵

在本节中,作者将阐述思想基本概念:使用语义分段编辑不完整的话语。

在多回合对话中,给定上下文话语(x1,…,xt-1)和不完整的话语xt,IUR将使用上下文信息将xt重写为xt*,其中xt与改写的话语xt*具有相同的语义。为了产生xt*,作者的方法将问题表达为语义分割任务。具体而言,作者将所有上下文话语串联起来,以产生一个M长度的单词序列c=(c1;c2;…;cM)。为了区分不同轮的上下文话语,作者在每个上下文话语之间插入一个特殊词[S]。同时,不完整的话语用x=(x1;x2;…;xN)表示。如上所述,可以通过用对话中的单词(即,c中的单词)编辑不完整的话语x来获得重写的句子x*。为了建模x和c之间的编辑操作,作者定义了一个M*N矩阵Y,其中条目Ym,n表示cm和xn之间的编辑类型。共有三种编辑类型:替换(Substitute):表示将x中的词替换为c中相应的上下文词;插入(Insert):将上下文词插入x中某个词之前,空(None)表示不进行任何操作。例如,如图1所示,作者可以通过用(c2; c3; c4)替换(x2; x3)并在x7之前插入(c6; c7; c9; c10)来编辑x。值得注意的是,作者在x最后附加了一个特殊的单词[E],以使插入操作也可以在x之后进行。

然后,作者使用类似于语义分割任务的方式训练这种矩阵Y。作者通过捕获c和x之间的词对词相关性来构建M*N的特征图。把特征图视为图像,输出词级别的编辑矩阵Y,这个编辑矩阵就类似语义分割任务中的像素级掩码,从而将IUR和语义分割联系起来。

这样的表述具有几个主要优点:

(i)简便:与直接重写句子的传统方法相比,这种表述引入了编辑操作以降低生成的难度;

(ii)快速:这些编辑是同时预测的,因此作者的模型自然比传统的逐字解码模型具有更快的推理速度;

(iii)迁移性好:研究者可以轻松地从语义分割领域借鉴经典的模型结构,迁移到IUR任务中。

图2 模型图

三:构建重写模型:RUN

如图2所示,作者的方法首先通过三层神经网络获得编辑矩阵。然后,基于编辑矩阵,使用生成网络产生重写的句子。模型的生成网络为U型架构,因此作者将方法命名为重写U型网络(Rewritten U-shaped Network,RUN)。

3.1 词级编辑矩阵的构建

为了构建词级编辑矩阵,模型设计了三层神经网络:上下文层,编码层和分割层。上下文层为c和x中的每个词生成一个上下文感知表示,编码层基于此表示形成特征图矩阵F以捕获单词间的相关性。最后,应用分割层以生成词级编辑矩阵。下面分别介绍:

上下文层(Context Layer):如图2的左侧部分,首先将c和x连接后使用GloVe初始化然后使用BiLSTM捕捉句子的语义信息,另外作者也尝试了BERT的词向量。为了方便说明,作者把c中词的BiLSTM输出使用cm表示,x的用hn表示。

编码层(Encoding Layer):基于上一步的结果,作者使用几个相似性函数来对词与词之间的相关性进行编码。具体地,x中的每个单词xn和c的cm,作者通过元素之间的相似度(Ele Sim),余弦相似度(Cos Sim)和双线性相似度(Bi-Linear Sim)接连产生二者的相似度:

F(xn,cm )=[hnʘum;cos(hn,um );hnWum ]

其中W是可学习的参数。这些相似性函数可以从不同的角度对单词间的相关性进行建模,有助于后续的编辑类型分类。

分割层(Segmentation Layer):基于获取的特征图矩阵F ∈RM*N*D作为D通道图像,分割层用于预测词级编辑矩阵Y,该层形成为U形结构:两个下采样块和两个带有跳过连接的上采样块。下采样块包含两个单独的卷积模块和一个后续的最大池化层。每个下采样块使通道数量加倍。上采样块包含两个单独的卷积模块,以及随后的解卷积神经网络。每个上采样模块将通道数量减半,并在下采样中将相应裁剪的特征图连接作为输出。最后,使用前馈神经网络将每个特征向量映射到三种编辑类型之一,以获得词级编辑矩阵Y。并编码层和分割层输出。

3.2 重写句子的预测

生成单词级别的编辑矩阵后,作者使用生成算法来产生重写的话语。作者假定Y中的每个编辑区域都是一个矩形。但是不能保证预测的Y每个都这么标准,需要标准化处理。因此,整个生成过程分为两个阶段:首先搜索最小覆盖矩形来界定标准编辑区域;然后根据标准编辑区域处理不完整的句子,并产生重写的句子。

在标准化步骤中,作者采用二次遍历算法(也称为Hoshen–Kopelman算法)来查找连通区域。该算法对词级编辑矩阵进行了二次遍历。第一遍是分配临时集群标签,并按从左到右,从上到下的顺序记录集群之间的等效性。二遍是合并记录为等效的临时群集标签。最后,具有相同标签的单元格形成一个连接区域。对于每个连接的区域,作者使用其最小覆盖矩形作为模型的输出。

3.3远程监督生成训练数据

由于现有数据集仅包含重写的话语,没有改写标签。因此,作者使用一种过程来自动生成词级编辑矩阵,并使用这些示例来训练作者的模型。作者使用以下过程来构建作者的训练集。首先,作者找到x和x之间的最长公共子序列(LCS)。然后,对于x中的每个单词,如果不在LCS中,则将其标记为ADD。相反,对于x中但不是LCS中的每个单词,将其标记为DEL。具有相同标记的连续单词将合并为一个跨度。通过跨度级别比较,x中任何与DEL对应项(即,在相同上下文中)的ADD跨度都将其与替换相关。否则,将跨度插入到x中,对应于插入。

以表1为例,给定x为“为什么总是这样”,x*为“北京为什么总是阴天”,它们最长的共同子序列为“为什么总是”。因此,在x中将this标记为DEL,将“阴天”(cloudy)标记为ADD,它们对应于编辑类型(Substitute)。由于“北京”(Beijing)找不到匹配对象,因此标记为“插入”(Insert)编辑类型。

四、实验

4.1 数据

作者在不同领域的四个公共数据集上进行了实验,这四个数据集横跨三个领域:Open Domain Dialogue (Multi & Rewrite), Task-Oriented Dialogue (Task) and Question Answering in Context (CANARD). 下表中显示了一些统计数据。

 

表2 不同数据集的统计信息。NA表示开发集也是测试集。Ques代表问题,Avg代表平均值,len代表长度,Con代表上下文,Cur代表当前,Rew代表重写

4.2 评价方法

作者采用自动指标和人工评估来评估作者的方法。与文献一样,作者使用广泛使用的自动指标BLEU,ROUGE,EM和Rewriting F-score。

(i)BLEUn(Bn)通过累积n-gram BLEU得分评估重写后的句子与标签句子的相似程度。

(ii)ROUGEn(Rn)度量重写的句子和标签句子的n-gram重叠,而ROUGEL(RL)度量它们之间的最长匹配序列。

(iii)EM代表精确匹配准确度,这是最严格的评估指标。

(iv)Rewriting Precisionn, Recalln and F-scoren 更加强调c中的单词,这些单词被认为很难复制。

上述自动指标是反映重写质量的可靠指标。但是,没有一种自动指标可以反映出话语的流畅性或对下游任务的改进。因此,进行了人工评估,以评估改写的话语的流畅程度及其对下游任务的改进。

4.3 模型对比

表3和表4显示了作者的方法和MULTI和REWRITE基准的实验结果。如图所示,作者的方法明显优于所有基准。

表3 MULTI数据集实验结果表

表4 REWRITE数据集实验结果表

作者的方法大大超过了最佳基准L-Ptr-Gen,几乎在所有自动指标上都达到了最好的性能。例如,作者的方法将先前的最佳模型分别在B1和F1上分别提高了6.4和10.0。此外,当使用BERT扩展时,作者的方法给人留下了深刻的印象。它不仅完全超过了BERT的最佳序列生成基线(即T-Ptr-λ+BERT on REWRITE),而且相对于旨在完全利用BERT潜力的级联模型(即PAC on MULTI)也获得了可观的提升。即使对于REWRITE上最具挑战性的指标EM,带BERT的RUN也会提高8.9点,这证明了作者模型的优越性。

4.4 推理速度

由于编辑预测是并行的,因此与传统的逐字解码模型相比,作者的模型自然具有较快的推理速度。对比结果如下表所示:

 

表5 推理速度表

表5比较了作者的模型和基线之间的推理速度。由于LPtr-λ和T-Ptr-λ未在PyTorch中实现,因此,出于公平考虑,作者不会显示其推断时间。注意beam size 会影响基线的推断时间,作者还显示了beam size 为1的结果。使用最简单的L-Gen作为标准,作者可以发现作者的模型快了近四倍,改进幅度最大ΔB4。同时,作者的模型是唯一可以同时提高性能和推理速度的模型,大大超过了所有基线。

4.5 消融实验

 

表6消融实验结果表

为了验证模型中不同组件的有效性,作者进行了消融。“w/o Eidt”是指直接将当前句用作重写句子。“w/o U-shape Seg.”代表分割层使用简单的全连接网络替换。其他的消除实验验证了编码层中的不同相似性函数的功能。

正如预期的那样,“w/o Eidt”会导致所有评估指标的大幅下降。值得注意的是,Fn的极端下降表明它比普通指标更适合IUR。“w/o U-shape Seg.”也带来了很大的性能下降。如果没有分割层捕获全局信息,则编码层只能达到与L-Gen相似的性能,这表明IUR和语义分割一起使用具有很大的好处。另外,消除每个相似性函数将效果下降明显。同时,作者的模型不太依赖任何相似性函数,显示了其鲁棒性。

 

图3 模型输出的两个样例

五、探讨

尽管作者的方法取得了一些进展,但仍然存在一些局限性。首先,作者的模型严重依赖于对话所隐含的词序。这使模型容易受到某些复杂情况的影响(例如,多个插入对应一个位置)。第二个局限性是作者独立预测每个单元格的编辑类型,而忽略了相邻编辑类型之间的关系。希望可以通过条件随机场算法解决。

上述限制可能引起对作者方法的性能上限的担忧。实际上,这不是问题。在实验中使用的四个数据集中的三个中,作者的方法可以完美地解决超过85%的示例。CANARD中的效果相对一般,因为标注人员在重写中引入了许多新单词。但是,采用作者的方法,CANARD中的BLEU上限可高达72.5%。

为什么相似性可以成为确定编辑的良好功能?作者认为可以从两个方面进行阐述。对于共指,相似度函数可以识别两个跨度是否可以引用同一实体。对于省略,相似度函数是找到可能的插入位置的有效指示。

整理:李健铨

排版:岳白雪

审稿:刘   乾

本周直播预告:

AI TIME欢迎AI领域学者投稿,期待大家剖析学科历史发展和前沿技术。针对热门话题,我们将邀请专家一起论道。同时,我们也长期招募优质的撰稿人,顶级的平台需要顶级的你!

请将简历等信息发至yun.he@aminer.cn!

微信联系:AITIME_HY

AI TIME是清华大学计算机系一群关注人工智能发展,并有思想情怀的青年学者们创办的圈子,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法、场景、应用的本质问题进行探索,加强思想碰撞,打造一个知识分享的聚集地。

更多资讯请扫码关注

 

(直播回放:https://b23.tv/WXxkfG)

(点击“阅读原文”下载本次报告ppt)

转载地址:http://orgbb.baihongyu.com/

你可能感兴趣的文章
Oracle列转行函数 Listagg() 语法详解及应用实例
查看>>
LISTAGG函数的用法
查看>>
Oracle Spatial操作geometry方法
查看>>
IDEA类和方法注释模板设置(非常详细)
查看>>
Java程序初始化的顺序
查看>>
Dubbo和Spring结合配置文件内容解析为bean的过程
查看>>
fastJson注解@JSONField使用的一个实例
查看>>
fastjson的@JSONField注解的一点问题
查看>>
fastjson使用(三) -- 序列化
查看>>
浅谈使用单元素的枚举类型实现单例模式
查看>>
Java 利用枚举实现单例模式
查看>>
Java 动态代理作用是什么?
查看>>
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
查看>>
三种线程安全的单例模式
查看>>
Spring AOP 和 动态代理技术
查看>>
从 volatile 说起,可见性和有序性是什么
查看>>
如何开始接手一个项目
查看>>
Netty 5用户指南
查看>>
Java实现简单的RPC框架
查看>>
一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
查看>>