0%

任务型对话系统简述

本节简要地概括任务型对话系统,梳理一遍其应用的各项技术。本文的重点是对话状态追踪算法。

信息技术发展的不断进步使人们能够在任何时间、地点以无线连接的方式几乎瞬时地访问信息、应用程序和服务。如今,诸如智能手机和平板电脑已经被广泛地用于访问网络。然而,内容的获取通常仅限于通过浏览器,其依靠传统的图形化界面(graphical user interfaces,GUIs)(López-Cózar et al. 2014)。更先进的人机交互方式亟需被提出,比如拥有更智能、直观和轻便的界面,能够以人类语言交流,提供透明且类人的环境。在影视作品中,通常呈现为智能机器人的形式。然而,目前的技术难以实现这种真正意义上的人类智能。因此,退而求其次,能够以自然语言与人类交流的对话系统受到青睐。

根据其所使用的技术,大致可以被分为基于规则的对话系统(第一代)、基于部分可见马尔可夫决策过程的统计对话系统(第二代)以及基于深度学习的对话系统(第三代)(Dai et al. 2020)。基于深度学习的对话系统与统计对话系统大致相同,只不过其中的各个模块被替换成神经网络模型。本文主要关注基于深度学习的对话系统。此外,由于系统涉及语音交互,在以前也被称为口语对话系统(spoken dialogue system,SDS)。

对话系统大致分为问答、闲聊和任务型三类,本文主要关注任务型对话系统(Task-oriented Dialogue System,TODS)。TODS 旨在为用户完成特定领域中的任务,例如酒店预订、天气查询、景点推荐等。TODS 一般有管道式(pipeline)和端到端(end-to-end)两种实现方式,由于端到端方式的不可控性,目前管道式 TODS 是主流的做法。管道式 TODS 分为六大模块:ASR、SLU、DST、DPL、NLG 和 TTS,每个模块前后相连。下图展示了系统的信息流动。通常,DST 和 DPL 也被并称为对话管理(Dialogue Management,DM)模块。

TODS 的信息流动,来自 (Ni et al. 2021)
TODS 的信息流动,来自 (Ni et al. 2021)

推荐看一些综述了解 TODS 的脉络。

  1. Review of spoken dialogue systems (López-Cózar et al. 2014):推荐看一下,是 2014 年的论文。它从生活应用角度讲述了 SDS 的必要性,介绍了大量深度学习时代以前的技术。内容包括:
    1. 各组件的实现技术
    2. 这些技术的发展并讨论一些现存的应用
    3. 讨论开发范式,包括脚本语言以及移动应用交互界面的开发
    4. 描述情感、人格和上下文模型
    5. 提出一些研究趋势
  2. A Survey on Dialogue Systems: Recent Advances and New Frontiers:暂时还没细看。
  3. A Survey on Dialog Management: Recent Advances and Challenges (Dai et al. 2020):主要介绍对话管理,总结了目前所面临的几项痛点。友情提示:知乎上有官方的中文版。
  4. Recent advances and challenges in task-oriented dialog systems (Z. Zhang et al. 2020)
  5. Recent Advances in Deep Learning Based Dialogue Systems: A Systematic Survey (Ni et al. 2021)

引言

对话状态追踪(Dialogue State Tracking,DST)是 TODS 中一个至关重要的模块。它的目标是监控隐藏在对话历史中的用户目标,并将它们表示为由一系列 (domain, slot, value) 三元组组成的对话状态,读作(领域,槽位,槽值)。DST 与语音语言识别(Speech Language Understanding,SLU)紧密相关 (Ni et al. 2021 ch. 3.2) 并且十分相似,个人认为在预测用户目标任务上它们几乎等价。近年,为了避免 SLU 阶段的的误差传播到 DST,通常使用联合模型,即直接将文本或语音输入 DST 并省略 SLU。为此,DST 需要额外承担领域识别和意图识别两项任务。然而,据我所知,为了简便起见,近几年大部分 DST 论文并没有实现这两项任务。

