聊天机器人二

概述

比较著名的聊天系统

img

img

聊天机器人的历史

  • 1950: Turing Test

  • 1966: ELIZA, MIT chatbot

  • 1995: ALICE, pattern recognition chatbot

  • 2011-2012: Siri, Watson, Google Assistant

  • 2015: Amazon Alexa, Microsoft Cortana

  • 2016: Bot 元年: Microsoft Bot Framework, FB Messenger, Google Assistant …

  • 2017: 百度度秘,腾讯云小微,阿里小蜜 …

ASR: Acoustic speech recognition: Speech –> Text

SLU: Spoken Language Understanding

img

聊天机器人按照其功能主要可以分为两类

  • 任务导向的聊天机器人(Task-Oriented Chatbot)

  • 有具体的聊天任务,例如酒店、机票、饭店预订,电话目录

  • 也可以做一些更复杂的工作,例如假期日程安排,讨价还价

  • goal-oriented chatbot

  • 非任务导向的聊天机器人(Non-Task-Oriented Chatbot)

  • 没有具体的聊天目标,主要目的是闲聊,能够和用户有更多的交互

  • 也有上述任务导向与非任务导向的混合聊天机器人,同时具备两种功能

按照聊天机器人的聊天领域 (Domain)

  • 对于任务导向的机器人,聊天的领域就是任务的领域

  • 关于某个特定任务的数据库,例如机票信息,酒店信息

  • 也可以同时包含多个领域的信息

  • 对于非任务导向的机器人

按照聊天的发起方

  • 系统主导(System Initiative)的聊天机器人

  • 适用于一些简单的任务:例如很多大公司的自动电话语音系统

  • 用户主导(User Initiative)的聊天机器人

  • 用户主导聊天的主题

  • 系统需要去尽量迎合用户的喜好,陪他们聊天

  • 系统/用户混合主导(Mixed Initiative)

Alexa Prize Challenge 亚马逊举办的聊天机器人大赛

https://developer.amazon.com/alexaprize/challenges/past-challenges/2018/

DSTC 2 & 3

关于构建聊天机器人的建议

  • 迅速创建一个baseline,在这个Baseline的基础上去不断提高

  • 多测试自己的聊天机器人

聊天机器人的评估方法

  • 对于任务导向性聊天机器人,我们可以使用任务是否完成来评估聊天机器人是否成功

  • Efficiency

  • Effectiveness

  • Usability

  • 针对非任务聊天机器人

  • 自动评估

  • 对话进行的长度/轮数

  • User sentiment analysis

  • Positive user responses / total user responses

  • 人类评估

  • Coherence

  • Appropriateness

  • Rating

  • 基于参考答案的评估指标,BLEU, ROUGE, METEOR (有可能不太准确)

也有文章指出,这种基于参考答案的评价指标不能够很好地反映聊天机器人的好坏

所以很多时候,我们对聊天机器人,尤其是闲聊机器人的评估依然依赖于人类评估。人们也开始尝试一些深度学习的模型来预测人类给模型的打分。

构建聊天机器人的三大模块

img

  • Coherence

  • User experience

  • Engagement Management

自然语言理解(Natural Language Understanding)

NLU的主要任务是从文本中提取信息,包括对话文本的意图,文本中关键的信息,例如命名实体,并且将这些信息转成比较标准化的表示方式以供后续聊天机器人模块使用。

面临的挑战

  • 去除口语化的表达

  • 话语重复

  • 讲话中自我修正

  • 口语化的表述和停顿

Frame-based SLU (Spoken Language Understanding)

Meaning Representation Language

把自然语言转变成一种固定的结构化数据表达形式

  • 有固定的语法结构

  • 计算机可执行的语言

Do you have any flights from Seattle to Boston on December 24th?

O O O O O O BDCity O BACity O BDDate IDDate

BiLSTM –> Classification (CRF)

img

Intent classification –> ShowFlight

POS

这种信息抽取的任务往往可以通过HMM, CRF等模型实现

other

B-Departure

I-Departure

B-Arrival

I-Arrival

B-Date

I-Date

conll-2003

意图识别 (Intent Classification)

