0%

本文总结:

  1. 观点:通用的预训练模型对任务导向的对话任务没什么帮助,故研发了 TOD-BERT
  2. 选择与 BERT 类似的架构预训练 TOD-BERT,即 BERT-base uncased model(12L 12A 768H)
  3. 在 byte-pair embeddings 加入了两个特殊符号:\([USR], [SYS]\)
  4. 使用 MLM loss 和 RCL 两个函数训练模型
    • MLM 与 BERT 略有不同,TOD-BERT 会在训练时动态执行掩盖、替换。其他详见下面的章节
    • RCL 是一个新颖的做法,详见具体章节

通用文本和任务导向对话之间语言模式的根本差异,导致了现存的预训练语言模型实际上没什么用。本文为语言模型统一了九种人人交互以及多轮的任务导向对话数据集。

为了在预训练阶段更好地对对话行为进行建模,我们在 MLM(Masked Language Modeling)中引入了“用户”和“系统”符号。

阅读全文 »

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

引言

本文由几部分组成,分别调研相应领域的进展以及做出个人认为最优的选择。各部分之间几乎没有关联。

框架

管道式(pipeline)任务型对话系统通常由六大模块组成,每个模块的功能及其算法实现几乎都不相同,外加还需要维护系统中其他模块,例如用户模拟器、multi-agent 交互、数据库连接、网络编程等。这意味着要想从头开发一个任务型对话系统需要熟练使用多种算法,并且了解系统的组成。一个框架可以很好地帮助开发者预先创建上述模块。为此,本人调研了几个框架:PyDial,ConvLab,ConvLab-2,Rasa 和 Plato。

PyDial (Ultes et al. 2017) 基于 python2 开发,现已停止维护,因此不作考虑。ConvLab(Lee et al. 2019) 是 ConvLab2 的前身,因此也不做考虑。ConvLab-2 (Zhu et al. 2020) 基于 python3 开发,并且提供了 pipeline 和 end-to-end 的实现方式以及各个模块的算法实现。总的来说,ConvLab2 是一个比较全面的平台,不过它并不面向开发者,而是面向科研人员,旨在为他们提供一套简单、可控、可复现的环境。ConvLab2 也不是很适合用于开发。

Rasa (Bocklisch et al. 2017) 是丰富的对话系统库,它提供了自然语言理解、对话管理以及自然语言生成几项功能,并且对开发者十分友好。Rasa 还支持在线学习(online learning),即用户可以与 agent 交互以此评估它的行为。然而,Rasa 似乎是一个借助 AI 技术和模板对话强行投入生产环境的商品。它使用一套自定义的话术(story)完成人机对话,关于这套话术的配置需要开发人员自行编写,但不需要理解技术细节,Rasa 会自动完成训练。这似乎对非 AI 领域的开发人员比较友好,从 Rasa 团队写的博客中也可以观察到。

2016 年时,博客写到:除了炒作之外,在构建对话软件之前还需要做很多事。就目前而言,只能结合一点 AI 技术以及大量的人工编码。不过对于风投而言,新的平台意味着是可以绑定和拆分服务的新机会,或者是大公司的新战场。因此,即使没有真正的技术突破,至少还可以赚到一些钱。那在当前阶段,该如何实现这么一个类 AI 的对话系统产品呢?他们的回答是他们也还不知道。

阅读全文 »

由于本人发现,相较于机器学习或者深度学习来说,在国内几乎找不到多少关于强化学习或者深度强化学习的资料,也没有太多学习路线的帖子,所以这里记录一下我的入门经历。

另外,由于本人并不是主修强化学习,我只是遇到了需要使用强化学习的场景(对话系统)。目前我只需要尽可能地实现那个模块即可,所以我也只是选取了 Q-learning 作为我的工具。所以本篇到目前为止(2020.09.27)只涉及 Q-learning 的入门,包括 Deep Q Network。

本人是零基础入门,在学习 Q-learning 之前,只知道什么是马尔可夫假设,不知道马尔科夫决策过程。所以以下的资料应该对初学者很友好。

入门资料

莫烦的教程中有几个小型试验可以拿来做一下,Q-learning 就差不多算入门了。然后他的视频还继续介绍了 DQN,可以算做一个基础的视频。到此为止算是基本上对 Q-learning 有了一定的了解。

