一、Rasa
Rasa是一个开源机器学习框架,用于构建上下文AI助手和聊天机器人。
Rasa有两个主要模块:
Rasa NLU :用于理解用户消息,包括意图识别和实体识别,它会把用户的输入转换为结构化的数据。
Rasa Core:是一个对话管理平台,用于举行对话和决定下一步做什么。
Rasa X是一个工具,可帮助您构建、改进和部署由Rasa框架提供支持的AI Assistants。 Rasa X包括用户界面和REST API。
在这里插入图片描述
pip安装
pip install rasa_nlu
pip install rasa_core[tensorflow]
此图显示了使用Rasa构建的助手如何响应消息的基本步骤:
在这里插入图片描述
术语
intents:意图
pipeline:
story:Core model 以训练“stories”的形式从真实的会话数据中学习。故事是用户和助手之间的真实对话.
domain:定义了助手所处的universe:它应该获得的用户输入,应该能够预测的操作,如何响应以及要存储的信息
在这里插入图片描述
二、Rasa_NLU
Rasa NLU曾经是一个独立的库,但它现在是Rasa框架的一部分。
Rasa_NLU是一个开源的、可本地部署并配套有语料标注工具RASA NLU Trainer。其本身可支持任何语言,中文因其特殊性需要加入特定的tokenizer作为整个流程的一部分。
Rasa NLU 用于聊天机器人中的意图识别和实体提取。例如,下面句子:
"I am looking for a Mexican restaurant in the center of town"
返回结构化数据:
{
"intent": "search_restaurant",
"entities": {
"cuisine" : "Mexican",
"location" : "center"
}
}
Rasa_NLU_Chi 作为 Rasa_NLU 的一个 fork 版本,加入了jieba 作为中文的 tokenizer,实现了中文支持。
该部分简单介绍基于 Rasa_NLU_Chi 构建一个本地部署的特定领域的中文 NLU 系统的过程。
目标
输入: 中文测试文本
输出: 结构化的数据,识别出文本中对应的意图和实体
1. Pipeline
rasa nlu 支持不同的 Pipeline,其后端实现可支持spaCy、MITIE、MITIE + sklearn 以及 tensorflow,其中 spaCy 是官方推荐的,另外值得注意的是从 0.12 版本后,MITIE 就被列入 Deprecated 了。
本例使用的 pipeline 为 MITIE+Jieba+sklearn, rasa nlu 的配置文件为 config_jieba_mitie_sklearn.yml如下:
language: "zh"
pipeline:
- name: "nlp_mitie"
model: "data/total_word_feature_extractor_zh.dat" // 加载 mitie 模型
- name: "tokenizer_jieba" // 使用 jieba 进行分词
- name: "ner_mitie" // mitie 的命名实体识别
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie" // 特征提取
- name: "intent_classifier_sklearn" // sklearn 的意图分类模型
2. 准备工作:训练MITIE模型文件
由于在pipeline中使用了MITIE,所以需要一个训练好的MITIE模型(先进行中文分词)。MITIE模型是非监督训练得到的,类似于word2vec中的word embedding,需要大量中文语料,训练该模型对内存要求较高,并且非常耗时,直接使用网友分享的中文的维基百科和百度百科语料生成的模型文件。
3. rasa_nlu 语料
得到MITIE词向量模型之后,就可以使用标注好语料训练Rasa NLU模型。
Rasa提供了数据标注平台: rasa-nlu-trainer
那标注好的数据是什么样的呢?
标注好的语料存储在json文件中,具体格式如下所示,包含text, intent,entities,实体中start和end是实体对应在text中的起止index。
以data/examples/rasa/demo-rasa_zh.json为例:
{
"rasa_nlu_data": {