本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目Debugging过程中关于NLU组件加载运行,各个policies如何进行预测,ResponseSelector如何选择response等内容进行详细分析。
一、Rasa对话机器人项目实战之教育领域Education Bot项目Debugging进阶实战
- Education Bot对RulePolicy、AugmentedMemoizationPolicy、TEDPolicy使用Debugging实验分析
输入信息:
对话机器人反馈如下:
可以看到选项1对应的intent为get_started_playground,为了对这个intent进行处理,可以检查训练数据,首先检查rules文件,发现没有这个intent相关内容,然后检查stories,发现在get_started_playground.yml文件中存在以下数据:
从数据中可以看到,intent “get_started_playground”会触发action “utter_playground_intro”,检查domain文件,找到这个action的定义:
执行完action “utter_playground_intro”之后会执行action “utter_ask_playground_help”:
根据stories,如果确认执行上面的action,那么会激活form “playground_form”,如果是”No”,则执行另一个action “utter_interested_in_installation”。
输入No,则按照pipeline的配置进行处理:
下面是DIETClassifier的process方法,在这个方法中会对用户输入信息进行intent的预测以及排序处理,然后添加到message中,也会提取entities信息并添加到message中,另外也会根据配置要求添加诊断信息,所以最后返回的是所有这些信息的一个组合:
执行FallbackClassifier的process方法:
这是FallbackClassifier的process方法,根据配置进行fallback处理,包括设置对应的intent:
由于输入No,所以识别的intent为”deny”,提取实体信息为空:
执行验证提取的slots操作:
基于识别到的intent运行AugmentedMemoizationPolicy,可以看到当前tracker中的状态信息:
这是config中的配置:
下面显示的是使用AugmentedMemoizationPolicy来预测系统级别的action “action_listen”的信息:
预测完成后输出信息:
2. Education Bot在stories中对AugmentedMemoizationPolicy具体应用详解
下面这条消息表示AugmentedMemoizationPolicy根据stories进行匹配时找到了这个action:
可以在下面的stories训练数据中找到这个action:
根据config配置,使用AugmentedMemoizationPolicy预测next action之后,还会继续使用TEDPolicy进行预测,最后由policy ensemble组件根据各个policies的预测结果进行选择,从以下信息看,最终是选择AugmentedMemoizationPolicy预测的结果,所以confidence为1.00:
3. Debugging模式下的Education Bot对TEDPolicy使用源码解析
下面是TEDPolicy的预测方法中的代码,首先从tracker中创建TED模型数据,然后调用模型的推理方法进行预测,对预测得到的confidence进行排序,调用内部方法_prediction返回预测结果:
下面是_prediction方法,使用PolicyPrediction来封装预测结果信息:
4. Next Action决策器DefaultPolicyPredictionEnsemble算法剖析
这是DefaultPolicyPredictionEnsemble,它继承自PolicyPredictionEnsemble和GraphComponent,作用是根据规则从各个policies的预测结果中选择最好的预测结果:
具体规则如下:
1)"No user"的预测结果(指系统级别的)重要性高于所有其它的预测结果
2)End-to-end的预测结果重要性高于所有其它基于用户输入的预测结果,前提条件是在ensemble中不存在"No user"的预测结果
3)给定两个预测结果,如果其中一个预测结果的最大confidence大于另外一个预测结果的最大confidence,那么confidence值更大的预测结果被认为更好,这与做出这两个预测结果的policies的优先级无关
4)给定两个预测结果,如果它们的confidence相同,具有更高优先级的policy所预测的结果会被认为更好
需要注意的是如果允许优先级可以被视作无差别 (coincide),那么就会采用第一个预测结果。
预测完成后tracker最新的状态信息:
然后会删除使用的lock:
5. 专门为faq及chitchat设计的ResponseSelector运行机制详解及Debugging实验
输入Yes确认后输出:
这时就会进入faq的状态,训练数据如下:
关于faq,会使用ResponseSelector进行预测。
输入信息:
执行完各个NLU组件之后,就会执行ResponseSelector的process方法,可以看到使用了3种selector key来处理不同种类的用户输入信息:
这时NLU处理后的intent和entities信息:
输出信息:
在domain中会定义faq相关的actions:
然后由ResponseSelector自动根据用户输入来预测选择上面配置的哪一个action。
6. Debugging模式下的Education Bot出发out of scope机制分析实验解密
输入信息:
这时识别到的intent为out_of_scope:
预测的action:
这是因为stories训练数据中存在这样的action:
可以看到最终使用AugmentedMemoizationPolicy预测的结果,然后会使用ResponseSelector从上面说的3种分类的”out_of_scope”对应的responses中选择一个response:
这是相关NLU部分的训练数据:
最后输出信息: