对话改写模型-RUN详解

作者: 晓柒NLP与药物设计 | 来源:发表于2022-07-23 23:22 被阅读0次

一. 简介

1.1 方案简介

论文首次提出将不完整对话补全重写看做语义分割任务(semantic segmentation task),即通过引入了编辑操作,将其看做单词级别编辑矩阵的预测问题(prediction of a word-level edit matrix)。该模型能够同时捕获局部和全局信息,在多个公开数据集上取得了最佳的结果。并且支持编辑操作并行预测,推理速度比传统方法快接近4倍。

Incomplete Utterance Rewriting as Semantic Segmentation——EMNLP-2020——北航、微软

1.2 任务现状

近来不完整对话补全重写任务得到了越来越多的关注,大部分工作采用指针网络或者带有copy机制的seq2seq模型,但是它们都是从头生成改写之后的句子,忽略了一个关键点就是重写之后的语句大部分都是来自原来不完整的输入的。

1.3 方案介绍

不同于从头开始生成,本文将改写之后的结果看做对不完整的输入进行一系列编辑之后的结果(比如:替换substitute和插入insert)。以图1为例,x_3^*可以看做将x_3中的这样替换为阴天,并且在为什么前面插入北京。这些编辑操作是在上下文的词对和不完整的输入之间进行的,类似于语义分割,即:给定词对(即image)的相关特征,模型预测每一个词对(即pixel-level mask)的编辑类型。

<img src="/Users/kangli/Documents/算法工程师/Blog/对话改写/图片 1.png" alt="图片 1" style="zoom: 67%;" />

(1)在多轮对话中,给定上下文(x_1,x_2...x_{t-1})以及待补全的语句x_t,IUR需要基于上下文信息将x_t重写成x_t^*,其中x_t^*表达了和x_t相同的语义。将如何得到x_t^*问题看做语义分割任务。具体来说,拼接所有上下文语句得到长度为M的序列(c_1,c_2...c_{M})。为了表示不同的轮次,可以在每一轮之间插入一个特殊字符[S]。同时,将不完整的输入表示为x=(x_1,x_2...x_n)。于是,可以根据不完整的语句X以及上下文C,通过编辑的方式得到重写之后的语句X^*

<img src="/Users/kangli/Documents/算法工程师/Blog/对话改写/图片 2.png" alt="图片 2" style="zoom:67%;" />

为了建模XC之间的编辑操作,我们定义一个M{\times}N的矩阵Y,其中Y_{m,n}项表示c_mx_n之间的编辑操作。这里定义了3种类型的编辑操作:Substitute表示使用C中的片段替换X中的片段,Insert在x的某个单词前面插入上下文C中的某个片段,None表示没有操作。如图所示,我们可以对X进行如下编辑操作:使用(c_2,c_3,c_4)替换(x_2,x_3),在x_7前面插入(c_6,c_7,c_9,c_{10})。通过在X后面增加一个特殊的单词[E],来确保可以在X之后插入单词。

然后论文提出通过模仿语义分割任务来生成这样的矩阵Y。具体来说,通过捕获CX中单词和单词之间的相关性来构建MxN的特征图。将特征图看做一张图片,生成的单词级别的编辑矩阵Y类似于语义分割任务中像素级别的mask矩阵,从而构建了Incomplete Utterance Rewriting(IUR)任务和语义分割任务之间的关联。

1.4 方案优点

这样的建模具有几个优势:

  • 简单:相较于传统从头开始生成重写语句的方法,该论文中的编辑操作的方法复杂度更低。

  • 快速:这些编辑操作是同时预测的,相较于逐词解码的方法,推理速度更快。

  • 迁移性强:参考IUR和语义分割任务之间的关联,可以将语义分割任务中效果比较好的模型应用于改写任务。

二. 模型

如图所示,该方法首先通过3层神经网络得到单词级别的编辑矩阵;然后基于单词级别的编辑矩阵得到改写之后的句子。由于这个模型的语义分割层是一个U型的结构,因此称之为Rewritten U-shaped Network (RUN)

