暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开源对话系统架构

AI2ML人工智能to机器学习 2021-02-07
1364

引言

曾经,霹雳游侠的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框架外, 真正要做好一个对话系统,其实包括三大核心:

  1. NLU: 识别用户的对话意图

    1. Intent 识别

      1. 情感:寒暄,抱怨

      2. 任务    

    2. 话题跟踪

      1. 规则驱动

      2. 数据驱动

  2. DM: 理解用户的对话内容

    1. Entity 识别

  3. NLG: 生成合适的对话

    1. 对话生成

      1. 基于模板的

      2. 数据驱动的




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,

  1. 规则的Policy

  2. 记忆的Policy

  3. 数据驱动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阶段框架

  1. Annotator

  2. Skill Selector

  3. Skills

  4. Response Selector

  5. Postprocessor

和Rasa相比,DeepPavlov非常方便在不同阶段测试新的想法。 



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


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



小结:

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

文章转载自AI2ML人工智能to机器学习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论