<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [导论:什么是我所说的 Conversational Robot](#%E5%AF%BC%E8%AE%BA%E4%BB%80%E4%B9%88%E6%98%AF%E6%88%91%E6%89%80%E8%AF%B4%E7%9A%84-conversational-robot)
- [Conversational Robot 的来历](#conversational-robot-%E7%9A%84%E6%9D%A5%E5%8E%86)
- [简单的来说](#%E7%AE%80%E5%8D%95%E7%9A%84%E6%9D%A5%E8%AF%B4)
- [从人机交互的角度看Conversational Robot](#%E4%BB%8E%E4%BA%BA%E6%9C%BA%E4%BA%A4%E4%BA%92%E7%9A%84%E8%A7%92%E5%BA%A6%E7%9C%8Bconversational-robot)
- [从机器人的角度来看Conversational Robot](#%E4%BB%8E%E6%9C%BA%E5%99%A8%E4%BA%BA%E7%9A%84%E8%A7%92%E5%BA%A6%E6%9D%A5%E7%9C%8Bconversational-robot)
- [内部组件,从Dialogue System的主要骨架说起](#%E5%86%85%E9%83%A8%E7%BB%84%E4%BB%B6%E4%BB%8Edialogue-system%E7%9A%84%E4%B8%BB%E8%A6%81%E9%AA%A8%E6%9E%B6%E8%AF%B4%E8%B5%B7)
- [语音识别(ASR)](#%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%ABasr)
- [自然语言理解(NLU or SLU or LU)](#%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3nlu-or-slu-or-lu)
- [Dialogue State Tracker & Dialogue Policy](#dialogue-state-tracker--dialogue-policy)
- [自然语言生成 NLG](#%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%94%9F%E6%88%90-nlg)
- [语音合成 TTS](#%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90-tts)
- [问答系统 QA System](#%E9%97%AE%E7%AD%94%E7%B3%BB%E7%BB%9F-qa-system)
- [问答匹配 Question & Answer Selection/Matching/Searching](#%E9%97%AE%E7%AD%94%E5%8C%B9%E9%85%8D-question--answer-selectionmatchingsearching)
- [IR-based](#ir-based)
- [Knowledge-based](#knowledge-based)
- [Chatbot](#chatbot)
- [template-based](#template-based)
- [neural-based](#neural-based)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 导论:什么是我所说的 Conversational Robot
包括 Dialogue System, QA System, Chatbot 简述。
下面大部分文字是整体的介绍,当然要完全把这三个部分都详细说完,可能就够一本书了,没几百篇论文的阅读出不来。
主要是因为每个系统的每个实现方法经常都是独立的一个领域,而很少有介绍完整成品的东西,也几乎没有完整的书籍。
## Conversational Robot 的来历
主要是为了避免dialogue和chat这两个词。
Dialogue System 和 Chatbot 都有其比较特定的含义,这里避开他们。
然后使用了 Conversational 这个词。
## 简单的来说
我所定义的
Conversational Robot = Dialogue System + QA System + Chabot + Other Needed Support Components
其中Dialogue System是骨架,其他部分是血肉
其实单独来说,每个系统都可以独立存在。
例如一般的百科全书,如果不严格的讨论,我们可以认为它是一个QA System。
它本身是很有用的,也可以独立存在。
甚至说Chatbot本身,如果应用在心理辅导、婴幼儿陪伴等领域,也可以单独的作为一个应用。
而我之所以把Dialogue System作为主要部分,主要是因为我认为机器人存在的目标最主要是完成任务,我认为传统意义上的Dialogue System,本质就是一个Task-Oriented System。这符合我对于 Robot 的哲学理解,即执行任务是第一要务。
## 从人机交互的角度看Conversational Robot
![从人机交互的角度看ConversationalRobot](从人机交互的角度看ConversationalRobot.png)
人与机器有很多交互方式,而语音、语言交互是一项重要的交互方式。
自然语言理解(NLP)包括了语音识别,语音合成,文本理解,文本生成等等范畴,可以说从人机交互的角度来说,Conversational Robot 在这里特指语言的理解、生成这一过程的相关部件。
## 从机器人的角度来看Conversational Robot
![从机器人的角度来看ConversationalRobot](从机器人的角度来看ConversationalRobot.png)
从机器人的角度来讲,一个智能体(Intelligent Agent),从外界环境接受信息,这个信息主要的一个信息来源就是人。
而人能提供例如语音(说话),语言(微信打字),视频(机器视觉),动作(动作、手势识别)等信息。
Conversational Robot 特指接受语言,或者经过转换的语音数据,根据对文本的理解,产生一些执行操作。
执行操作可以由其他部件完成。最终把执行结果返回给人的这一个过程的相关部件。
## 内部组件,从Dialogue System的主要骨架说起
一个传统的Dialogue System如下图所示
![Principal components of a spoken dialog system](PrincipalComponentsOfASpokenDialogSystem.png)
(Jason D. Williams, The Dialog State Tracking Challenge Series: A Review, 2016)
一个更简单的图例如:
![Traditional Pipeline for Task-oriented Systems](TraditionalPipelineForTask-orientedSystems.png)
(Hongshen Chen, A Survey on Dialogue Systems:Recent Advances and New Frontiers, 2017)
### 语音识别(ASR)
图中ASR负责识别语音,对于一条用户的语音输入可能有多个结果
例如不同识别到的文本和对应的可信度
例如用户说(注意是语音):“我要去上海”
结果可能是
```
[
{
"sentence": "我要去上海",
"score": 0.4
},
{
"sentence": "我要去商海",
"score": 0.3
},
{
"sentence": "我要去伤害",
"score": 0.1
}
]
```
实际上很多关于对话系统的文章都没有仔细说这部分,这也是显而易见的,因为语音识别有更专门的领域专家去研究。绝大部分系统的假设都是能拿到比较准确的识别结果,至少是像上面那样的的结果列表,之后的工作。类似的,图中的TTS也是一般被忽略。
### 自然语言理解(NLU or SLU or LU)
这部分在有些资料被称为`SLU`(Spoken Language Understanding),
有的资料也称为`NLU`(Natual Language Understanding),甚至`LU`(Language Understanding)。
也有一些文献称之为`Semantic Decoding`,因为它的结果也被称为`Semantic Frame`,
也就是把用户输入的句子(utterance)转换为了一种Semantic Frame,即抽象出了用户所期望行为的语义。
这部分主要根据语音输入的结果,判断用户意图。
从含义角度来说,输出的是,三个部分内容:
SLOT(S): 问题所需要的数据参数
INTENT: 用户意图
DOMAIN: 问题领域
如(Yun-Nung Chen, SYNTAX OR SEMANTICS? KNOWLEDGE-GUIDED JOINT SEMANTIC FRAME PARSING)的例子:
```
W: tell vivian to be quiet
S: contact=vivian, message=be quiet
D: communication
I: send_text
```
也就是用户输入了`tell vivian to be quiet`之后,
或者这句话的DOMAIN(D)是`communication`,
INTENT是`send_text`,
有两个slot,
分别是联系人`contact=vivian`还有信息内容`message=be quiet`
这些内容会被后续的部件处理。
---
从一些实际应用的角度来说,这部分LU在一些系统里也被描述为会产生潜在的`user-action`列表。也就是“用户想做什么”的行为列表和每种行为的可能性
例如用户输入:“明天晚上的电影”,结果可能是
```
[
{
"user_action": "request(movie_name, date=tomorrow_night)",
"score": 0.5
},
{
"user_action": "request(movie_name, date=tomorrow)",
"score": 0.3
},
{
"user_action": "inform(date=tomorrow_night)",
"score": 0.1
}
]
```
这些列表可能类似下面的行为,其中`Usr`列打对号的就是用户可能产生的行为列表,我们以后会在单独的`NLU`相关章节详细探讨这部分内容。
(Steve Young, The Hidden Information State model: A practical framework for POMDP-based spoken dialogue management, 2010)
![The principal dialogue acts use