注意,对于 1. Q-learning 所提供的资料来说,我反复地按 123 的顺序观看了三四遍,最后才勉强看懂。

  1. Q-learning
    1. 来!让我们一步步走进 Q-learning:这个教程从零开始讲解 Q-learning,但是在讲到 1/4 时(大致在《迭代求解 V 函数和 Q 函数》一节之后),感觉很乱,所以推荐看一下前 1/3 部分,有助于对 Q-learning 建立一个大致的印象。
    2. 强化学习 Reinforcement Learning (莫烦 Python 教程):莫烦的 RL 教程,我只看了其中的 Q-lerning 教程。这是从两个实例出发的,有助于进一步建立一个直观的印象,一个对应用的印象。
    3. A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程):一个 Q-learning 的简单教程,其中进行了简单的数值计算,有助于了解 Q-lerning 在运算时,究竟是怎么样的过程。我认为里面的算法有点问题,但是不妨碍它是一个好教程。
  2. DQN
    1. 强化学习 Reinforcement Learning (莫烦 Python 教程):继续看完 DQN 部分。
      阅读全文 »

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

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

引言

任务完成型对话系统中的挑战比起之前已经有所改变。在 (Xu and Hu 2018) 提出使用 Ptr 缓解低频槽值提取的问题之后,两年之内涌现了许多有突破性的论文。。。

阅读全文 »

总结

这篇论文太难懂了,可能是由于数学太差了,我一直无法理解 \(\lim_{\lambda \to 0} v^*_i = 1, \lim_{\lambda \to \infty} v^*_i = 0\) 这个约束在代码里应该怎么实现,此外对于 \(v\) 向量应该也是要约束在 \([0, 1]\),但是这在代码里应该怎么实现?这个向量应该会随着模型更新的,它完全有可能被更新成小于 0,或者大于 1。

暂且不跟进这篇论文了。

前置背景

该论文对 curriculum learning 和 self-paced learning 做了的一点介绍,如果读者对这两个学习制度不了解,可以有选择地读一下这两个的介绍,否则应该看不懂论文中提出的算法。

课程式学习(Curriculum learning,CL)或者自步学习(self-paced learning,SPL)都是最近(一个 2009,一个 2010)被提出的学习制度(learning regime),灵感来源于人类和动物的学习过程,即从简单逐渐到更复杂的策略。其中,二者具有相似的学习范式,但是有着不同的学习计划。Abs

在 CL 中,课程是由先验知识决定的,并且之后保持不变。因此其高度依赖先验知识的依赖,而忽略了对学习者的反馈(博主注:说白了就是课程由教务组制定,之后的课程保持不变,学生学习的好坏取决于教务组的能力。教务组对应于人类标注者(annotator),学生对应于模型)。在 SPL 中,课程式动态决定的,以适应学习者的学习节奏。Abstract Intro CL 和 SPL 主要的差异在于课程的定义不同

课程(curriculum)决定了一系列的训练样本,基本上对应着一群以学习难度升序排序的样本。

CL 的优点是整合不同来源的先验知识的灵活性,缺点是课程的设计已经被决定,于后续的学习无关。SPL 受限于没有将先验知识整合进训练过程,导致它易于过拟合。由于它们各自都有优点,实际上很难判断谁更好。Introduction

这些学习范式已经从经验上被证明有助于避免不良的局部极小值,并取得更好的泛化结果。(作者贴了三篇论文)Introduction

确实。一条样本如果要简单,那么它的优化过程可能相对来说要简单。那么再优化难的样本可能就只需要花更少的时间。博主瞎猜

关于 CL 和 SPL 具体的算法实现,可以阅读对应的论文,此处不再深入。

阅读全文 »

在 GPU 上训练时报了下面的错,始终无法得到解决。看起来像是由数据量大小引起的,这是因为之前我用小数据训练没问题,但是改用大数据之后就报错了。不过,根据查到的资料显示,别人在其他情况下也遇到过这问题。

1
RuntimeError: transform: failed to synchronize: cudaErrorIllegalAddress: an illegal memory access was encountered

后来在网上看到了别人的讨论,有人运行了以下代码:

1
CUDA_LAUNCH_BLOCKING=1 python train.py

我试了一下,然而过了几个 epoch 之后又报错了。不过加了 CUDA_LAUNCH_BLOCKING=1 之后,错误信息更加详细了,如下:

阅读全文 »

安装必需组件

可以参考文章《我是如何利用 Github Pages 搭建起我的博客,细数一路的坑》中的安装步骤。

但是由于我的是将原先的 hexo 迁移到新电脑,所以有点不一样。

  1. 首先,可以参考上文提到的文章,先安装 git 和 node.js。
  2. 然后,切换到博客的根目录,我的是 D:/hexo/blog。在目录打开 git 命令行,执行 npm install hexo-cli -g。这是在安装 hexo,否则你无法执行 hexo 的命令。
  3. 最后,安装以前安装过的插件。(PS:突然发现可能不用安装这些插件也行,因为它们本身就在你的博客里)