Coarse-grained

  • 把用户的当前讲话的意图归类到我们提前指定的一些类别中去

  • 给定一句话 (utterance X),给定一系列 intent classes: C_1, …, C_M。预测当前 utterance 属于哪一个intent类别。

  • 同样的intent可能有很多不同的表达方式

  • 我想要预订后天北京到上海的机票

  • 能帮我订一张后天从首都机场到浦东机场的机票吗?

  • 后天从北京到虹桥的机票有吗?

img

命名实体识别

从一段文本中抽取命名实体

命名实体的类别

  • 机构、任务、地点、时间、日期、金钱、百分比

主要的方法

  • 基于HMM, CRF, RNN (LSTM) 等模型的 token 标注方法

关于 semantic parsing 和 slot filling

semantic parsing: 非结构化的语言转换成结构化的指令

https://nlpprogress.com/english/semantic_parsing.html

img

Find_Flight(Boston, New York)

semantic parsing

  • intent classification

  • arguments parsing

Open(“baidumap”, city=”Beijing”);

Open(“Google map”, city=”Beijing”);

Close(“Google map”, city=”Beijing”);

Install(“”)

BERT for Joint Intent Classification and Slot Filling

https://arxiv.org/pdf/1902.10909.pdf

Dialogue State Tracking

DSTC 比赛和数据集

http://camdial.org/~mh521/dstc/

对话管理

什么是对话管理?

  • 一般是聊天机器人的中心模块,控制整个聊天的过程。上面承接NLU,后面连着NLG,负责储存聊天的信息和状态(slot filling),根据已有的信息 (当前聊天记录和外部信息),决定下一步做什么。

  • 负责与一些外部的知识库做交互,例如Knowledge base,各种数据库

