0%

引言

机器学习在对话式代理(conversational agent)上已经取得了巨大的进展,尤其是采用了深度学习之后。然而大多数工作都遭受着缺乏数据的困境,因为为代理(复杂到能够完成有意义对话的代理)设计一个样本有效的学习算法是非常有挑战的。在其他的简化版本之中,这一挑战导致了只能将代理之间的交互视为单个(多个代理交互更难)代理的学习问题。 本项工作中,我们将对话交互建模为随机博弈的形式,并训练两个交互式代理,每一个代理都拥有不同的角色,它们能够通过自然语言与对方交互。我们首先对每个代理训练了 NLU 和 NLG 神经网络,然后使用 multi-agent 强化学习技术,即 Win or Lose Fast Policy Hill Climbing (WoLF-PHC) 算法。以在高度的不确定(源于每个代理的统计 NLU 和 NLG)以及另一个代理的不稳定行为(因为另一个代理同时在学习)面前学习到最优对话策略。虽然不能完全减少训练 NLU 和 NLG 组件所需的种子数据,但 multi-agent 的设置具有增强它们的效果,允许我们生成原始数据中不存在的对话和行为。

阅读全文 »

2021.06.12 更新:本文已停止更新,大部分内容已经总结至《近年对话状态追踪综述:进展与挑战》。

  1. 任务完成型对话系统论文调研(一):本文是系列文章的第一篇,一开始架构文章的时候没有考虑太多,所以到目前为止只是写了一些基础的内容,并且逻辑有点乱。
  2. 任务完成型对话系统论文调研(二):《一》中大部分内容已总结至此文。
DSTC2 WOZ 2.0 MultiWOZ 2.1

任务完成型对话系统

任务完成型对话系统(Task-oriented Dialog System,TODS),也被称为口语对话系统(Spoken Dialogue System,SDS),下简称为 TODS。

对话状态与对话动作

对话状态(Dialog State,DS)是 TODS 中的一个重要概念,它贯穿了整个系统的运行过程。要理解 TODS,首先需要从对话状态入手。

对话状态也被称为信念状态(Belief State),或者对话信念状态(Dialog Belief State)。这是历史问题,一般在以前的模型中称之为对话状态,现在使用深度学习技术的对话系统称之为信念状态(Z. Zhang et al. 2020),不过如今二者混用,下称之为对话状态。对话状态由槽值对组成,以此呈现用户的目的(Z. Zhang et al. 2020)

在此需要说明很重要的一点。狭义来讲,对话状态指的是一系列槽值对。但是广义来讲,对话状态可以保存任意的对象,因为对话状态的本意是对话的状态。例如还可以保存当前对话的轮数、历史的对话动作、是否已经完成用户的任务、是否超时、根据当前轮所拥有的信息从数据库中查到的一系列数据项等。

对话动作(Dialog Action)由用户意图(Intention)和若干槽值对(通常只有 1 对)组成。一般来说,槽值对的表示方式为 slot=value。但是实际上还有多种不同的表示方式,例如 slot>valueslot in value 等(参考 Plato 框架)。下面如果不做说明,我们还是默认使用 slot=value 的方式。

值得注意的是,对话状态由槽值对组成,对话动作也由槽值对组成。但是对话状态保存的是对话历史中提到的所有槽值对,而对话动作只保存当前轮提到的若干槽值对。

阅读全文 »

总结

  1. 返回所有可能解:递归时返回部分解或者初始化一个全局列表保存所有可能解
    • 题 131 要求返回“解的所有可能”,那么在递归的时候势必需要返回部分解,最后拼装成全部解。或者可以初始化一个全局的列表用于保存解,但是我没这么做过。
  2. 返回所有可能解中的最优解:初始化一个全局列表保存所有可能解
    • 题 1593 符合。但是并不需要真的保存所有解,尝试完一种情况后,删除即可。这样可以节省空间。
  3. 返回所有可能解中的任意解:初始化一个exit变量,当找到一个解时立即设置为True,并在其他的代码中加入判断,当且仅当exit==False时,程序才继续进行

算法思想

比较全的概念:leetcode 回溯法概念

大白话:世界上有许多只能执行穷举法的问题,并且事实上,这些问题解决办法中不存在除穷尽搜索之外的方法。如果问题满足以下的描述就可以使用回溯法:算法从根结点开始枚举所有的解,深度优先。如果当前结点(可以是叶结点,也可以是非叶结点)的解不满足条件,则“回溯”返回,尝试上一个结点的其他子结点,即其他的可能解。直到找到一个可行解,或者找到所有可行解。可以将回溯法的搜索空间想象成一棵 n 叉树。

回溯法基本特征

  1. 结点是用深度优先搜索的方法生成的;
  2. 不需要存储整棵搜索树(事实上,连树都没必要存储,只需要记录路径即可)
    阅读全文 »

hexo-theme-next 主题的 github 页面中提到了如何更新的问题。他们在教程中指出,在更新的过程中可能会遇到“Commit your changes or stash them before you can merge”的问题,其实这就是代表你修改过主题中的源码文件,所以不允许对 next 主题进行更新。这里的源码文件指代比较宽泛,大家最常改的应该是“_config.yml”文件。以下将介绍如何处理:

  1. 前置操作:将自己的博客复制一份,以免修改错。
  2. 使用 git pull 命令,如果出现问题,那就代表你更新成功了。如果出现了上面的“Commit your changes or stash them before you can merge”问题,那就往下看。
  3. 使用 git stash,重置自己的修改,再次使用 git pull,更新完成。
  4. hexo next 主题更新完成后,就代表你之前所有的自定义配置都没了。所以接下来的内容是将它们改回来。

