本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统如何使用Rasa框架提供的ResponseSelector组件处理常见问题和用户闲聊内容的过程,以及如何处理在正常设定的业务对话流程之外的对话场景(可以称之为out-of-scope)进行剖析,并结合debugging功能演示其背后的逻辑及处理过程。
一、Rasa项目实战之电商零售智能业务对话机器人ResponseSelector使用详解与Debugging演示
- 电商零售业务对话系统非业务对话流程debugging演示与剖析
首先运行命令rasa visualize查看电商零售业务对话系统非业务对话流程。当用户与一个业务对话机器人进行对话时,并不总是按照预期的行为进行对话,譬如用户会问一些与当前业务处理无关的信息,或者就是闲聊等。下面的流程图用红框标识出了这些与业务流程无关的内容,那么在设计对话机器人时,就需要考虑到这样一些场景,从而尽可能改善用户体验。
关于闲聊或者常见问题回答的场景,我们可以借助Rasa框架提供的ResponseSelector组件来更高效地处理这类场景,下面会通过几个对话示例来演示在本项目实现的对话机器人样例是如何进行处理的。
运行命令rasa shell –debug启动调试模式下的对话session:
输入信息:what weather is it
这里会加载ResponseSelector组件,并创建两个selector key,一个用于常见问答(faq),一个用于闲聊(chitchat):
下面这行输出信息比较重要,显示了经过NLU处理后识别到的intent为out_of_scope:
接下来可以看到Rasa core调用各个policies进行预测的结果,其中有这样的输出信息:
There is a rule for the next action 'utter_default'.
我们知道RulePolicy一旦预测出next action,那么其预测confidence就会是1.00,查看rules文件,果然定义了这样一条rule:
在配置中可以看到包括了两个intents,注意这里使用了or这个连接词,表示当识别到的intent为配置中二者之一时都会触发下面定义的action “utter_default”,检查一下domain文件,查看关于这个模板action的定义:
在这里定义了3句话,默认情况下,Rasa server在调用这个action时会随机从这3句话中选取一句回复给用户,这样设计的目的也是为了增加用户的体验感,而不是当每次对话机器人处理out-of-scope这种场景时,都使用固定的话语回复给用户。
接下来看一下policy ensemble组件选择的预测结果:
可以看到确实是按照规则选择了RulePolicy的预测结果,那么看一下对话机器人的输出:
接下来输入:are you a bot?
这次识别到的intent为chitchat(闲聊):
仍然使用了RulePolicy来预测结果,最后一行输出显示了这里使用key为chitchat的ResponseSelector来选择给用户的回复信息:
这是输出信息:
接下来输入:i'm not happy
识别到的intent为chitchat
Policy ensemble组件选择RulePolicy预测的action “utter_chitchat”,并且使用了ResponseSelector选择这条路径 “utter_chitchat/mood_unhappy”所定义的内容回复给用户:
Picking response from selector of type chitchat
这是输出信息:
2. ResponseSelector工作机制剖析
查看domain文件,可以看到在同一个action “utter_chitchat”下面定义了4条路径,在上面的演示示例中,使用了其中两条路径: utter_chitchat/bot_challenge和utter_chitchat/mood_unhappy。
这些路径的格式可以理解为utter_ + intent名称 + “/” + 子intent名称。在演示示例中,NLU组件根据用户输入识别到的intent为chitchat,而这里在intent下面又进行了分类,如bot_challenge,这样组合的intent格式与通常我们定义的intent不同,查看nlu训练数据,可以找到这些intents的定义:
我们再检查一下config中关于ResponseSelector的配置:
从配置信息可以看到只要识别到的intent为faq或者chitchat,就会使用ResponseSelector进行处理。
这是Rasa框架中ResponseSelector类,它继承自基于Transformer构建的模型DIETClassifier,但是定义了label_key和label_sub_key,其工作原理概括来说就是,当根据用户输入识别到faq或者chitchat这些intents时,ResponseSelector会根据向量相似度的计算来根据用户输入选择匹配的response输出给用户,而这些response是事先定义在domain文件中的,这样就可以让对话机器人高效及时地响应用户信息。