引言
曾经,霹雳游侠的KITT 2000是70/80后梦想的座驾, 1982年的时候, 一辆会说话的车就是魔术,几乎每一集都有talking car的梗, 40年的科技发展, 越来越多的车开始走向了KITT的理想。 感谢NBC拍出这么精彩的科幻游侠电影,以及CCTV-1当年引进这么好看的美剧!不知道你脑海中有没有想起那魔幻的BGM。第三代庞蒂亚克Firebird的外表依然刻在每个看过的人心中。


其实2016年开始就有人认为,Tesla在蹭KITT的功能表。

如今一个车载对话系统已经不是魔术,而越来越像是必需品。 而学习对话系统最好的办法就是了解一些开源的对话系统。
开源对话系统
KITT的每一集里面, KITT除了执行Michael 的命令外,还会和Michael寒暄。类似的, 根据对话系统可以进行面向情感、面向任务的划分,一般而言,成熟的对话系统,必然含有面向任务框架。 里面用到的技术也往往是金字塔结构的,兼顾端到端和流程控制。

因而, Pipeline方法的面向对象的系统一般分为NLU->DM->NLG的典型3部曲。 基本这就是是目前经典的对话系统都要包括的部分。

这里我们选了符合这个框架的RASA和DeepPavlov两个开源对话系统做概述。
RASA
Rasa是一个开源语音对话系统的框架, 核心是Natural Language Understanding (NLU) 和 dialogue management (DM) 两大块核心系统。NLU pipeline就是训练用户对话的流程。 而DM核心就是如何组织会话行为,而Police往往是行为规范的核心。

除了NLU和DM框架外, 真正要做好一个对话系统,其实包括三大核心:
NLU: 识别用户的对话意图
Intent 识别
情感:寒暄,抱怨
任务
话题跟踪
规则驱动
数据驱动
DM: 理解用户的对话内容
Entity 识别
NLG: 生成合适的对话
对话生成
基于模板的
数据驱动的
DIET
在意图识别的部分, RASA提出了Dual Intent and Entity Transformer (DIET) 架构。 核心思想就是想把Intent识别和Entity识别利用End2End的神经网络框架,组合搞定。
1. DIET 基于Transformer组合CRF的框架, 利用Tansformer的Decoder来进行意图识别, 利用CRF来进行命名识别, 然后组合两者的结果, 找出最相似的意图和命名。

2. DIET的另外一大特征就是组合经典的N-gram特征和预训练的向量特征,融合2大特征作为输入。 这种兼顾甚至用在_CLS_这样列表标签上。
其实早期的RASA这两个模块是独立的, 但是DIET的引入,采用了多任务框架,以及对预训练融合特征的增强,使得效果大幅度提高, 当然成本就是时间开销和硬件要求更高一些。

NLG
而RASA的NLG核心还是基于Slot的模板来生成对话,通过Intent来生成Action,然后通过Slot来替换模板中变量成分。

除了基于模板的方法外, 还有基于规划的,和基于神经网络的方法等。

DM
通常来说DM实现会话行为状态的跟踪和应对Action的输出。而Action的输出通常情况依赖于后台数据的支持和Policy的定制。

DM核心其实是基于Intent和State的Action预测, 或者说是话题跟踪应对。

Rasa的DM核心是3大Policy,
规则的Policy
记忆的Policy
数据驱动Policy:Transformer Embedding Dialogue (TED) Policy

在TED之前, 其实Rasa提出过REDP (recurrent embedding dialogue policy), REDP不同于Transformer,是基于RNN和Memory机制NTM的。

在REDP之前, 微软的HCNs是一个很强大的存在。 实现从Entity到Action的映射。

早期Rasa的HCNs实现大致如下:

至此, 我们较为完整的理解了, NLU识别的Intent之后通过DM的Policy来决定下一个Action,然后再选的Template,改写Slot,生成对话。

当然,更进一步,Rasa还支持利用知识图谱来维护一个庞大的Slots能力。

大致来看, Rasa是非常贴近最新NLP进展的对话系统框架。
DeepPavlov
DeepPavlov背后有2大核心概念, Skill和Chainer。Skill其实大致就是意图的意思。Chainer就是基于Skill的Pipeline的对话管理。

所以整个架构就变得如下:

在项目功能上, Deepavlov和Rasa非常接近, 主要在对话管理和Slot Filling方面功能非常强大。

DeepPavlov背后的框架依然符合NLU->DM->NLG的框架。

DeepPavlov本质就是一个解耦合的5阶段框架
Annotator
Skill Selector
Skills
Response Selector
Postprocessor
和Rasa相比,DeepPavlov非常方便在不同阶段测试新的想法。

主要围绕着Annotators,Skill等框架的实现。

DP-Agent就是基于5个框架的组合:

小结:
简单而言,开源的对话系统的框架依然在高速迭代发展中, 相信不久还有新的架构出现。 从上来看, Rasa更适合工业Faq之上的对话系统部署。而DeepPavlov也非常适合对最新NLP的成果的测试。 相信不久的未来, 每个人都会有自己的KITT系统。




