【RASA】交互学习(interactive learning)

本文介绍了Rasa框架中的交互学习(Interactive Learning)功能,它允许用户通过反馈生成样本数据,减少构建对话流程时的错误。同时,文章讲解了如何与知识库进行交互,包括使用Grakn等图数据库存储领域知识,以及如何通过自定义actions从知识库检索信息。此外,还详细阐述了构建新的训练数据、story和自定义actions的步骤,帮助实现更智能的对话系统。
摘要由CSDN通过智能技术生成

交互学校(interactive learning)

rasa core模块提供了一种交互学习(interactive learning)用来获取所需要的样本数据,可以减少人工构建story时一些考虑不周的问题。在interactive learning时,用户向机器人提供反馈,然后用于生成样本数据。

1、首先开启action server 

python -m rasa run actions --port 5055 --actions actions --debug

2、开启interactive learning

(1)已有训练好的模型

python -m rasa interactive -m models/20200713-092634.tar.gz --endpoints endpoints.yml --config config.yml

(2)没有训练好的模型,rasa会先训练好模型,然后再开启交互式会话

或者(没有已训练模型情况),rasa会先训练好模型,再开启交互式学习会话

python -m rasa interactive --data /data --domain domain.yml --endpoints endpoints.yml --config config.yml 

交互界面如图所示:

结束后,在story.md中会生成一个story,如图所示:

rasa 知识库交互

知识库能存储领域性知识,利用知识库可以为rasa定制个性化的解答。rasa与知识库的交互流程大概是,首先Rasa先解析消息,然后使用自定义的actions检索知识库,然后将得到的领域知识合并到回复中。以官方给出的bank bot为例,一个与知识库交互的rasa项目流程如下:

1、构建知识库

知识库可以用来标识领域知识。通常,会使用图数据库来表示这种知识。图数据库以实体(有时候叫做nodes)、属性、关系的形式来存储数据。图数据库的种类有很多,如neo4j、grakn、graphDB等,官方给出的bank bot采用的是grakn存储知识。在知识库中存储知识时,我们需要考虑:

  • 存储哪些实体
  • 实体有哪些属性
  • 实体间是如何关联的

banking bot有四个实体:bank,person,account,card。每个实体都具有一些属性。比如bank实体有name和headquarters属性。 

2、构建新的训练数据

  • 新建intent 

banking bot的新intent是通用的。但是,实体是特定的。如果把意图设定为通用,模型会变得非常的灵活,这样就没有必要针对添加到知识库中的每一个新的实体都创建新的意图,只需要添加更多的示例到某个意图中。

比如创建新的intent——query attribute,表示用户想要知道某个实体更多的细节,询问那个实体特定的属性。

  • 新建story

bank bot为每个意图定义了一个自定义操作,因为每个意图都要求你以不同的方式查询知识库。一个新建的story如下所示:

## happy path
* greet
  - utter_greet
* query_entities
  - action_query_entities
  - slot{"entity_type": "bank"}
* compare_entities
  - action_compare_entities
* query_entities
  - action_query_entities
  - slot{"entity_type": "transaction"}
* query_attribute
  - action_query_attribute
* query_attribute
  - action_query_attribute
* resolve_entity
  - action_resolve_entity
* bye
  - utter_goodbye

  • 更新domain文件

在定义了新的意图和故事之后,需要在你的domain文件中添加新意图,行为,和实体。

3、自定义action

为了检索知识库,我们需要定义一些action去执行这些操作,以action_query_attribute为例说明如何自定义一个新的action。

为了写自定义action(custom action),你需要集成Action类,并重写name和run函数。name方法需要返回action的名字。

 

查询知识库的代码集成到了GraphDatabase类中,在action的run函数中要先初始化GraphDatabase。

action可以通过slot槽中的关键词去知识库中检索相应的知识,并返回给用户。

 reference

https://github.com/RasaHQ/tutorial-knowledge-base

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值