为了构建单词级别的编辑矩阵,模型经过的3层神经网络分别为:context层、encoding层以及segmentation层。其中,context层为CX中每个单词生成基于上下文感知的表征,基于这个表征,编码层构建了特征图矩阵F来捕获CX中单词和单词之间的相关性,最后segmentation层用来生成单词级别的编辑矩阵。

2.1 Context层

首先将$C$和$X$连接起来,通过bert进行编码,得到每个词语的embedding表示,可记为$(c_1,c_2,...,c_M,x_1,x_2,...,x_N)$

2.2 Encoding层

利用几个相似度函数来编码词语和词语之间的相关性。将$X$中的每一个词语$x_n$与$C$中的$c_m$之间的相关性用D维的特征向量$F(x_n, c_m)$进行衡量。通过拼接`element-wise`相似度、`cosine`相似度,以及学习到的`bi-linear`相似度,表示为:

F(x_n, c_m)=[h_n{\odot}u_m;cos(h_n,u_m);h_nWu_m]
其中W是待学习的参数。不同的相似度函数希望从不同角度建模词语和词语之间的相关性,这对之后编辑类型的分类很重要。然而,这些相关性只捕捉到局部信息,之后还需要用segmentation层来捕捉全局信息。

2.3 segmentation层

将Encoding层得到的特征图$F{\in}R^{M{\times}N{\times}D}$看做有D个通道的图片,将预测单词级别的编辑矩阵$Y{\in}R^{M{\times}N}$的任务转化成语义分割任务,采用类似UNet的网络结构:**两个带有残差连接的下采样层和上采样层**。
  • 下采样层包含2个Conv模块和一个max-pooling层,每个下采样模块将通道数变为原来的2倍。直觉上看,下采样层扩展了每一个单元的感受野,因此为最终的决策提供了更丰富的全局信息。

  • 上采样层包含2个Conv模块和一个deconvolution层,每一个上采样层将通道数减半,并且和上面下采样层中对应的未裁剪的特征图进行拼接作为输出。

  • 最后,采用一个前向神经网络将每一个特征向量映射成3种类型的分布,得到单词级别的编辑矩阵。

    通过融合encoding层和segmentation层,模型能够捕获局部信息和全局信息。

三. 数据

由于数据集只有改写之后的结果,而模型需要的标签是单词级别的编辑矩阵。因此需要自动化生成单词级别的编辑矩阵,并且使用这些样本作为训练集。我们使用下面的流程来构建我们的训练集。

  • 首先,找到XX^*之间的最长公共子序列(LCS);
  • 然后,对于X^*中的每一个单词,如果不存在于LCS中,则标记为ADD;相反地,对于X中的每一个单词,如果不存在于LCS中,则标记为DEL。对于具有相同标记的连续单词合并为一个span
  • 通过span-level的对比,所有X^*ADD的span,如果其对应位置在X正好是DEL,那么就标记为Substitute;否则,这个span就是插入到X中的,标记为Insert

以图1中的样本为例,给定X为什么总是这样X^*北京为什么总是阴天,最长公共子序列是为什么总是。因此,X中的这样标记为DEL,而X^*中的阴天标记为ADD,由于其所处的上下文相同,所以编辑类型为Substitute。相较而言,由于北京没有相对应的成分,因此编辑类型为Insert

四. 应用

需求:针对好车主在线客服中语义不明用户问,根据用户上文或入口信息对其进行改写,使用户意图更加明确。

数据用例:输入为:(入口上文当前问句),输出为:(改写后问句

入口 上文 当前问句 改写后
车险理赔 理赔授权 如何授权 车险理赔授权
非车险保单 平安百万家保险什么东西啊 买车险怎么会加这个险 买车险怎么会加平安百万家保险
退保 车损险退保 如何自助办理 如何自助办理车损险退保

相关文章

网友评论

    本文标题:对话改写模型-RUN详解

    本文链接:https://www.haomeiwen.com/subject/plkiirtx.html