Rasa NLU pipeline的扩展性

本文将详细介绍 Rasa NLU pipeline 的扩展性。


兼容性说明:

本文介绍的 Rasa NLU 知识都是基于 v0.13.2, 不同版本之间可能会有差异,不过不用担心,根据官方消息,Rasa NLU 已经进入比较成熟的阶段,后续出现较大结构变动的可能性不大,因此本文介绍的知识在后续版本,甚至 v1.x 依然有效。


在基础篇中我们没有提及的是 Rasa 的扩展性非常好,除了可以使用内置的各种组件外,还可以无缝的使用第三方实现的组件。

在 rasa pipeline 配置中,你可以直接给出内置组建的名字作为组件的 name,正如前面张杰所介绍的那样,一个示例如下:

1
2
3
4
5
6
7
8
pipeline:
- name: "nlp_mitie"
model: "data/total_word_feature_extractor.dat"
- name: "tokenizer_mitie"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_classifier_mitie"

配置中的 nlp_mitietokenizer_mitie 等都是内置组件的名字。

得益于 Python 强大的灵活性,Rasa 支持动态的载入其他包的组件。比如,你有一个 component 类叫做 SillyNLP,其功能和现有的 nlp_mitie 一模一样, 这个类继承并实现了 component 的方法。该类位于 somepackge 包的 this_model 模块内。在 Python 环境中安装好 somepackage 这个包后,你就可以在 pipeline 配置中原本出现组件名的地方,用这个类的全局名字替换。比如我们这个类的全局名就是 somepackage.this_model.SillyNLP , 因此我们用这个类替换 nlp_mitie 后,配置文件就应该这样写:

1
2
3
4
5
6
7
8
pipeline:
- name: "somepackage.this_model.SillyNLP"
model: "data/total_word_feature_extractor.dat"
- name: "tokenizer_mitie"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_classifier_mitie"

这个配置文件还体现出外部组件和内部组件一样都是可以接受任意的配置参数的,在本例中,model: "data/total_word_feature_extractor.dat" 就会被传递给 somepackage.this_model.SillyNLP