博客的路径如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
D:.
├─blog
│ ├─.deploy_git
│ ├─node_modules
│ ├─...
│ ├─source
│ ├─themes
│ │ ├─next
│ │ │ ├─source
│ │ │ ├─...
│ │ │ ├─_config.yml
│ ├─_config.yml
├─blog_bakup
阅读全文 »

摘要翻译

本文提出 NBT 的改进。现有的 NBT 使用人工制作的 belief state update mechanism,每当模型被部署到新的对话领域,就要涉及到代价颇高的手动重新调整。我们证明,这种更新机制其实可以与 NBT 模型的语义解码和上下文建模部分进行联合学习,从而从 DST 框架中消除最后一个基于规则的模块。我们提出了两种不同的统计更新机制,并证明对话动态可以用非常少量的附加模型参数来建模。

阅读全文 »

论文地址,作者是 Yu Wang et.al.,发表于 2018 年 12 月。

摘要翻译

意图检测和 slot filling 是构建 SLU 的两个主要任务。现在,多个基于深度学习的模型在这些任务上都取得了良好的效果。最有效的算法是基于 seq2seq(or encoder-decoder)的结构,并使用单独或联合的模型生成意图语义标记semantic tags)。然而,以往的研究大多将意图检测和 slot filling 作为两个独立的平行的任务来处理,或者使用 seq2seq 模型来生成语义标记和意图。这些方法大多采用一个(联合的(joint))神经网络模型(包括 encoder-decoder 结构)对两个任务进行建模,因此可能无法充分利用它们之间的交叉影响。本文设计了一种新的基于 Bi-modelRNN 语义框架解析神经网络结构RNN semantic frame parsing network structures),利用两个有关联的双向 LSTMs(BLSTM)来将它们之间的相互影响考虑进去,共同完成意图检测和 slot filling 任务。我们的带 decoder 的 Bi-model 结构在 ATIS 上取得了一流的结果,意图准确率提高了0.5%,slot filling 准确率提高了0.9%。

阅读全文 »

  1. /plato/controller/basic_controller.py,line 415 中,将三个 '/' 改成 os.sep,所有的 controller 都要改。否则会出现 ValueError: Configuration file CamRest_text.yaml not found! 的错误,这是因为 windows 电脑的分隔符是 \\ 而不是 '/'
    • 类似的错误有很多,比如数据解析器,gui_controller 中,都需要改正
    • 建议遇到错误的时候再改,要不然改起来太麻烦了
      阅读全文 »

论文地址,作者是 Nikola Mrkšić,发表于 2016 年。

摘要

现代口语对话系统的核心组成部分之一是 belief tracker,它可以在对话的每一步估计用户的目标。然而,目前大多数方法难以扩展到更大、更复杂的对话领域。这是由于他们依赖:a)口语理解(Spoken Language UnderstandingSLU)模型,需要大量注释的训练数据;或者 b)手工制作的词汇表,用于捕捉用户语言中的一些词语变种。我们提出了一个新的 Neural Belief TrackingNBT)框架,通过将模型建立在表征学习(最新进展的表征学习,即以前没有人用词向量去做过 DST)上以此克服了这些问题。NBT 模型对预训练的词向量进行推理,学习将它们组合成用户话语(user utterances)和对话上下文(dialogue context)的分布式表示。我们对两个数据集的评估表明……(你懂得,不翻译了)。

阅读全文 »

论文地址,论文作者 Alexandros Papangelis 等,发表于 2020 年。 注:由于该论文的重点是提出一个工具包,故以下将只翻译我认为比较重要的部分。

本文主要内容

本论文中,我们提出了 Plato,一个用 Python 编写的灵活的对话 AI 平台,支持任何类型的会话代理架构。包括从标准架构到具有联合训练组件的架构、单方或多方交互,以及任何会话代理组件的离线或在线训练。Plato 被设计成易于理解和调试的形式,并且对训练每个组件的底层学习框架是不可知的(我直接机翻了,我推测大致意思应该是 Plato 支持任意的深度学习框架)。

引言

传统上,对话式 AI 系统(Conversational AI systems)由语音识别(Automatic Speech Recognition, ASR),自然语言理解(Natural Language Understanding, NLU),对话状态追踪(Dialogue State Tracking, DST),对话管理(Dialogue Management, DM),自然语言生成(Natural Language Generation, LG),Text To Speech(TTS) 组成。 随着某些技术的发展,一系列的平台和工具包被提出,以构建对话式 AI 系统。每个工具包很大程度上都是被设计在某个特定的例子中,它们由于某些原因,似乎使得尖端研究与其在生产系统中的应用两部分失去关联。无论如何,对话式 AI 系统变得越来越有用,需要有一个工具包能够在研究与生产之间搭起一个桥梁,并且能够提供一个完整会话体验的快速原型,其需要拥有 ASR、NLU、DST/DM、NLG 和 TTS 功能。目前仅有几个工具包可以完成以上的需要,例如 RASA。

阅读全文 »

概率概论

概率与统计的差异:

  • 概率
    • 概率模型已知,要学会怎么算某些事件的概率
    • Ex:已知一骰子为公平骰,看到偶数的概率为多少?
  • 统计
    • 概率模型未知,要学会怎么从大量的实验结果中去建立概率模型
    • Ex:不知一骰是否灌铅,欲知各点出现的概率模型?
      阅读全文 »