文本摘要是NLP领域一个重要的任务,它以凝练的语句去描述原始文本中的主要信息。文本的形式是多种多样的,其中,对话文本是人们在不同交流场景下产生的交互式文本。提取对话中的主要信息,在实际应用中可以减少人理解的时间,也可以更好地辅助后续可能的任务。
本篇文章会探究对话文本的特点和对话摘要的实现,基于三个不同的对话场景(会议、医患沟通、客服对话),分别介绍一篇有代表性的近期顶会paper,并在最后总结不同对话文本特点对应的解决方案。
引言
当前,对文本摘要的研究主要集中在新闻领域,而从广泛的对话文本(包括会议、访谈、辩论、医患沟通、客服对话和日常聊天等)中提取关键信息,也有着重要的价值和应用场景。但直接把新闻摘要的模型和方法移植到对话文本上,并不能获得期望的效果,因为对话文本有着它不一样的特点:
1、角色交互:对话文本是有两个或多个角色参与的交互式文本,每个角色差异较大,有着各自的观点和态度;
2、文本超长:对话文本很长,一般都比新闻文本要长;
3、话题跳转:对话过程中,经常会有话题的跳转;
4、数据匮乏:相比新闻摘要数据集,公开的对话摘要数据集太少。
以上是对话文本的特点,其实也是对话摘要方案要解决的难点。不同对话场景下的侧重点不一样,下面会在会议、客服和医患场景下,介绍对应论文如何去解决该场景下的难点问题。
会议场景
会议场景下的对话摘要,其实就是会议纪要,让参会者和未参会者都可以快速回顾和了解会议的主要内容。
会议文本,一般都很长很长,角色众多且不固定,又因为会议的私密性,公开数据集很少。下面这篇 EMNLP2020 的文章 [1] ,在一个模型中,通过针对性的设计来尝试解决这些问题。
这篇文章提出了一个 Hierarchical Meeting summarization Network (HMNet) 模型,它的模型结构图如下:
HMNet 是一个 Hierarchical Transformer,能够融合整个对话文本和角色信息,端到端地生成会议摘要。
它包括两个 Encoder,一个是 Word-level Encoder,输入是一轮对话,指某一个角色连续说的话,并会在最前面加上一个 [BOS] 开始标志位,其在最后一层的输出作为本轮对话的语义向量,这一点和BERT一样;另一个是 Turn-level Encoder,它的输入是每轮对话的语义向量,也就是上一个 Encoder [BOS] 位向量,并会在后面concat上这轮对话说话者的角色向量。
不同于一般的 Transformer Decoder, 在 HMNet Decoder 中,每一个 Block 块会有两个 Cross-Attention 层,先对 Word-level 信息做 Attention,再对 Turn-level 信息做 Attention,以此去融合整个对话的信息。
针对角色交互问题,HMNet 对每一个会议参与者都设计了一个角色向量(role vector),如产品经理和开发人员… 让模型去感知不同角色的差异,文中的消融实验也验证了,角色向量的增加对摘要生成效果,有着不错的提升。
针对文本超长问题,HMNet 对文本进行层次化的理解,先表征每轮对话,再理解整通对话,不需要做截断,也不会因为 Attention O(n^2) 的复杂度而要求过高的内存资源。但因为不同轮次之间没有token级别的 Attention ,token表示上会不及完全的 Attention 。
HMNet 所有参数都是随机初始化,并完全从0开始训练的,因此对训练数据量有着较大的要求,而公开的会议数据集并不多。论文通过将公开的新闻摘要数据构造成对话文本的形式,对 HMNet 进行预训练,再在会议数据集上微调的方式,解决数据匮乏的问题。
具体构造方式是 concat M篇新闻文章变成一个 M人的会议文本,每篇文章中的每句话,作为当前角色的一轮,并将M篇文章的每轮随机地交织在一起,模拟对话的交互结构,同时,将每篇文章的摘要合在一起作为最终的对话摘要。虽然这样得到的文本不是真正的对话,但让模型去学会摘要任务,去感知角色信息,能给后面基于会议数据的微调起到不错的预热效果。
HMNet 在一个模型中,采用层次结构、角色向量和跨领域预训练的设计,针对性地解决了会议对话文本的多个难点问题。
客服场景
客服场景,一般是用户和客服两个人的对话,去解决一个或多个问题,会涉及话题的跳转,还有很多无意义的口水句,客服对话摘要则需要去捕捉每一个话题的核心内容。
下面这篇 AAAI2021 的文章 [2],从名字也可以看出来,主要是去解决客服对话过程中话题跳转的问题。
论文引入了神经主题模型去捕捉对话中的主题信息,如下图(a)所示,基础的神经主题模型本质是一个无监督的变分自编码器,通过重构输入,获取中间的隐层向量作为主题向量,更多细节可以参考:基于深度学习的主题模型研究 [5]。
论文则改进了神经主题模型,如上图(b)所示,使其能区分有价值主题和无意义主题。上面那条通路是去重构参考摘要中的词 s,对应有价值主题;下面的通路是去重构对话内容中除开参考摘要的词 d-s,对应无意义主题。这也使得改进后的神经主题模型变成了一个有监督的学习过程。
同时,论文将改进的神经主题模型分别应用到客服对话,用户对话和完整对话,用不同的主题向量去表征不同角色的主题信息,并 concat 到一起去辅助抽取(utterance extractor)和生成(abstractive refiner)两阶段的对话摘要模型。
上图中间部分的 Topic-Informed Attention Mechanism 是融合了主题信息的 Cross Attention,通过类似 Pointer Network 的方式让模型学到对 query-based attention 和 topic-guided attention 的自动选择,前者的 Q 是来自 Decoder 的输入,后者的 Q 是来自 Topic Model 的主题向量,改造后的 Cross Attention 会替换原始 Transformer Decoder 中的 Cross Attention。
为了让模型感知角色交互信息,抽取阶段会在对话的每一句前面加上一个角色 token ,去表示这句话的说话者。为了让两阶段模型能够联合训练,使用了策略梯度的方法,这样第一阶段的抽取就不需要标注,但也会增加模型训练的难度。
神经主题模型的加入,对于往往包含多个主题的客服对话摘要有很好的加成作用,让模型能够感知主题的跳转,识别无意义的话术,并捕捉每一个主题的核心内容。
医患场景
医患场景下的对话摘要,和上面的会议与客服场景有一些差异,它不是去得到一个归纳性的摘要,而是有确定性的诉求,比如摘要中需要包括:用户的病情,医生的诊断等。
实际上与 query-based summarization 有点类似,只不过医患场景下的 query 并不是多种多样的,而是确定性的诉求。下面这篇 ACL2021 的论文 [3] 就是用模块化的摘要技术去生成医患对话的不同诉求摘要。
医患对话摘要包括四个部分,SOAP:(Subjective information ) 患者报告的主观信息; (Objective observations) 客观观察,例如实验室结果; (Assessments) 医生的评估和诊断; (Plan) 未来的治疗计划,包括诊断测试、药物治疗。而且,这四部分还会被再细分为15个 subsection,但这个在论文中没有具体描述。
论文中的医患对话参考摘要,是SOAP四个部分的 concat,并且摘要中的每个句子都在对话中标注了它的支撑句,也就是这个句子的归纳来源。而基于如此的数据集结构,论文把医患对话摘要任务分解成了先抽取后生成两个子任务,并实验了四种对话摘要方案,按照对生成模型的依赖排序如下:
CONV2NOTE:没有抽取阶段,直接端到端地从对话生成摘要。
EXT2NOTE:抽取模块会预测出所有的关键句,但不区分关键句对应哪一个诉求,生成模块基于抽取出的关键句产生完整摘要。
EXT2SEC:抽取模块在预测关键句的同时,会分类到具体的诉求,生成模块再用这部分关键句去生成对应诉求的摘要,有几个摘要诉求,生成模块就对应生成几次。
CLUSTER2SENT:在EXT2SEC抽取模块基础上,还会对每个类别下的关键句再进行聚类分割,用聚类得到的每个片段,去生成摘要中的一句话。
下图就是使用 CLUSTER2SENT 生成的一个医患对话摘要示例:
图中第二列的紫色框被抽取模块分类为一个子诉求片段,第三列它又被聚类分割为了两个子片段,每个片段对应生成摘要中的一句话。
这篇论文没有提出新颖的模型,都是选用现有的模型去实现它描述的四种对话摘要方案。这四种对话摘要方案实际上可以看作是对现有非纯抽取式摘要方法的一个归类总结:
CONV2NOTE是纯生成式;EXT2NOTE可以看作是过滤了无意义句之后的生成式;EXT2SEC是在抽取关键句的同时,还对关键句做了分类,像一个序列标注任务,只不过标注的对象不是token,而是sentence;CLUSTER2SENT则是EXT2SEC的更精细化版本。
可以看出,四种方案的抽取模块越来越精细,论文实验也验证了效果的逐步提升。相比生成,抽取是更简单,更可控,也更有解释性的模块。当抽取做的越好时,对生成的依赖就会越小,但这对标注的要求也会越高。
总结
相比于新闻文本,对话文本有着角色交互、文本超长、话题跳转、数据匮乏等特点,在不同的对话场景下,对话摘要方案的侧重点可能不一样,但都会对上述(部分)对话摘要特点去做针对性的设计,下面尝试做一个简单的总结:
角色交互:在对话摘要任务中,让模型去感知角色信息,分辨不同角色的内容,是一个很重要也很必要的设计。
-
一般原始对话文本中,就包含 “xx:” 这样的角色标识,如果加到模型的输入中,实则是对角色的一个软编码,不过有可能会在一定程度上影响句子的连贯性。而像上面客服场景介绍的论文,在每句话前面加上自定义角色token,和 “xx:” 这样的角色标识其实是基本相同的效果。 -
对每个角色设计对应角色向量,如上面会议场景介绍论文一样,或在BERT中,使用 Segment Embedding 作为角色向量,都是一种硬编码方式,不影响句子连贯性,但对角色的扩展性较差,适用于确定性角色场景,如客服场景。
文本超长:对话文本一般很长,其中也有较多无意义的话,如果把整通对话一次性输入模型,对硬件资源和模型能力都是一个考验。
常见的解决方案包括:规则方案,两阶段方案,两层次方案,长输入模型方案
- 规则方案可以通过正则、常见口语表述等人工规则去掉对话中的无意义话术,一般做为预处理层,无法完全解决文本超长的问题。
- 两阶段方案一般将任务分为抽取和生成两阶段,抽取模块提取关键句,去除无意义句,然后交由生成模块,抽取模块完成的越精细,生成模块的负担就会越小。
- 两层次方案是将长文本做层次化分解,可分为word-level, sentence-level, turn-level 和 section-level 等,让模型先做层次化理解,再做融合或直接取最上层的表征用于后续模块。
- 长输入模型方案是采用能接受长输入的模型,如将 self attention 改造成 sliding window attention + global attention 的 Longformer,能接受长达 16K tokens 长度的输入。
- 在来自 EMNLP2021 的文章 [4] 中,基于长文本对话摘要数据集,对上述后三个方案做了实验对比,表明两阶段方案有最好的效果。
话题跳转:这是对话类数据一个比较显著的特点,而摘要一般需要去捕捉每一个主题的核心内容。
数据匮乏:因为对话文本的私密性,开源的数据很少,在一定程度上限制了对话摘要技术的发展。
对话摘要,是文本摘要的一个子方向,在近几年受到了越来越广泛的关注,在各大顶会中也有了不少相关的paper,本文是对对话摘要的一个简单概述,希望能给大家带来一点启发和帮助。
其实,哈工大 SCIR 实验室已经有过对话摘要相关的概述分享 [6],它是大而全的,能让你看到对话摘要的过去、现在和未来。而本文是从技术实现的角度,在三个典型对话场景中,各选择了一篇有代表性的论文,介绍了其基于对话文本不同特点做的针对性的解决方案,并做了对应的方案总结。两篇概述分享并不重复,会是一个互补的形式,共同食用效果更佳。
参考
[1] EMNLP2020: A Hierarchical Network for Abstractive Meeting Summarization with Cross-Domain Pretraining
GitHub:https://github.com/microsoft/HMNet
arXiv:https://arxiv.org/abs/2004.02016
[2] AAAI2021:Topic-Oriented Spoken Dialogue Summarization for Customer Service with Saliency-Aware Topic Modeling
Github:https://github.com/RowitZou/topic-dialog-summ
arXiv:https://arxiv.org/abs/2012.07311
[3] ACL2021:Generating SOAP Notes from Doctor-Patient Conversations Using Modular Summarization Techniques
GitHub:https://github.com/acmi-lab/modular-summarization
arXiv:https://arxiv.org/abs/2005.01795
[4] EMNLP2021: An Exploratory Study on Long Dialogue Summarization: What Works and What’s Next
arXiv:https://arxiv.org/abs/2109.04609
[5] 基于深度学习的主题模型研究:http://cjc.ict.ac.cn/online/onlinepaper/hjj-2020514180351.pdf
[6] 赛尔笔记| 对话摘要简述:https://zhuanlan.zhihu.com/p/380959946
|