2022-03-13 RASA实战笔记 -- 第九章rasa的扩展性

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容