赞
踩
事先说明:本系列Rasa教程基于Rasa 1.6.1版本。
Rasa是一个开源机器学习框架,可用于构建具有上下文理解能力的AI助手(assistant)。
Rasa有两个主要模块:
Rasa X 是一个用以改进Rasa构建的上下文助理的工具,包括用户界面和 REST API。
rasa 安装:
pip install rasa
如果想要同时安装rasa 和 rasa x:
pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
在当前目录创建Rasa project:
rasa init
如果使用如下命令:
rasa init --no-prompt
该命令创建Rasa项目需要的文件,以及训练一个简单对话机器人需要的数据。如果命令不使用--no-prompt
标识,那么在创建过程中需要回答几个关于项目创建的问题。
使用rasa init --no-prompt
创建项目后目录下的文件:
创建的文件如下,其中*
标记的为最重要的部分:
Rasa的NLU(即自然语言理解)模块,用来将用户消息转换成结构数据。在Rasa中,可以通过提供训练示例,告诉Rasa如何理解用户消息,然后训练获得模型。可以看一下上述初始化的项目下的nlu.md
文件内容:
## intent:greet - hey - hello - hi - good morning - good evening - hey there ## intent:goodbye - bye - goodbye - see you around - see you later ## intent:affirm - yes - indeed - of course - that sounds good - correct ## intent:deny - no - never - I don't think so - don't like that - no way - not really ## intent:mood_great - perfect - very good - great - amazing - wonderful - I am feeling very good - I am great - I'm good ## intent:mood_unhappy - sad - very sad - unhappy - bad - very bad - awful - terrible - not very good - extremely sad - so sad ## intent:bot_challenge - are you a bot? - are you a human? - am I talking to a bot? - am I talking to a human?
其中以**##**开始的行定义了意图(intents),是具有相同含义消息的集合。Rasa中NLU模块的任务是,预测用户输入的消息的正确意图。具体数据格式可以参见NLU Training Data Format。
config.yml
配置文件将会在NLU和Core中用到。上述项目中的config.ml文件的内容为:
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline: supervised_embeddings
# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
- name: MemoizationPolicy
- name: KerasPolicy
- name: MappingPolicy
在上述例子中,NLU模型会使用supervised_embeddings
流水线。不同NUL模型的流水线可以在这里查看。
其中language
和pipeline
这两个关键词,用来定义NLU模型应该如何构建。policies
关键词定义核心模型中使用到的policies,更多关于policies的可以查看这里。
在这个阶段,通过Stories将教Rasa assistant 如何响应用户的消息,这个叫做对话管理,由于Core model所决定。
Core model以训练"stories"的形式从真实对话中进行学习。一个story是用户和assistant之间的真实的一次对话。带有意图和实体的行反应了用户的输入和assistant将响应的action名。上述项目的stories.md
内容如下:
## happy path * greet - utter_greet * mood_great - utter_happy ## sad path 1 * greet - utter_greet * mood_unhappy - utter_cheer_up - utter_did_that_help * affirm - utter_happy ## sad path 2 * greet - utter_greet * mood_unhappy - utter_cheer_up - utter_did_that_help * deny - utter_goodbye ## say goodbye * goodbye - utter_goodbye ## bot challenge * bot_challenge - utter_iamabot
用户说hello 时候,意图分类为greet
,assistant 根据utter_greet
进行回复。以-
为起始的句子表示 assistant 所做出的 action。本系列教程中所有的actions都是发送给用户的,比如utter_greet
。需要注意的是,一个action是可以做任务事情的,包括调用 API 或者与外部世界进行交互。更多关于Stories的具体格式可以参考这里。
下一个事情需要处理的是定义一个领域(Domain)。Domain定义了 assistant 所处的世界:期望从用户那边获取什么输入,assistant 能够预测什么行为,如何做出响应,存储什么消息。domain 相关的内容存储在domain.yml
文件中。上述上面的domain.yml
内容如下:
intents: - greet - goodbye - affirm - deny - mood_great - mood_unhappy - bot_challenge actions: - utter_greet - utter_cheer_up - utter_did_that_help - utter_happy - utter_goodbye - utter_iamabot templates: utter_greet: - text: "Hey! How are you?" utter_cheer_up: - text: "Here is something to cheer you up:" image: "https://i.imgur.com/nGF1K8f.jpg" utter_did_that_help: - text: "Did that help you?" utter_happy: - text: "Great, carry on!" utter_goodbye: - text: "Bye" utter_iamabot: - text: "I am a bot, powered by Rasa." session_config: session_expiration_time: 60 carry_over_slots_to_new_session: true
其中intents
:定义了期望用户的输入,即意图分类的详情;
actions:定义了 assistant 能够说什么和做什么;
templates:定义了 assistant 相应的消息模板。
这些是如何一起协调工作的呢?Rasa核心的任务是针对每个对话选择合正确的响应。在这个例子中,我们的响应是简单的发送消息给用户,这里面的响应都用utter_
开头。assistant 根据模板进行响应。可以参见 Custom Actions 创建更复杂的响应。
一旦添加了新的NLU或Core数据,或更新 domain 或配置文件的时候,就需要重新训练模型。执行下面的命令rasa train
。这个命令会调用Rasa Core 和NLU的训练函数,并将训练得到的模型存储到models/目录下面。这个命令会自动重新训练更新的部分。
到目前为止就建立了一个基于机器学习的对话助手。下一步通过执行下面的命令和assistant进行对话:
rasa shell
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。