Rasa_NLU 源码分析

简介: 周末找了个 nlp 相关的工具,使用起来还不错,它就是 rasa_nlu, 具有实体识别,意图分类等功能,在加上一个简单的意图操作即可实现简单的 chatbot 功能,其类图如下所示:Rasa_NLU 类依赖图整体程序的入口是在 data_router.

周末找了个 nlp 相关的工具,使用起来还不错,它就是 rasa_nlu, 具有实体识别,意图分类等功能,在加上一个简单的意图操作即可实现简单的 chatbot 功能,其类图如下所示:

img_12156bcfb5bfbf1d0beba5684e414960.gif
Rasa_NLU 类依赖图

整体程序的入口是在 data_router.py 文件中的 DataRouter 类中,主要作用是将模型以 project 的方式进行管理,控制数据的流向问题

component_classes 中包含所有 Component 类

# Classes of all known components. If a new component should be added,
# its class name should be listed here.
component_classes = [
    SpacyNLP, MitieNLP,
    SpacyEntityExtractor, MitieEntityExtractor, DucklingExtractor,
    CRFEntityExtractor, DucklingHTTPExtractor,
    EntitySynonymMapper,
    SpacyFeaturizer, MitieFeaturizer, NGramFeaturizer, RegexFeaturizer,
    CountVectorsFeaturizer,
    MitieTokenizer, SpacyTokenizer, WhitespaceTokenizer, JiebaTokenizer,
    SklearnIntentClassifier, MitieIntentClassifier, KeywordIntentClassifier,
    EmbeddingIntentClassifier
]

# Mapping from a components name to its class to allow name based lookup.
registered_components = {c.name: c for c in component_classes}

registered_components 通过将 component_classes 中的类进行迭代并遍历出名称 Map

get_component_class 函数将 名称转为相应的 Component 类

主要架构相关的文件:

registry.py 文件 主要作用是将 pipeline 中的名称转为相应的 类,以及导入相应的模型文件
config.py 配置文件转换
model.py 文件 主要是模型相关内容
类名 说明
RasaNLUModelConfig 用来存放训练是使用的 pipeline 参数
Metadata 将 model 目录下 metadata.json 文件进行解析,并缓存
Trainer 训练所有相关的 Component 部分, 通过 train 函数进行训练, 通过 persist 函数进行持久化存储
Interpreter 通过训练好的 pipeline 模型解析文本字符串
Persistor 用于存储模型在云端 aws,gcs,azure等

在 persist 函数中,通过 self.pipeline 缓存内容,加上各种参数以及相应模型文件配置到 metadata.json 文件中

Interpreter 初始化流程

1. 加载 MetaData 数据内容
2. 根据 metadata.json 中 pipeline 构件Component 执行序列
3. 初始化 Interpreter 参数列表

Interpreter 解析文本过程

1. 将文本通过 Message 进行封装
2. 根据 Component 执行序列处理 Message 对象
3. 格式化输出 Message 对象内容

Message 中通过 Map 将所有计算结果存放在相应的地方最终格式化为输出结果

目录
相关文章
|
机器学习/深度学习 自然语言处理 数据处理
超详细的 Bert 文本分类源码解读 | 附源码
超详细的 Bert 文本分类源码解读 | 附源码
602 0
超详细的 Bert 文本分类源码解读 | 附源码
|
数据采集 机器学习/深度学习 人工智能
Meta用《圣经》训练超多语言模型:识别1107种、辨认4017种语言
Meta用《圣经》训练超多语言模型:识别1107种、辨认4017种语言
130 0
|
人工智能 自然语言处理 机器人
Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistency等;项目实战搭建知识库内容机器人
Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistency等;项目实战搭建知识库内容机器人
Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistency等;项目实战搭建知识库内容机器人
|
9月前
|
机器学习/深度学习 存储 自然语言处理
ChatGPT原理分析
ChatGPT原理分析
66 1
|
9月前
|
人工智能 自然语言处理 安全
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架【2月更文挑战第2天】
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
|
机器学习/深度学习
GAN简介及原理分析
GAN简介及原理分析
274 0
GAN简介及原理分析
|
算法 语音技术
kaldi 源码分析(七) - HCLG 分析
Kaldi 语音识别主流程: 语音识别过程 解码网络使用 HCLG.fst 的方式, 它由 4 个 fst 经过一系列算法组合而成。分别是 H.fst、C.fst、L.fst 和 G.fst 4 个 fst 文件: 1. G:语言模型,输入输出类型相同,实际是一个WFSA(acceptor接受机),为了方便与其它三个WFST进行操作,将其视为一个输入输出相同的WFST。
5348 0
|
机器学习/深度学习 自然语言处理
迁移学习简述
什么是迁移学习,迁移学习的例子有哪些,在预测建模中如何使用迁移学习?本文将带你一步步深入探讨。
6002 0
|
9月前
|
存储 人工智能
ChatGPT的基本原理认识
很多东西很难用文字完全表述,比如如何形容一朵花都感觉不够完美,最简单方法就是把照片拿出来看。而多模态的ChatGPT就做的事这件事,接收:类型的输入并且输出各种类型的输出。
175 1

热门文章

最新文章