初识Rasa Core
Rasa是一套开源的机器学习框架,是构建基于上下文的AI小助手、聊天机器人的一个工具。Rasa主要有两个模块——Rasa NLU和Rasa Core。其中,对话管理Core是整个Rasa不可缺少的一环。
接下来我会借助网络的知识点,结合自身的学习过程和浏览翻阅来完成Rasa Core系列的学习,以下内容都是手敲完成,并无复制粘贴或者粘贴他人图像,谢谢大家的阅读和指正。
文章目录
1、Rasa的安装
在进入cmd下输入以下命令即可。
pip install rasa_core
这里下载的rasa core会比较繁多,容易出现超时的现象。
pip --default-timeout=600 install ** ## 此处的**是对应的包名
结合以上两个代码安装rasa core应该会更加方便一些。
另外就是一般的安装过程。比如官方推荐安装方式(安装rasa和rasa X):
pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
当然如果您不想使用Rasa X,请改为运行如下即可
pip install rasa
2、Rasa Core介绍
Rasa Core中,Core包括两个内容:stories和domain。
首先从中文上讲,前者是故事的意思;后者是领域的意思。两者结合可以认为是“在大致的聊天领域(domain)中结合语境(stories),机器人完成响应问题的回答”。
2.1 Stories
Stories可以理解成对话的场景流程,简单来说,一个故事就是描述一个场景。比如说:“我向另一个人问最近过得怎么样?—>另一个人就要根据自己的实际情况,即好?or不好?—>我来根据另一个人的恢回复做出回复”。
此时这个“我”就是机器人所要做的事。
2.1.1 Stories格式详情
符号 | 说明 |
---|---|
## | story标题 |
* | 意图 |
- | 动作 |
请看以下示例:
## story_happy
* greet
- utter_greet
* mood_happy
- utter_happy
## story_unhappy
* greet2
- utter_greet
* mood_unhappy
- utter_unhappy
此时创建一个markdown格式的目录,将如上内容保存为stories,md即可。
2.2 Domain
domain可以理解为机器的知识库,即怎么构建机器人能够回答的范围(领域:domain),这里定义了意图、动作以及对应动作所反馈的内容。
标识 | 说明 |
---|---|
intents | 意图 |
actions | 动作 |
templates | 回答模板 |
entities | 实体 |
slots | 词槽 |
比如如下的例子:
intents:
- greet
- mood_happy
- mood_unhappy
actions:
- utter_greet
- utter_happy
- utter_unhappy
templates:
utter_greet:
- text: "你好,你今天过的怎么样"
utter_happy:
- text: "那很棒棒哦"
utter_unhappy:
- text: "怎么了呀!可以告诉我吗"
这部分的内容保存到domain.yml上即可。
很明显,在stories中的* greet
对应着domain.yml中的- greet
;- utter_greet
对应着domain.yml中的action
。Rasa Core的任务在于获取到用户的意图后,选择正确的action。这些action就是定义在domain.yml下以utter_
开头的内容。
每一个action会根据templates(回答模板)的情况返回对应的内容。
3、创建一个机器人对话项目
在cmd下输入以下命令
rasa init --no-prompt
接下来会出现以下的场面:
它创建以下文件:
文件名 | 功能 |
---|---|
actions.py | 自定义actions的代码文件 |
data/nlu.md | Rasa NLU的训练数据 |
data/stories.md | Rasa stories的相应数据 |
config.yml | Rasa NLU 和 Rasa Core 的配置文件 |
credentials.yml | 定义和其他服务连接的一些细节。例如rasa api接口 |
domain.yml | Rasa domain 文件 |
endpoints.yml | 和外部消息服务对接的 endpoins 细则 |
以上粗体字说明在整个项目中比较重要!!
3.1 定义一个NLU训练数据(解释器)
目前我们的机器人已经可以通过输入意图来获取答案了,但是怎么让机器理解真正的语言呢?这个时候我们就需要用到NLU模块了。
在目前已经创建好的整个项目中,并不会单独的创建出对话管理而不出现NLU(自然语言理解)部分的内容。对于学习Rasa Core的学习者而言,NLU的知识我们同样需要具备。
在Rasa NLU中,我们需要定义自己的机器人应该能够以Rasa NLU训练数据格式处理用户的消息。当然这里是以markdown
格式来获取NLU训练数据。
(附加:markdown格式也可以用来写博客哟,有兴趣的话可以多加学习!)
3.2 定义一个故事
我们可以通过以下两种方式创建故事:
- 手动创建一个故事并且直接将它们写入文件
- 使用交互式学习创建故事
比如我们选择第一个,即手动创建。并且根据如下代码(Stories举例的案例)来了解stories的格式。
## story_happy
* greet
- utter_greet
* mood_happy
- utter_happy
## story_unhappy
* greet2
- utter_greet
* mood_unhappy
- utter_unhappy
4、cmd下的命令及其功能
在cmd下有以下几个命令以及功能供大家了解:
命令 | 功能 |
---|---|
rasa init | 使用示例训练数据,操作和配置文件创建新的项目 |
rasa train | 使用自己的NLU数据和故事训练模型 |
rasa interactive | 自动交互式学习会话,通过聊天创建新的培训数据 |
rasa shell | 加载训练有素的模型,并且让你在命令行上与助手聊天 |
rasa run | 使用训练有素的模型启动Rasa服务器。 |
rasa run actions | 使用Rasa SDK启动操作服务器。 |
rasa visualize | 可视化故事。 |
rasa test | 使用您的测试NLU数据和故事测试训练有素的Rasa模型。 |
rasa data split nlu | 根据指定的百分比执行NLU数据的拆分。 |
rasa data convert nlu | 在不同格式之间转换NLU训练数据。 |
rasa -h | 显示所有可用命令。 |
总结
以上就是我对Rasa Core的相关内容的学习和简单的总结性介绍。后续会进行实际例子的创建,谢谢大家的阅读和指正。