DST 作为任务型对话系统中承上启下的组件,在科研领域中一直都是研究热点。在深度学习时代之前,DST 通常将 SLU 的输出作为输入,即一系列槽值对及其对应的置信度分数,然后使用基于规则或者基于统计的方式更新对话状态 (López-Cózar et al. 2014)。DST 只扮演了更新对话状态的角色。在进入深度学习时代之后,基于数据驱动的神经对话状态追踪开始成为主流,下如无特殊说明,将其简称为 DST。Henderson, Thomson, and Young (2013) 首次在 DST 中探索了深度学习方法 (Ni et al. 2021 ch. 3.2),使模型不再需要复杂的规则。Mrkšić et al. (2017) 借助词向量解决一义多词的现象,摆脱了人工构建语义词典的束缚。虽然以上工作减少了大量的人力成本并且取得了不错的表现,但仍旧:1)泛化能力不强;2)可扩展性不高;3)多领域 DST 是项挑战;4)数据集稀缺。

构建多领域 DST 的主要难点是数据稀缺。Rastogi, Hakkani-Tür, and Heck (2017) 使用三个不同的数据集(DSTC2、Sim-R,Sim-M)首次提出了一个多领域 DST 模型。Ramadan, Budzianowski, and Gašić (2018) 发布了当时最大的多领域数据集 MultiWOZ 1.0 并提出了一个多领域 DST 模型。之后在此基础上又更新了 MultiWOZ 2.0 (Budzianowski et al. 2018)、2.1 (Eric et al. 2019)、2.2 (Zang et al. 2020)、2.3 (Han et al. 2020) 以及 2.4 (Ye, Manotumruksa, and Yilmaz 2021)。基于 MultiWOZ 数据集,涌现了大量的多领域 DST 模型。此外,近年还有研究人员发布了中文任务型对话数据集,比如 CrossWOZ,RiSAWOZ (Quan et al. 2020)

上文概述了传统 DST 模型以及基于深度学习的基本模型,然后提出了几项缺点并引出了多领域 DST,最后介绍了几种大规模任务型数据集。下文首先对近年(2017—)提出的各种 DST 模型进行归类总结,然后介绍一些 DST 增强技术,最后讨论一下近期的挑战,包括可扩展性、数据稀缺、计算复杂度等。模型的详细对比见下图,“-”代表没有数据,空白代表还没有看过对应内容,其它名词解释为:

  1. Method: cls=分类模型,gen=生成式模型,span=基于跨度的模型(PtrNet),disc=判别式模型。判别式模型的工作流程是计算槽位表征和槽值表征之间的距离。
  2. Aux Input: schema (ISV) 代表由 Rastogi et al. (2020) 提出的 schema,其中包含 intent,domain-slot,value。schema graph 仅代表领域和槽位。ds 和 dsg 分别指的是对话状态(dialog state)和对话状态图(dialog state graph)。
  3. Level: 在《DST分类·根据状态级别分类》中提到了。
  4. SG 代表 slot gate,或者是 slot gate 的替代。√ 代表使用了最常见的 slot gate,× 代表没有使用任何 slot gate 机制。N/A 代表模型不必使用 slot gate。
  5. 模型排序:以 MultiWOZ 2.2 为准,如果没有结果,则按其他结果排序。
模型对比
模型对比

对于这张图在下面进行进一步解释:

问:cls 和 disc 有什么区别?

答:cls 指的是 classification model,disc 指的是 discriminative model。前者只是一个普通的线性分类器,后者指的是计算槽位表征和槽值表征之间的距离。本质上都是分类模型。对于这两个方法,模型的输入都是槽位表征,表征的获取方式类似,主要区别在于 cls 没有槽值表征,而 disc 通过 BERT 或其他特征提取器得到槽值的隐藏状态,我称之为槽值表征。从另一个视角来看,这两个方法几乎相同。试想将分类模型中的权重矩阵的每一行看作一个槽值表征,那么相对于 disc 来说,这些都是随机初始化的表征。所以二者的区别无非就两点:第一,cls 的槽值表征是随机的;第二,cls 多一个 bias。这一点其实在《DST 增强·槽位表征》一节提到了。我认为 disc 的优势在于它的槽值表征具有语义。实验表明,disc 大约好一个点。最后,disc 是个人命名,意味着槽位与槽值之间的判别,其它文献中应该没这种叫法。

问:dialog-level DST 和 history 有关系吗?

