本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot调试Debugging过程进行解析。通过调试信息详细了解pipeline中定义的各个NLU组件是如何协同完成从用户输入信息到输出intents和entities的整个NLU处理流程。
一、Rasa对话机器人项目实战之教育领域Education Bot调试Debugging过程解析
- 教育领域Education Bot调试Rasa Debugging启动Modules分析
使用Rasa server的debug模式不仅可以展示数据流,也可以帮助我们了解框架内部的细节。
运行命令rasa shell –debug启动调试模式,UserWarning提示从3.0开始,Rasa移除了自动填充slots的机制,因为这种机制在业务流程比较复杂的情况下容易造成slot状态管理的bug,譬如slot不该填充时被错误自动填充等,Rasa的对话policies是根据状态来进行预测的,如果状态出现问题,就会导致对话机器人发生不是预期的行为。另外可以看到加载了很多modules,包括Python层面的和系统框架层面的,这里面有些比较重要,譬如rasa_sdk,asyncio等:
2. 教育领域Education Bot调试Rasa Debugging中NLU Pipeline组件启动详解
用户输入首先需要进行处理,然后再调用WhitespaceTokenizer进行分词处理:
在config.yml的pipeline中定义了以下NLU组件:
加载DIETClassifier:
通过load方法从storage中加载组件并实例化后返回:
下面的warning信息可以忽略,在Rasa 之前的版本中也会出现:
加载DucklingEntityExtractor:
在pipeline中的配置如下,用于提取dimensions中的实体信息:
加载EntitySynonymMapper和ResponseSelector:
Pipeline配置如下:
加载FallbackClassifier:
Pipeline配置如下:
3. 教育领域Education Bot调试Rasa Debugging中Policies组件启动详解
加载RulePolicy组件:
加载AugmenentedMemoizationPolicy组件,这个policy具有“遗忘机制”,可以通过忽略历史对话中的一些内容来与stories中的训练数据进行匹配,从而提供更大的灵活性和匹配成功率:
加载TEDPolicy组件,这个policy是基于机器学习模型TED来进行预测的:
下面是config.yml文件中配置的policies:
加载policy ensemble组件:
启用Python coroutine调试:
4. 教育领域Education Bot调试Rasa Debugging中用户信息进入Agent过程详解
输入信息,这时会进行用户身份识别,并启动一个新的对话,可以看到当前slots的信息都为空:
使用一个dask runner来运行组件:
DaskGraphRunner只是Rasa GraphRunner的一个实现:
而GraphRunner用于运行一个graph schema(定义了DAG中的各个graph component):
接下来依次运行这些组件的process方法来处理用户输入信息:
下面是处理用户输入信息后获取的intent及entities信息:
在tracker中记录相关event,执行默认action提取slots信息,并进行验证:
5. Education Bot Debugging对用户Message处理的整个NLU生命周期详解
首先看一下Rasa官网提供的这幅关于组件生命周期的图:
下面的图是针对Rasa 2.X的版本(对于3.X的版本是采用DAG graph,组件之间是可以并行运行的),各个组件在图中是有相互依赖关系的。每个组件都会执行加载和初始化的操作,然后依次进行训练,完成之后再通过持久化操作来保存训练好的模型,并产生模型相关的元数据(Model Metadata)。
下面的信息显示了定义在pipeline中的各个NLU组件依次对用户输入信息进行处理来完成整个NLU的过程:
6. Education Bot Debugging的Dialogue Management中Policies并行处理详解
从下面的输出信息中可以看到几种policies是在并行处理的:
使用rule policy和AugmenentedMemoizationPolicy进行预测:
也会使用TEDPolicy进行预测:
最后由policy ensemble组件结合各个policies的预测来决定最终的预测结果,可以看到是选择了AugmenentedMemoizationPolicy的预测结果:
下面是对话机器人给出的信息: