开源任务式问答机器人框架系列--Rasa

  • Rasa
    • data/nlu.md
    • data/stories.md
    • domain.yml
    • config.yml
    • 总结

Rasa

rasa是一个开源的问答机器人框架,rasa可用于构建基于上下文的AI助手,也可用于构建闲聊机器人。
Rasa有两个主要模块:Rasa NLU和Rasa Core,Rasa NLU 用于对用户消息内容的语义理解,主要包括实体识别,意图识别;Rasa Core 用于对话管理(Dialogue management),记录多轮信息,跟踪对话状态。Rasa官方还提供了一套交互工具 RasaX 帮助用户提升和部署由Rasa框架构建的AI小助手和聊天机器人。
创建一个初始的Rasa项目。可在终端运行如下命令:

rasa init --no-prompt

init.py an empty file that helps python find your actions
actions.py an empty file that helps python find your actions
config.yml ‘*’ configuration of your NLU and Core models
credentials.yml details for connecting to other services
data/nlu.md ‘*’ your NLU training data
data/stories.md ‘*’ your stories
domain.yml ‘*’ your assistant’s domain
endpoints.yml details for connecting to channels like fb messenger
models/.tar.gz your initial model

可以看到,一个完整的项目主要包括以上内容。最为重要的是带*号的文件,主要是需要我们定制的用以训练NLU模型和对话管理模型的数据。
以下分别介绍上述文件的主要内容。

data/nlu.md

Rasa NLU是一个开源的自然语言处理工具,其主要作用是识别用户的意图,以及用户消息内容所涉及的实体:

“我想查询广州今天的天气”

NLU将会解析成:

{"intent": "search_weather","entities": {"address" : "广州","date_time" : "今天"}
}

也就是,识别出用户的意图为查询天气,识别的两个实体包括地点和时间,分别是广州和今天。也就是我们常说的填槽。nlu的训练数据在data/nlu.md文件,是以markdown编写的形式,易于理解,示例如下:

## intent:request_weather
- 帮我查下天气
- 天气怎么样
- 我想知道[明天](date_time)的天气
- 请问[北京](address)[今天](date_time)的天气如何?
- [后天](date_time)我去[南京](address),那里的天气如何?## intent:greet
- hey
- hello## synonym:上海
- 上海市
- 魔都

以上即为NLU模块训练所需的数据,其中##intent为用户query的意图,意图底下为训练数据。值得注意的是,该nlu.md文件即是意图分类模型的训练数据,也是命名实体识别的训练数据,例如以上天气查询助手主要实体包括时间和地点,均在训练数据中进行了标注。“请问北京今天的天气如何?”
另外我们还可在nlu.md文件中定义同义词表,比如上海市和魔都都指的是上海,通过定义synonym可以达到实体归一化的目的。
当然训练数据还可以是json文件格式,具体可以查询官网描述。

data/stories.md

story数据用于训练对话管理器模型(Rasa Core),表示的是用户的意图与机器的响应。如下图所示

## happy path
* request_weather- weather_form- form{"name": "weather_form"}- form{"name": null}## happy path
* great- utter_answer_greet
* request_weather- weather_form- form{"name": "weather_form"}- form{"name": null}
* thanks- utter_noworries## unhappy path
* greet- utter_answer_greet
* request_weather- weather_form- form{"name": "weather_form"}
* chitchat- utter_chitchat- weather_form- form{"name": null}
* thanks- utter_noworries

上图举了三个对话实例,##可以理解为注释,happy path表示用户很配合机器,即机器人想要什么信息,用户就给什么信息,*号表示的是用户的意图,-表示的是机器的响应action,比如上图的第二个示例表示的是,用户先跟机器人打招呼,意图为great,此时机器人响应动作为utter_answer_great,然后用户说了一句话,识别的意图为我想查询天气(request_weather),此时机器人响应weather_form(定制的Form Policy),进入循环,直到机器人获取到所有需要的实体信息,然后将“name”置null,返回查询的天气结果,用户表示感谢(thanks),机器人响应utter_noworries,当前轮对话结束。

