Rasa实战:构建开源对话机器人
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


2.3 组件

Rasa NLU是一个基于有向无环图的通用框架。有向无环图是由组件(component)相互连接构成的。

有向无环图定义了各个组件之间数据的前后流动关系,组件之间是存在依赖关系的,任意一个组件的依赖需求没有被满足都将导致执行出错。Rasa NLU会在启动的时候检查是否每一个组件的依赖需求都被满足,如果没有满足,则终止运行并给出相关的提示消息。

组件具有以下特征。

● 组件之间的顺序关系至关重要。例如,NER组件需要前面的组件提供分词结果才能正常工作,因此前面的组件中必须有一个分词器。

● 组件是可以相互替换的。例如,清华大学开发的分词器和北京大学开发的分词器均能提供分词结果。

● 有些组件是互斥的。例如,分词结果不能同时由两个分词器提供,否则会出现混乱。

● 有些组件是可以同时使用的。例如,提取文本特征的组件可以同时使用基于规则的和基于文本嵌入向量的组件。

一个NLU应用通常有实体识别和意图识别两个任务。为了完成这些任务,一个典型的Rasa NLU配置通常包含如图2-3所示的各类组件。

图2-3 典型Rasa NLU组件

下面将围绕图2-3详细说明。

(1)语言模型组件:为了加载模型文件,为后续的组件提供框架支持,如初始化spaCy和BERT。

(2)分词组件:将文本分割成词,为后续的高级NLP任务提供基础数据。

(3)特征提取组件:提取词语序列的文本特征。可以同时使用多个特征提取组件。

(4)NER组件:根据前面提供的特征对文本进行命名实体的识别。

(5)意图分类组件:按照语义对文本进行意图的分类,也称意图识别组件。

(6)结构化输出组件:将预测结果整理成结构化数据并输出。这一部分功能不是以组件的形式提供的,而是流水线内建的功能,开发者不可见。