Dialogue Context Modeling

  • 聊天的过程往往是高度基于对话记录的,很多时候我们会用代词指代之前的名词或实体

  • 你想聊一些关于科技的还是民生的话题?

  • 聊第二个吧 –> 民生

  • 共指消解 (Coreference Resolution)

  • 有时候我们会省略一些显而易见的信息

  • 你打算什么时候吃饭?

  • 晚上7点(吃饭

  • 有时候我们会省略一些信息(当我们和一些聊天机器人聊天的时候)

  • 放点好听的音乐(放什么音乐?根据历史记录放?选用户最喜欢的音乐?)

  • 开灯 (开什么灯?床头灯?顶灯?客厅的灯?卧室的灯?)

聊天context的来源

  • 聊天历史,例如聊天历史的纯文本内容,聊天记录中提到过的命名实体主题等等

  • 任务记录

  • 对于一个任务型聊天机器人来说,聊天机器人往往会保存一些结构化的聊天记录,这些记录有时候被称为 form, frame, template, status graph。例如对于一个订机票聊天机器人来说,它需要收集用户的姓名,身份证号码,出发机场,到达机场,航班时间要求,价格要求,等等。然后才可以帮助用户做决策。

  • 我们需要知道哪些信息已经被收集到了,哪些信息还没有被收集到。然后根据需要收集的信息确定下一步机器人需要跟用户说什么。

Knowledge Base

根据聊天任务的不同,聊天机器人需要不同的Knowledge Base

  • 对于航班订票机器人来说,需要航班信息的数据库

  • 对于酒店预订机器人来说,需要酒店数据库

  • 对于闲聊机器人来说,各种闲聊中需要用到的信息,新闻、财经、电影娱乐等等

Dialogue Control (Dialogue Act)

根据Context, 聊天历史,knowledge base –> action 可能是rule based 决策,也可能是基于机器学习模型的决策。

  • 根据当前(从用户和其他数据来源)获取的信息,决定下一步需要采取怎样的行动

  • 可以做的决策有:

  • 从用户处收集更多的信息

  • 与用户确认之前的信息

  • 向用户输出一些信息

  • 一些设计要素

  • 由用户还是系统来主导对话

  • 是否要向用户解释自己的动作

对话的主导方

  • 用户主导

  • 用户来控制对话的进程

  • 系统不会自由发挥,而是跟随用户的思路

  • 在一些QA系统和基于搜索的系统中较为常见

  • 系统主导

  • 系统控制对话的进程

  • 系统决定了用户能说什么,不能说什么

  • 对于系统听不懂的话,系统可以忽略或者告诉用户自己无法解决

  • 在一些简单任务的机器人中很常见

  • 混合主导

  • 以上两种系统的混合版,可以是简单的组合,也可以设计地更复杂

Dialogue Control 的一些方法

  • 基于Finite state machine

  • 基于Frame

  • 基于统计学模型(机器学习)

  • AI planning

基于 Finite-State 的聊天控制

Finite State Automata 有限状态机

img

img

  • 系统完全控制了整场对话

  • 系统会一直向用户提问

  • 系统会忽略任何它不需要的信息

这种控制系统的好处是

  • 容易设计和实现,完全使用if-else语句

  • 功能非常确定,可控制

  • 其中State的transition可以基于非常复杂的条件和对话状态

坏处是

  • 没有什么灵活性,真的是一个机器人

  • 只能支持系统主导的对话

Frame-Based Dialogue Control

  • 预先指定了一张表格 (Frame),聊天机器人的目标就是把这张表格填满

img

我们可以预先指定一些问题,用来从用户处得到我们想要的信息

Slot Question
出发地 你从哪个城市或机场出发?
目的地 你要去哪个城市?
起飞日期 你的起飞日期是?
起飞时间 你想几点钟起飞?
航空公司 你有偏好的航空公司吗?
姓名 你的名字叫什么?
证件号码 你的身份证号码是多少? –> 护照

提问的先后不需要确定。用户也可以同时回答多个问题。

根据当前未知信息的组合,系统可以提出不同的问题

  • 未知信息(出发地、目的地):你的旅行路线是?

  • 未知信息(出发地):你的出发城市是哪里?

  • 未知信息(目的地):你的目的地是哪里?

  • 出发地+起飞日期:你打算哪天从哪个机场出发?

只要这张mapping的表格足够全面,我们就可以处理各种情况。

Frame-Based的方法比Finite-State要灵活一些,但本质上还是一个非常固定的方法,在有限的空间里完成一项特定的任务。

这两种方法的主要缺陷在于:

  • 需要花很多时间考虑各种情况,人为设计对话路线,有可能会出现一些情况没有被设计到。

intent (entities), state –> action , reward –> intent (entities), state –> action , reward –> intent (entities), state –> ?

optional below

基于统计模型的Dialogue Control

基于统计学和数据的聊天机器人模型

  • 一套固定的states S 聊天历史

  • 一套固定的actions A 下一句要讲的话

  • 一套系统performance的评价指标 reward 自己设计

  • 一个policy \pi,决定了在一个state下可以采取怎样的action (可能是一个神经网络)根据当前的聊天历史,决定下一句话讲什么

训练方法

  • 监督学习,需要很多的训练数据

  • 强化学习 (Reinforcement Learning),需要优化模型的最终回报 (return)

  • 除了上面的信息之外,还要加入一个回报函数

关于如何做强化学习?我们这里不再详细展开,感兴趣的同学可以阅读

这篇来自Jiwei Li的文章引用量很高

Deep Reinforcement Learning for Dialogue Generation

https://aclweb.org/anthology/D16-1127

在闲聊机器人中的Dialogue Control

  • 可能涉及到的话题空间较大,聊天的控制比较复杂

  • 没有明确的任务目标,很难定义reward函数,可能唯一的目标就是让聊天时间变长

常见的做法

  • 把聊天机器人分成几个不同的模块,每个模块可以负责一些聊天的子话题,或者由一些不同的模型实现

  • 有一个master模块负责分配聊天任务给不同的模块

阶梯化的模块

  • 聊天历史记录模块 (Dialogue State/Context Tracking)

  • Master Dialogue Manager

  • Miniskill Dialogue Manager

很多Miniskill Dialogue Manager是由finite-state-machine来实现的,可以通过引入一些non-deterministic finite automata来增加聊天的丰富度和多样性

action, slot values (key value pairs)

dialogue history

自然语言生成 Natural Language Generation (NLG)

Template based

display_flight_info

action: ask_departure_city

  • 你要从哪个机场离开?

  • 你从哪里起飞?

ask_time

使用模板来生成句子

  • [DEPARTURE-CITY]: 你打算几点钟离开 [DEPARTURE-CITY]?

  • [TOPIC]: 不如聊聊 [TOPIC]?

Retrieval Based

Response R**etri**eval

  • 根据当前的对话场景/历史决定提取怎样的回复

  • 基于retrieval而不是generation的方法

  • 可以使用机器学习的模型来训练抽取模型

  • 可以根据similarity mat**chin**g的方法:ELMo, average, cosine similarity. Google universal sentence encoder. 自己训练一个模型?

  • 可以利用一些别的基于搜索的方法

img

思考一下你会怎么构建这个模型?

可以用它来制作一个问答机器人,回答常见的问题。

基于深度学习的聊天机器人(偏向实验性质)

用Seq2Seq模型来做生成

img

  • 多样性很差

  • 很难控制

Hierarchical LSTM, Hierachical BERT?

在聊天机器人中使用生成模型有一个很大的问题,就是你无法完全掌控生成句子的各种属性,我们无法知道模型会生成什么样的句子。这也导致了基于神经网络的模型,例如Seq2Seq,在有任务的聊天机器人中并没有得到非常多的使用,而是更多地出现在一些娱乐性的项目之中。例如如果我们想要训练一只“小黄鸡”,那么你可以大胆地使用Seq2Seq等神经网络模型。可是如果你想要

Jiwei Li的一系列基于深度学习的Dialogue Generation

Jiwei 在 斯坦福的slides https://web.stanford.edu/class/cs224s/lectures/224s.17.lec12.pdf

Deep Reinforcement Learning for Dialogue Generation

使用深度增强学习来训练聊天机器人。

增强学习 Framework

action: 下一句要生成的话

state: 当前的聊天历史,在本文中使用最近的两句对话

policy: 一个基于LSTM的 Seq2Seq 模型

reward: 对当前生成对话的评价指标,本文中采用了三项指标。

  • Ease of answering: 这句对话是不是很容易回答,不要“把天聊死”。

  • Information Flow: 当前生成的对话应该和之前的聊天记录有所变化。

  • Semantic Coherence:上下文是否连贯。

Adversarial Learning for Neural Dialogue Generation

把GAN的想法用于聊天机器人的评估中。与上文相同,生成器是一个聊天机器人,可以生成对话。判别器是一个打分系统,可以对聊天机器人生成的对话进行打分。然后使用增强学习(REINFORCE, Policy Gradient算法)来训练生成器。

关于如何实现policy gradient

https://discuss.pytorch.org/t/whats-the-right-way-of-implementing-policy-gradient/4003/2

参考该项目 https://github.com/suragnair/seqGAN

Alexa Prize Challenge

2018年冠军 Gunrock: Building A Human-Like Social Bot By Leveraging Large Scale Real User Data

https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexaprize/assets/pdf/2018/Gunrock.pdf

img

img

2017年冠军 Sounding Board – University of Washington’s Alexa Prize Submission

https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexaprize/assets/pdf/2017/Soundingboard.pdf

img

img

参考课程资料

中文聊天机器人的资料

一些公司

数据集

  • movie dialogue dataset

  • ubuntu dialogue dataset

文章目录
  1. 1. 概述
    1. 1.1. 自然语言理解(Natural Language Understanding)
    2. 1.2. Frame-based SLU (Spoken Language Understanding)
    3. 1.3. 意图识别 (Intent Classification)
    4. 1.4. 命名实体识别
    5. 1.5. 关于 semantic parsing 和 slot filling
    6. 1.6. Dialogue State Tracking
  • 对话管理
    1. 0.1. 基于 Finite-State 的聊天控制
    2. 0.2. Frame-Based Dialogue Control
    3. 0.3. 基于统计模型的Dialogue Control
  • 自然语言生成 Natural Language Generation (NLG)
    1. 1. Template based
    2. 2. Retrieval Based
    3. 3. 基于深度学习的聊天机器人(偏向实验性质)
      1. 3.1. Deep Reinforcement Learning for Dialogue Generation
      2. 3.2. Adversarial Learning for Neural Dialogue Generation
  • Alexa Prize Challenge
  • |