Rasa的扩展性
1. 如何使用自定义NLU组件和自定义策略
自定义NLU和自定义策略使用方式一致,但是绝大多数情况,开发者不需要使用自定义策略。重点介绍custom NLU
Rasa流水线(pipeline)配置中,可以直接给出内置组件的名字。
Rasa还支持动态载入其他包的组件:
例如:用户有自定义组件SillyNLP,其功能和现有的nlp_mitie一样。该类位于somepackge包的this_model模块内,用户可以在pipeline配置中原本出现"nlp_mitie"地方,用该类的全局名字(fully qulified name)替换 —— "somepackge.this_model.SillyNLP",配置文件还可以传参。
2. 如何自定义要给NLU组件或策略
NLU组件和策略在DAG中都作为节点使用,他们都属于图组件(graph components)。
自定义图组件需要满足以下三个要求:
实现GraphComponent接口
进行组件注册
使用类型注解(type annotation/ type hint)
① 实现GraphComponent接口
为了实现接口,组件必须继承自Graph Component类(全路径为rasa.engine.graph.GraphComponent),或者其子类(如Tokenizer子类)。② 进行组件注册
注册是为了让Rasa系统了解组件的特性,如组件类型、组件是否需要训练等。这些信息觉得构造DAG时如何处理每个组件。③使用类型注解(type annotation/ type hint)
Rasa利用类型注解来验证模型的配置是否有效。注:前向引用(forward reference)(python 前向引用)是不被允许的。py3.7中可以使用 "from __ future__ import annotations" 来解决这一问题。
3. 自定义词槽类型
定义一个词槽类型关键步骤是将本词槽转换为Rasa系统可用的特性(机器学习的特性)。
开发者需要继承词槽基类,随后重写(override)计算特征数量和计算特征值的方法。
开发者需要保证在配置不变的情况下(词槽系统允许开发者根据词槽配置输出不同的维度,这就是feature_dimensionality是方法而不是属性的原因),模型输出的特征维度不变,否则训练和推理时维度不同会导致系统出错。
4. 其他功能扩展性
还可以自定义:
- 自定义数据导入方式(通过自定义 data importer的方式)
- 自定义tracker store
- 自定义connector