©PaperWeekly 原创 ·作者 | 海晨威

研究方向 | 自然语言处理

文本摘要是 NLP 领域一个重要的任务,它以凝练的语句去描述原始文本中的主要信息。文本的形式是多种多样的,其中,对话文本是人们在不同交流场景下产生的交互式文本。提取对话中的主要信息,在实际应用中可以减少人理解的时间,也可以更好地辅助后续可能的任务。

本篇文章会探究对话文本的特点和对话摘要的实现,基于三个不同的对话场景(会议、医患沟通、客服对话),分别介绍一篇有代表性的近期顶会 paper,并在最后总结不同对话文本特点对应的解决方案

引言

当前,对文本摘要的研究主要集中在新闻领域,而从广泛的对话文本(包括会议、访谈、辩论、医患沟通、客服对话和日常聊天等)中提取关键信息,也有着重要的价值和应用场景。但直接把新闻摘要的模型和方法移植到对话文本上,并不能获得期望的效果,因为对话文本有着它不一样的特点:

1. 角色交互:对话文本是有两个或多个角色参与的交互式文本,每个角色差异较大,有着各自的观点和态度;

2. 文本超长:对话文本很长,一般都比新闻文本要长;

3. 话题跳转:对话过程中,经常会有话题的跳转;

4. 数据匮乏:相比新闻摘要数据集,公开的对话摘要数据集太少。

以上是对话文本的特点,其实也是对话摘要方案要解决的难点。不同对话场景下的侧重点不一样,下面会在会议、客服和医患场景下,介绍对应论文如何去解决该场景下的难点问题。

会议场景

会议场景下的对话摘要,其实就是会议纪要,让参会者和未参会者都可以快速回顾和了解会议的主要内容。

会议文本,一般都很长很长,角色众多且不固定,又因为会议的私密性,公开数据集很少。下面这篇 EMNLP 2020 的文章 [1] ,在一个模型中,通过针对性的设计来尝试解决这些问题。

论文标题:

A Hierarchical Network for Abstractive Meeting Summarization with Cross-Domain Pretraining

论文来源:

EMNLP2020

论文链接:

https://arxiv.org/abs/2004.02016

代码链接:

https://github.com/microsoft/HMNet

这篇文章提出了一个 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() 的复杂度而要求过高的内存资源。但因为不同轮次之间没有 token 级别的 Attention ,token 表示上会不及完全的 Attention 。

HMNet 所有参数都是随机初始化,并完全从 0 开始训练的,因此对训练数据量有着较大的要求,而公开的会议数据集并不多。论文通过将公开的新闻摘要数据构造成对话文本的形式,对 HMNet 进行预训练,再在会议数据集上微调的方式,解决数据匮乏的问题。

具体构造方式是 concat M 篇新闻文章变成一个 M 人的会议文本,每篇文章中的每句话,作为当前角色的一轮,并将 M 篇文章的每轮随机地交织在一起,模拟对话的交互结构,同时,将每篇文章的摘要合在一起作为最终的对话摘要。虽然这样得到的文本不是真正的对话,但让模型去学会摘要任务,去感知角色信息,能给后面基于会议数据的微调起到不错的预热效果。

HMNet 在一个模型中,采用层次结构、角色向量和跨领域预训练的设计,针对性地解决了会议对话文本的多个难点问题。

客服场景

客服场景,一般是用户和客服两个人的对话,去解决一个或多个问题,会涉及话题的跳转,还有很多无意义的口水句,客服对话摘要则需要去捕捉每一个话题的核心内容。

下面这篇 AAAI 2021 的文章 [2],从名字也可以看出来,主要是去解决客服对话过程中话题跳转的问题。

论文标题:

Topic-Oriented Spoken Dialogue Summarization for Customer Service with Saliency-Aware Topic Modeling

论文来源:

AAAI 2021

论文链接:

https://arxiv.org/abs/2012.07311