domain.yml

domain包含了当前机器人可以识别的意图类型,实体类型,slots,以及机器人能够执行的actions,同时机器人可执行的action对应的话术(NLG)一般也在该文件进行指定。可以说该机器人能做什么都可以在domain中一窥究竟。

intents:- greet- thanks- whoareyou- request_weather-
slots:date_time:type: unfeaturizedauto_fill: falseaddress:type: unfeaturizedauto_fill: falseentities:- date_time- addressactions:- utter_answer_greet- utter_answer_thanks- utter_answer_whoareyou- utter_ask_date_time- utter_ask_address- action_default_fallbackforms:- weather_formresponses:utter_answer_greet:- text: "您好!请问我可以帮到您吗?"- text: "您好!很高兴为您服务。请说出您要查询的功能?"utter_answer_thanks:- text: "嗯呢。不用客气~"- text: "这是我应该做的,主人~"- text: "嗯嗯,合作愉快!"

如上图所示,从domain.yml中我们可以知道当前机器人支持的意图,实体,slots,以及actions分别包括哪些,以及机器人不同action会回复对应的话术。

config.yml

除了nlu.md, stories.md, domain.yml这三个文件,config.yml是另一个不可获取的文件,该配置文件指定了机器人的运作方式,即处理流程,以及将会采取的策略。比如:

language: "zh"pipeline:
- name: "JiebaTokenizer"dictionary_path: "data/dict"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "CountVectorsFeaturizer"analyzer: "char_wb"min_ngram: 1max_ngram: 4
- name: "EmbeddingIntentClassifier"policies:- name: EmbeddingPolicyepochs: 100max_history: 5- name: FallbackPolicyfallback_action_name: 'action_default_fallback'- name: MemoizationPolicymax_history: 5- name: FormPolicy

从上图我们可知道,处理中文的问答任务的流程大致为,先用jieba对用户query进行分词,然后提取regex特征,并采用CRF进行实体识别。进行意图识别采用的分类器为EmbeddingIntentClassifier,其网络的输入特征通过CountVectorsFeaturizer进行抽取。而Rasa Core的action决策采用的是EmbeddingPolicy(也是一种分类器),若对话中途停止则采取FallbackPolicy,MemoizationPolicy表示一个session最多存储5轮对话,FormPolicy表示采用基于Form的策略,类似也有其他的基于深度学习的策略,需要自己实现。
定义了以上文件之后,即可使用如下命令进行训练:

rasa trian

训练的模型存储在model/文件夹下,以.tar.gz结尾。
训完可通过在终端中输入如下命令进行交互式体验:

rasa shell

示例如下:

总结

Rasa框架采用python语言编写,将Rasa NLU及Rasa Core较好的进行解耦,对于用户而言,需定义自己的nlu数据,及stories,指定pipeline,及policy。较为复杂的是,当需要定制不同的action,及policy时,我们需要实现其对应的方法。
Rasa框架可以结合现在流行的深度学习模型进行意图的识别及action决策,还可以结合知识图谱进行搭建。后续有时间将把相关的实践进行文档记录。