答:history 指的是对话历史。dialog-level DST 通常从头开始预测对话状态,如果没有对话历史,那么它自然无法预测前几轮的用户目标。这一点在《DST 分类·根据状态级别分类》中提到了。所以可能就有一种误解,dialog-level 的输入总是包含历史,turn-level DST 总是不包含历史。其实这是无所谓的。对话历史只是辅助信息,turn-level DST 照样可以输入全部的对话历史。

问:Aux Input 和 Extra 有什么区别?

答:Aux Input 代表辅助输入,Extra 指的是额外的信息。Aux Input 可以是图结构的对话状态,可以是槽位描述,也可以是自定义的特殊值。Extra 是与模型无关信息,例如 CHAN-DST 利用了验证集的准确率处理槽位的长尾问题,TripPy 利用 label map 在推理时进行后处理。

阅读全文 »

在网上找了怎么解决,使用 git push origin master 后没有任何反应,但是他们的异常跟我的都不一样。

我在执行 git push origin master 后,光标移到了下一行,然后就没有任何反应了。看起来像是网络问题。

由于本人不怎么用 git,因此对 git 不是很了解。经过分析以及大量的百度搜索后发现,在 git push 之后,理应出现输入用户名和密码的界面,但是我的 git 出现的情况是卡死。

然后,我搜索“git push卡住,不弹出输密码的界面”,其中有人回答,执行 git credential-manager uninstall

我觉得有道理,因为我的 git 是从我的其他电脑上拷贝的,可能用户名密码这块的配置有点问题。在执行命令后,果然可以跳出登录界面了。

灵感来源git 进行 push 不弹出输入账号和密码框

阅读全文 »

  1. 构建一个任务型对话系统:调研
  2. 构建一个任务型对话系统:系统定义
  3. 构建一个任务型对话系统:系统设计

引言

任务型对话系统(Task-oriented Dialog system,TODS)旨在为用户未成特定领域的任务,例如天气查询、景点推荐,甚至是更复杂的多领域任务。在应用方面,这些系统需要提供前所未有的大量服务,其中可能有重叠功能。此外,它们还面对不可预测的用户表达以及未知的领域。在训练方面,部分领域可能没有或者只有少量训练数据。系统应该如何在其中找到平衡点,有能力基本处理未知情况?

本文介绍目前可行的方案:模式引导范式(schema-guided paradigm)(Rastogi et al. 2020b, 2020a),然后进一步描述在构建系统时遇到的各种问题。

阅读全文 »

The environment is inconsistent, please check the package plan carefully

错误信息:运行 conda create -n xxx python==3.7 时,遇到如下错误。

The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:
  - defaults/linux-64::anaconda==2019.03=py37_0
  - defaults/linux-64::numba==0.43.1=py37h962f231_0

分析原因:可能是因为之前运行了 conda clean -t,想要删除一些过期的包,导致一些包产生了不一致性。

解决办法:运行 conda clean --all 删除所有索引缓存、lock files、未使用的缓存包和 tarballs。删除之后,再执行命令就可以了。

阅读全文 »

目前有一些途径可以隐藏指定的hexo文章,但是如何同时禁止其部署到云端呢?我搜了一圈没找到答案。最后我发现 hexo 其实自带这个功能。

使用场景

我们可能在“年轻”的时候写了某些文章,过了几年之后发现这些文章太幼稚了,但是又不舍得删。那么就可以使用本文的方法做到,在保留文章的同时,互联网上的其他人永远也访问不到这篇文章。

使用步骤

操作流程如下:

  1. 使用命令 hexo new draft '你的文章标题',它会在 source/_draft 创建对应的文章。写 draft 的方法和写普通的 post 是一样的。此时我们通过链接去访问这篇文章是访问不到的!
  2. 使用命令 hexo s --draft 或者 hexo g --draft 就可以访问这篇 draft 文章。
阅读全文 »

2020.11.2:暂时记那么多,以后如果有用到,再继续看这篇论文。

预训练目标

本节提出四种无监督预训练目标,其中包括两种可以捕获更好对话上下文表征的新方法。四种训练目标分别为下条语句检索(Next-Utterance Retrieval,NUR)、下条语句生成(Next-Utterance Generation,NUG)、掩码语句检索(Masked-Utterance Retrieval,MUR)以及语句不一致识别(Inconsistency Identification,InI),其中 MUR 以及 InI 为新提出的方法。