代码链接:

https://github.com/RowitZou/topic-dialog-summ

论文引入了神经主题模型去捕捉对话中的主题信息,如下图(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 并不是多种多样的,而是确定性的诉求。下面这篇 ACL 2021 的论文 [3] 就是用模块化的摘要技术去生成医患对话的不同诉求摘要。

论文标题:

Generating SOAP Notes from Doctor-Patient Conversations Using Modular Summarization Techniques

论文来源:

ACL 2021

论文链接:

https://arxiv.org/abs/2005.01795

代码链接:

https://github.com/acmi-lab/modular-summarization

医患对话摘要包括四个部分,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] 中,基于长文本对话摘要数据集,对上述后三个方案做了实验对比,表明两阶段方案有最好的效果。

话题跳转:这是对话类数据一个比较显著的特点,而摘要一般需要去捕捉每一个主题的核心内容。

  • 融合主题模型,可以较好的感知主题的跳转,但对整个摘要模型的训练和复杂度会是一个不小的负担。

  • 通过两阶段的方式,让抽取模块对文本进行分类和切割,可以在一定程度上将不同主题内容分割开,但一般需要对应数据上的标注。

数据匮乏:因为对话文本的私密性,开源的数据很少,在一定程度上限制了对话摘要技术的发展。

  • 尽量避免模型从 0 开始训练,充分利用预训练模型,也可以利用相似领域的数据进行 post training。

  • 跨域数据的构造,公开的新闻摘要数据集很多,改造使其匹配对话文本并用于预训练,会是一个不错的模型预热方式。

对话摘要,是文本摘要的一个子方向,在近几年受到了越来越广泛的关注,在各大顶会中也有了不少相关的 paper,本文是对对话摘要的一个简单概述,希望能给大家带来一点启发和帮助。

其实,哈工大 SCIR 实验室已经有过对话摘要相关的概述分享 [6],它是大而全的,能让你看到对话摘要的过去、现在和未来。而本文是从技术实现的角度,在三个典型对话场景中,各选择了一篇有代表性的论文,介绍了其基于对话文本不同特点做的针对性的解决方案,并做了对应的方案总结。两篇概述分享并不重复,会是一个互补的形式,共同食用效果更佳。

参考文献

[1] EMNLP 2020: A Hierarchical Network for Abstractive Meeting Summarization with Cross-Domain Pretraining

[2] AAAI 2021:Topic-Oriented Spoken Dialogue Summarization for Customer Service with Saliency-Aware Topic Modeling

[3] ACL 2021:Generating SOAP Notes from Doctor-Patient Conversations Using Modular Summarization Techniques

[4] EMNLP 2021: An Exploratory Study on Long Dialogue Summarization: What Works and What's Next

[5] 基于深度学习的主题模型研究:http://cjc.ict.ac.cn/online/onlinepaper/hjj-2020514180351.pdf

[6] 赛尔笔记| 对话摘要简述:https://zhuanlan.zhihu.com/p/380959946

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