开源任务式问答机器人系列之rasa篇相关推荐

  1. 中文检索式问答机器人模型

    检索式问答机器人最典型的一个例子就是FAQ客服机器人. 什么是FAQ呢? 简介:在智能客服的业务场景中,对于用户频繁会问到的业务知识类问题的自动解答(以下简称为FAQ)是一个非常关键的需求,可以说是智 ...

  2. 模块式开发 java_Java9系列第8篇-Module模块化编程

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  3. Rasa课程、Rasa培训、Rasa面试系列之 Rasa对话式 AI 网络研讨会回顾

    Rasa课程.Rasa培训.Rasa面试系列之 Rasa对话式 AI 网络研讨会回顾 Rasa公司在网络研讨会系列"对话式 AI 的企业成功"中采访了Rasa公司的两位客户,以了解 ...

  4. 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人

    摘要:使用华为云EI智能机器人技术,从0到1开发一款开源知识问答机器人. 前言 最近有幸参与了开源社开源问答机器人的知识库编写,碰巧看到华为云也有类似的智能机器人,抱着试一试的心态,我开始了EI智能机 ...

  5. 开源对话机器人框架:Rasa概述【中小型公司使用Rasa框架,降低准入门槛。灵活性不够高】【可以本地部署】【保护数据隐私(其他框架需要将自己的数据上传到框架官方云服务器,不安全)】【可以重写一些类】

    一.Rasa安装与使用 1.安装 pip3 install rasa-x --extra-index-url https://pypi.rasa.com/simple 2.创建项目 rasa init ...

  6. Python快速构建中文问答机器人——检索式机器人

    文章目录 项目地址 任务描述 1. 观察数据 2. 提取数据 3. 过滤数据 4. 人工过滤 5. 问答机器人 备注 参考文献 项目地址 本文所有代码及数据集已上传 Retrieval-Bot 任务描 ...

  7. 自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

    自然语言处理NLP星空智能对话机器人系列:Transformer 101问答集 第一问 Gavin大咖:请大家多多贡献问题,我们共同做好Transformer 101 问答,送个全世界不同国家的Tra ...

  8. 机器人对话常用语模板_原来AI也可以如此简单!教你从0到1开发开源知识问答机器人...

    摘要:使用华为云EI智能机器人技术,从0到1开发一款开源知识问答机器人. 前言 最近有幸参与了开源社开源问答机器人的知识库编写,碰巧看到华为云也有类似的智能机器人,抱着试一试的心态,我开始了EI智能机 ...

  9. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes

    Rasa课程.Rasa培训.Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes Mosig 博士 Dialogue Transformers第二作者 在 Rasa,我们的团队正 ...

最新文章

  1. java读取配置文件信息
  2. smarty模板截取字符串乱码问题完美解决```````
  3. python入门与提高实践,Python基础06:功能增强与实践,基础知识,学习,函数,加强,及,练习...
  4. python变量类型-Python 变量类型详解
  5. oracle备份片校验,oracle rman 备份日志单独备份和交叉校验
  6. bootstrap-datetimepicker bootstrap-datepicker bootstrap-timepicker 时间插件
  7. 计算机键盘音乐好汉歌,好汉歌 MIDI File Download :: MidiShow
  8. memcache和memcached区别
  9. python获取手机号码归属地_Python批量获取并保存手机号归属地和运营商的示例
  10. 拳打苹果 脚踢三星 国产品牌占据泰国手机市场超半数份额!
  11. Net窗体程序设计总结
  12. 程序员的职业技能不止于敲代码!
  13. L1-061 新胖子公式 (10 分)-PAT 团体程序设计天梯赛 GPLT
  14. R语言︱非结构化数据处理神器——rlist包
  15. httd及其ab测试工具
  16. CISP证书有什么作用?考试难度大吗?
  17. codelite14中文语言包_CodeLite中文语言包
  18. RGB,ARGB颜色值的表示表示
  19. 平安科技面试问题整理
  20. js中offset、client、scroll【总结】

热门文章

  1. python练习——识别大疆无人机照片的属性信息,读取经纬度、拍照时间等,并将经纬度转换为模糊地址
  2. 抖音快手拍什么视频容易涨粉
  3. PHP学习笔记(一)
  4. 跳一跳python源码下载_微信跳一跳python程序
  5. JavaScript 中级(三)
  6. xiyou linux 2018面试题基本知识点
  7. 斋藤康毅-深度学习入门 学习笔记一
  8. CentOS 网口bond
  9. linux取消磁盘的密码,linux grub的启动加密及删除恢复方法
  10. apple 开发者账户 Bundle Identifier 问题