本文定义:

  1. 健壮(strong)表征:在整个对话历史上捕获语篇层面(discourse-level)的信息,在语句中捕获语句层面(utterance-level)的信息。
  2. 通用(general)表征:在多种下游任务中都能表现出更好的性能。
  3. 任意 T 轮的对话片段为:\(c = [u_1, \cdots, u_T]\)
  4. 可观测对话回复集合为:\(R = {r_1, \cdots, r_M}\)
阅读全文 »

安装的插件

打开 git,将当前目录切换到你的博客目录。使用 npm ls -dept 0 即可查看,所有你安装的 hexo 插件。但是以防万一,我还是在下面记录了一下(主要是我自己下载的插件,hexo 自带的不算)。

插件名 版本号 状态
hexo-cli 3.1.0 必装插件
hexo-abbrlink 2.0.5 -
hexo-filter-flowchart 1.0.4 -
hexo-filter-mermaid-diagrams 1.0.5 -
hexo-generator-calendar 0.01 -
hexo-optimize 2.5.1 优化网页加载速度
hexo-renderer-kramed - 已废弃
hexo-renderer-mathjax 0.6.0 -
hexo-renderer-pandoc 0.3.0 -
hexo-symbols-count-time 0.7.0 -
hexo-tag-echarts3 1.1.2 -
hexo-wordcount 6.0.1 已废弃
阅读全文 »

修改博客透明度

一般来说大家都在博客里放一个背景图片,但是大部分时候博文都是很长的,导致背景图片无法全部地显示出来。所以很有必要为博文设置一个透明度,使得背景图片若隐若现。

在博客根目录的 _data 文件夹中,新建 styles.styl 在其中写入:

1
2
3
4
5
6
7
8
9
10
11
/* 上半部分的侧边栏 */
.header-inner{
background: rgba(255, 255, 255, 0.82)
}
/* 下半部分的侧边栏 */
.sidebar-inner{
background: rgba(255, 255, 255, 0.82)
}
.content-wrap{
background: rgba(255, 255, 255, 0.779);
}

如果你没有下半部分的侧边栏(next 主题好像可以选择关闭),那么可以删除 .sidebar-inner

樱花特效

详见 网页樱花飘落特效(JS 实现)

注意:此特效与不蒜子插件在某些特殊情况下存在冲突。目前 Next 支持将自定义的文件提取出来放在 _data 文件夹中。如果把加载樱花特效的 js 代码放在 _data/footer.swig 文件的末尾,则处于页脚部分的不蒜子统计不显示。

解决办法:那行代码别放在文件的末尾就行了。

阅读全文 »

论文地址

诸如谷歌助手、Alex 以及 Siri 之类的虚拟助手为横跨多个领域的一系列服务或者 API 提供了一个对话接口。这些系统需要支持越来越多的服务,它们可能具有重叠的功能。而且这些服务中的一部分没有可用的训练数据集。现在公开的任务导向对话数据集不足以解决以上挑战,这是因为他们只覆盖了少量的领域,并且假定每个领域都有一个固定的本体。

本文提出了 SGD 数据集(16k 条多领对话横跨 16 个领域)。我们的数据集在规模上超过了现存的所有任务导向对话语料库,同时也强调了与构建大规模虚拟助手相关的挑战。它为语言理解、槽填充、对话状态追踪以及回复生成提供了一个具有挑战的测试平台。

同时,我们为任务导向对话提出了一个模式引导的范式。其中,模型在一组动态的意图和槽位上进行预测,使用它们的自然语言描述作为输入。这使得单个对话系统可以轻松地支持多种服务,并且有助于不依赖额外的训练数据整合新的服务。

在此范式基础上,我们发布了一个对话状态追踪模型,该模型能够在新的 APIs 上进行 zero-shot 泛化,并且在常规的配置中具有竞争力。

The Schema-Guided Dialogue Dataset

在训练集、验证集以及测试集中有包含 20 个领域,具体信息罗列在表 2 中。我们在这些领域上创建总计 45 个服务或 api 的综合实现。我们的模拟器框架与这些服务进行交互以此生成对话大纲,它是对话语义的结构化表征。然后我们使用了众包的步骤来解释这些大纲的自然语言语句。我们新颖的众包步骤保留了从模拟器获得的所有标注,并且在对话收集之后不需要任何额外的标注。本节,我们将描述详细的步骤,然后对收集的数据进行分析。

阅读全文 »