Rasa
Rasa NLU是一种开源自然语言处理工具,用于聊天机器人中的意图分类和实体提取;主要是理解用户意图,配合rasa_core使用可以实现AI对话。
参考文献
Rasa介绍 对话系统、产品与技术by清华
Rasa开发使用 Rasa_NLU及Rasa_Core模型训练与测试by冰蓝
Rasa使用指南1+2 by爱编程真是太好了
目录
1.Rasa的组成
1.1Rasa Nlu
主要实现自然语言理解(即NLU)功能,本质上就是识别句子的意图和实体。如“买一张去北京的票”,我们可以定义一个意图是“购票”,实体是“北京”和“一张”。
意图识别本质是短文本分类任务(当然在学术界可能称为Intent Detection来和Text Classification分开)。 单纯短文本分类任务的SOTA基本上就是BERT了。
抽取本质是信息抽取任务。 抽取的SOTA现在一般还是BiLSTM-CRF的各种变型,或BERT之类。
现在学术界的主要研究方向是多种工作结合,例如同一模型同时做意图识别和信息抽取,互相配合增加总体准确率。
Rasa的NLU,主要是当前的社区版,主要还是使用了各种开源技术,并没有追求学术上的SOTA。 它使用的工具包括Spacy、sklearn-crfsuite
1.2Rasa Core
笔者认为这是Rasa的核心部分,NLU有各种实现,开源的也有snips nlu等,但是core却独一无二。Rasa Core主要完成了基于故事的对话管理,包括解析故事并生成对话系统中的对话管理模型(Dialog Management),输出系统决策(System Action/System Policy)。
学术上一般认为这部分会包含两个模型
对话状态跟踪(Dialog State Tracking / Belief Tracking)
对话策略(Dialog Policy / Policy Optimization)
对于1.其实Rasa实现很简单,具体在它的论文 Few-Shot Generalization Across Dialogue Tasks, Vlasov et at., 2018 中说的比较具体。就是简单的基于策略的槽状态替换。
对于2.Rasa使用基于LSTM的Learn to Rank方法,大体上是将当前轮用户意图、上一轮系统行为、当前槽值状态向量化,然后与所有系统行为做相似度学习,以此决定当前轮次的一个或多个系统行为
1.3Rasa X
Rasa的可视化编辑工具,更方便NLU、NLG数据的管理,故事的编写。Rasa X可能暂时还不能让所有非开发人员也能快速方便的使用。不过它本质上可以方便开发人员快速开发,快速训练模型验证。
笔者是这么认为的,Rasa X就好像小程序开发也要有个本地开发工具一样,或者像Android Studio那样的工具。本地工具的优点就是方便调试、开发、快速验证、Debug。相对线上的缺点就是速度慢、验证需要等待后台训练、不便于Debug。
可以看出国内外现在很多机器人平台都是完全在线的,例如国外的luis.ai,dialogflow等。这样当然也可以,但是总还是不如有一个可自己训练的终端对开发者更友好。 国内的就不说了。
再举个例子,如Elasticsearch、Docker都是非常棒的工具,但是如果官方开始的时候说:你不能自己本地架设,你只能用我的云服务。这样对于很多开发者来说就必然丧失了很大的兴趣。
2.Rasa的Pipeline
Pipeline 的过程是这样的:1.用户输入文字,送入解释器,即Rasa NLU
2.NLU给出结果,如图
3.从Tracker到Policy,Tracker用于跟踪对话状态,Tracker输出的是Embedding
(1). 用户意图的Embedding
(2). 系统动作(上一步)的Embedding
(3). 实体(槽值/Slot)的Embedding
4.Policy给出系统行为
5.Tracker记录系统行为,下一次会提供给Policy使用
6.返回消息给用户