从会议、医患沟通和客服对话三大场景看对话文本摘要技术相关推荐

  1. 智能客服机器人的场景应用及功能有哪些

    对于客服机器人来说,它是将单一.重复.常见的问题,通过知识库.意图识别.多轮对话等AI技术,替代人工解决大部分咨询问题,实现自助服务,帮助企业升级客服体验,提高服务效率,降低人力成本. 智能客服机器人 ...

  2. 呼叫中心客服系统业务场景应用价值

    呼叫中心客服系统主要用于客户服务中心,如企业的客服热线.热线电话.咨询热线等,由专业的客服人员专门接听处理来电客户的咨询.投诉等问题. 呼叫中心客服系统-客户咨询场景,它是客服系统最重要的应用场景之一 ...

  3. 最全的java对接微信小程序客服功能实现(包含自动回复文本消息、图片消息,进入人工客服)

    java对接微信小程序客服功能实现(包含自动回复文本消息.图片消息,进入人工客服) 第一步:请求校验(确认请求来自微信服务器) 代码如下: @ApiOperation(value = " 微 ...

  4. 开源AI智能客服系统源码 人工智能对话软件源码 完整程序包+搭建教程

    分享一个开源AI智能客服系统源码.人工智能对话软件源码,电脑端+手机端+详细的搭建教程,源码开源可二开. 功能介绍: 是一款人工智能对话系统,它可以陪你聊天,帮你写文章,帮你写论文,帮你写代码,帮你写 ...

  5. 从智能客服说起,看小i机器人如何用AI赋能产业升级改造|M-TECH AI助力中国智造产业论坛...

    介于小i机器人在资本.产业布局等方面都具备了很大的先发优势,他们目前正在为明年在主板上市做准备. "Siri,帮我搜一下镁客网" "小娜,今天天气如何?" 很多 ...

  6. 呼叫中心客服交流三大法宝

    客服呼叫中心是由企业客服座席与客户进行直接互动的,在客服座席与客户互动的整个过程中,三大法宝是必不可少的,即心态.知识.话术. 心态 即客服座席在与客户沟通中所表现出来的心理状态,如亲切.主动.关怀. ...

  7. 公众号客服消息经常忘记看?简单设置,立即提醒查看!

    当客服工作繁忙,打开了多个网页,不在客服后台,能收到消息提示,声音提示吗? 当客服离开岗位,浏览器最小化,不打开网页的情况下,能知道哪个公众号哪个用户发了什么内容吗? 今天就给大家分享这个方法! 第一 ...

  8. php多客服系统,PHP客服系统_ThinkPHP核心多商户版在线客服对接适用场景[PC+WAP+公众号]...

    PHP客服系统安装说明: 服务器系统:Linux + Centos7.x + 宝塔 亲测环境:Nginx 1.18.0 + PHP5.6 + Mysql5.5 运行目录:/public Nginx伪静 ...

  9. 【2022年对话机器人chatbot】SaleSmartly如何解决客服难题

    目前,基于大数据.云计算和深度学习等领先的人工智能技术,对话机器人chatbot智能客服已经可以实现一系列复杂操作,响应客户大部分的需求,快速高效的解决用户问题. 客服软件市场大致经历了三个发展阶段: ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第16期)
  2. 一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路
  3. 设置程序无label
  4. Android图像变化
  5. input file 上传文件格式限制
  6. 华为如何拍火烧云_华为手机拍照功能介绍-设置通用功能
  7. Java:在JPA中使用规范模式
  8. OneNand、Nand和Nor三种Flash的区别
  9. virtualbox 虚拟化问题
  10. 构建复杂的应用程序 —— 重用与重构
  11. 网卡重启影响nfs吗_nfs常见问题解决办法
  12. zynq中interrupts的学习笔记(一)
  13. 解决fiexd和transform一起用导致的失效问题
  14. 使用NVivo完善定性编码的艺术
  15. 腾讯云 python sdk_腾讯云CDN python SDK
  16. 3.7V转3V超低功耗稳压芯片
  17. 模型转换:pth转onnx
  18. MAC清除Launchpad 应用程序 图标
  19. 12.1 hashlib--安全的哈希计算和签名库
  20. 广义相对论和狭义相对论到底是讲什么的?

热门文章

  1. 节点服务器虚拟网络,虚拟网络功能节点放置研究
  2. ERNIE-GeoL:“地理位置-语言”预训练模型
  3. Python单元测试最佳实践
  4. win7系统备份还原软件_收藏备用!操作系统的快速备份与还原技巧
  5. [转]在WPF中自定义控件 UserControl
  6. centos7安装redis的正确姿势
  7. spring-data-redis 中使用RedisTemplate操作Redis
  8. Nginx命令与配置详解
  9. 【emWin】例程十六:窗口管理器
  10. C#简单实现LRU缓存