最近在学rasa的相关知识,本文对rasa的基本框架和如何构架一个rasa等问题进行介绍。
Rasa是一种通过机器学习技术来实现对话系统、机器人开发的工具,所谓对话系统就是用对话的方式实现人机交互的一种方式,我们生活中常见的淘宝客服,就属于其中的一种。
文章目录
1. rasa的基本框架
我们先来简单介绍一下rasa的框架,rasa本质上分成三个部分:rasa nlu、rasa core、rasa X这三个部分相对来说是相对独立的。
1.1 rasa nlu
首先nlu的主要目的是为了实现意图识别和实体抽取
意图识别可以看作是一个短文本的分类任务,只不过他分类的文本是用户发出的一个对话。
实体抽取是抽取句子中的关键元素,也可以称为填槽、slot Filling就是把句子中的关键元素抽取出来
这里rasa本身没有实现高深的技术,是通过sk-learn的方法实现的这两种方法,并没有使用当今前沿的技术来实现两种方法,只不过这两个部分是开源的,也可以根据自己的需要,作出相对应的实现方法的修改。
1.2 rasa core
它是rasa的核心,能够让我们通过写故事的方式来实现整个对话管理,让对话流程正确执行
他的意义是在当前的对话场景下让机器人反馈正确的事情,执行正确的指令。
rasa core通过定义故事的方法来描述对话流程,比如说你想要吃中国菜,我们需要写成这样的一个故事,让rasa core去执行。
通过机器学习的技术来实现对话流程不是rasa是第一家,但是他是和工业结合的最好的一家。
1.3 rasa X
最后rasa X是一个开发平台,可以使得本地开发和线上部署相对独立。
快速的验证对话,这个特点就很适合我们开发者去用,可见即所得是一个很重要的方法,我们这里在改对话逻辑或者训练数据,那里的对话机器人很快就能构建成一个新的机器人给我们用,这个是相对于其他产品更好的一点,现在大家常用的几个机器人系统,给出训练数据,构建成对话系统需要的时间很长,这也是rasa的一个优势所在
2. 如何构建一个rasa
我认为在构建rasa的过程中,最核心的就是三个模块的编写:nlu,domain,stories
2.1 nlu.md
首先我们要进行的就是上面提到的nlu的训练,这里通过nlu.md进行训练。
这里我们给rasa提供训练数据,来教会rasa如何理解用户的信息,当用户发送新的没有看见过的信息时,机器人都能够做到正确的理解用户的意图。
2.2 stories.md
这里的stories.md 和下面要介绍的domain.yml都是在训练rasa core的时候用到的。
stories.md的重点是如何教会机器人回复用户的消息,我们从真实的对话中进行学习,一个story就是一个发生在机器人和用户之间的真实对话。
在这里我们定义的就是一个发生在要询问餐馆信息的一个对话。
2.3 domain.yml
domain在这里的作用类似于一个总和,其中有三大elements:
- intents: bot可以期待的用户会说的东西
- actions: bot可以做和说的(同上uttereance和customed action)
- templates: 定义了bot针对不同的用户输入,作出什么样子的response
通过上面三个文件的编写,对于rasa的训练就基本完成了,一个完成的对话也就生成出来了。
3. rasa&pipeline
第一步:用户输入文字,送入解释器中
第二步:解释器给出nlu的结果
第三步:tracker将输出的embedding传送到policy中
rasa这里操作的方法是,将这些基于时间的embedding都输入到一个lstm里面
第四步:policy给出系统行为
第五步:Tracker记录系统行为,下一次提供给policy使用
第六步:将消息返还给用户