Rasa系列教程(二) -- Rasa NLU基础

article/2025/9/19 19:39:24

目录

前言

一、训练数据

1.1 意图字段(intent)

1.2 同义词字段(synonym)

1.3 查找表字段(lookup)

1.4 正则表达式字段(regex)

1.5 查找表和正则表达式的使用

二、组件

2.1 语言模型组件

2.2 分词组件

2.3 特征提取组件

2.4 NER组件

2.5 意图分类组件

2.6 实体和意图联合提取组件

2.7 回复选择器

三、流水线

四、输出格式

五、如何使用Rasa NLU

 六、实战:医疗机器人的NLU模块


前言

        Rasa NLU负责意图提取实体提取。例如,输入“明天上海的天气如何?”,Rasa NLU要提取出改句子的意图是查询天气,以及对应的实体值和类型名:明天—日期、上海—城市。

        Rasa NLU使用有监督算法来完成功能,因此需要开发者提供适当数量的语料,包括意图信息和实体信息。

        Rasa NLU在软件架构上设计的很灵活,允许开发者使用各种算法来完成功能,这些算法的具体实现被称为组件(component)。为了让组件灵活配置和维持正确的前后组件的依赖关系,Rasa NLU引入了有向无环图DAG的组件配置系统。


一、训练数据

        在示例项目文件列表中的 data/nlu.yml 正是Rasa NLU的数据文件,具体内容如下:

version: "3.0"nlu:# 意图字段 
- intent: greetexamples: |- hey!- hello!- hi!- hello there!- moin!# 同义词字段
- synonym: 番茄examples: |- 番茄。- 西红柿- 洋柿子- 火柿子# 查找表字段
- lookup: 城市examples: |- 北京- 上海- ...- 广州- 深圳# 正则表达式字段
- regex: helpexamples: |- \bhelp\b

        Rasa NLU的训练数据为YAML格式。从结构上说,Rasa N:U的训练数据都在键(key)为nlu的列表内。列表中每个元素都是一个字典,依靠字典中的键来区分功能。具有特殊含义的键有 intentsynonymregexlookup除intent外,其他3个都是可选的。

1.1 意图字段(intent)

        具有intent键表明当前的对象是用来存储训练样例的。intent对应的值时意图名。需要注意的是意图名中不能包含“/”字符,因为Rasa已经将这个字符预留了。

1.2 同义词字段(synonym)

        具有synonym键表明当前的对象是用来存储同义词信息的。例如西红柿是番茄的同义词。在启动EntitySynonymMapper组件(后续章节介绍)的情况下,推理时,会将得到的实体值的同义词替换为标准词。即将“西红柿”、“洋柿子”全部替换为“番茄”。

1.3 查找表字段(lookup)

        具有lookup键表明当前的对象是用来存储查找表的。在实体识别和意图识别的时候,如果开发者能给这些组件一些额外的特征,那么将提高这些组件的准确度。

        在上述实例中,会有查找表特征[0001111101111000]。在NER时,模型会重点考虑这些查找表的特征,因此,即使训练数据中未出现车站名,模型也能在查找表特征的帮助下,正确提取出车站名。

1.4 正则表达式字段(regex)

         具有regex键表明当前的对象是用来存储正则表达式的。利用正则表达式匹配某种模式后,将这种模式是否出现作为特征传给NER组件或意图识别组件,以提高组件的性能。其优点是精度高,因此在特别规则的NER识别过程中,如身份证号码识别、电话号码识别等场景下,可以利用正则表达式特征提高识别准确率。

         正则表达式同样也可以作为特征提供给NER模型做实体识别。

1.5 查找表和正则表达式的使用

        在Rasa中,查找表和正则表达式主要通过2种方式使用:

  1. 作为NER组件的输入特征之一,可以与训练数据concat后,再输入神经网络中;
  2. 作为NER组件的输入,直接作为训练数据集;

二、组件

        Rasa NLU是一个基于有向无环图的通用框架。有向无环图是由组件(component)相互连接构成的。一个NLU应用通常有实体识别、意图识别两个子任务。为了完成这些任务,一个典型的Rasa NLU配置通常包含如下各类组件。

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

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

3、特征提取组件:提取词语序列的文本特征,可以同时使用多个特征提取组件;

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

5、意图分类组件:按照语义对文本进行意图的分类,也成意图识别组件;

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

2.1 语言模型组件

语言模型组件加载预训练的词向量模型。目前有2个语言模型组件,如下表:

组件备注
spaCyNLP该组件所需的模型需要提前下载到本地,否则会出错
MitieNLP需要预先训练好的模型

2.2 分词组件

Rasa分词组件中支持中文语言的分词器如下表:

组件依赖备注
JiebaTokenizerJieba
MitieTokenizerMitie经过改造可以支持中文分词
spaCyTokenizerspaCy

2.3 特征提取组件

无论是实体识别还是意图分类,都需要上游的组件提供特征。Rasa的特征提取组件如下:

组件依赖组件备注
MitieFeaturizerMitieNLP
spaCyFeaturizerspaCyNLP
ConveRFeaturizer分词组件基于Poly AI的conveRT模型
LanguageModelFeaturizer分词组件基于HuggingFace的transformers库
RegexFeaturizer分词组件读取训练数据中的正则表达式配置
CountVectorsFeaturizer分词组件词袋模型
LexicalSynacticFeaturizer分词组件提供词法和语法特征,如是否句首、句尾、纯数字等

2.4 NER组件

Rasa支持多种NER组件,多数不可同时使用,少数组件可以有条件的同时使用。

组件备注
CRFEntityExtractor
spcaCyEntityExtractor只能使用spaCy内置的实体提取模型,不能再训练。内置实体种类为人名、地名、组织结构名等
DucklingEntityExtractor只能使用预定义的实体,不能再训练。内置的实体种类为邮箱、距离、时间等
MitieEntityExtractor
EntitySynonymMapper用于同义词改写,将提取到的实体标准化
DIETClassifier
RegexEntityExtractor读取训练数据中的查找表及正则表达式,用于提取实体

2.5 意图分类组件

意图分类组件如下表所示:

组件依赖备注
MitieIntentClassifierMitie
SklearnIntentClassifierScikit-learn
KeywordIntentClassifier
DIETIntentClassifierTensorflow
FallIntentClassifier如果其他组件预测的intent得分过低,则该组件将intent更改为NLU fallback

2.6 实体和意图联合提取组件

Rasa提供DIETClassifier(基于Rasa自行研发的DIET技术)用户实体和意图的联合建模。

2.7 回复选择器

对于FQA等简单的QA问题,只需要使用NLU部分就可以轻松完成,因此Rasa提供了回复选择器(ResponseSelector)组件。


三、流水线

        Rasa NLU基于有向无环图进行组件配置,此有向无环图在Rasa中称为流水线(pipeline)。

        流水线定义了各个组件和组件之间的依赖关系,允许开发者对各个组件进行配置。Rasa NLU的配置文件使用的是YAML格式。下面是适合中文开发者的,推荐流水线配置:

recipe: default.v1language: "zh"pipeline:-name: JiebaTokenizer    # 分词组件,jiba分词可能会和实体边界产生冲突,后续介绍其他分词组件-name: LanguageModelFeaturizermodel_name: "bert"model_weights: "bert-base-chinese"-name: "DIETClassifier"

        大体上Rasa NLU的配置文件可以分为3个主要的键:recipe、language、pipeline。

recipe:表示当前配置文件所用的格式,当前Rasa只支持一种格式,那就是default.v1

language:用于指定Rasa NLU将要处理的语言

pipeline:配置文件的核心,由列表构成,每个元素都是一个字典(表现在YAML中类似于name: xxx),这些字典直接对应流水线组件


四、输出格式

        NLU的输出内容主要包括text、intent、entities 3个部分。分别表示请求文本、意图识别、实体识别。实例如下:

{"text": "show me chinese restaurants",    # 用户输入的文本"intent": "restaurant_search",            # 意图字段"entities": [                             # 实体字段{    "start": 8,                       # 开始位置"end": 15,                        # 结束位置"value": "chinese",               # 实体值"entity": "cuisine",              # 实体类型"extractor": "CRFEntityExtractor",# 提取器信息"confidence": 0.854,              # 置信度"processors": [],                 }]
}

五、如何使用Rasa NLU

        Rasa是一种高度内聚的框架,可以使用Rasa自带的命令行工具进行模型训练和推理任务。

(1)训练模型

rasa train nlu

        这条命令将会从 data/ 目录下查找训练数据,使用config.yml作为流水线配置并将训练后的模型保存在 models/ 目录中,模型的名字以nlu-为前缀

(2)命令行测试

rasa shell nlu

        如果想自行制定模型,则可以使用如下命令:

rasa shell -m models/nlu-<timestamp>.tar.gz

        下面是rasa shell的使用界面:

hello # 用户自己的输入# 返回结果
{"text": "hello",    # 原始文本"entities": [],     # 实体字段"intent": {         # 意图字段"name": "greet",# 意图类型"confidence": 0.996844410963013    # 置信度},"intent_ranking": [    # 各意图置信度{"name": "greet","confidence": 0.9968444108963013},{"name": "mood_greet","confidence": 5.1380e-05},]
}

(3)启动服务

        Rasa NLU提供了 RESTful HTTP API的服务形式,使用如下命令开启。

rasa run -- enable-api

        我们可以通过向 /model/parse 路径发送请求的方式使用预测服务,如使用curl作为客户端。

curl localhos:5005/model/parse -d '{"text":"hello"}'

        在实际调试中,开发者可以考虑使用postman等工具发送请求,如下所示:


 六、实战:医疗机器人的NLU模块

        在学习完Rasa NLU模块后,检验学习效果最好的办法就是实战。本项目将构建一个简单的医疗领域机器人的NLU模块。它支持以下实体和意图识别:

  • 对药品查询或医院、科室查询的意图识别
  • 对疾病和病症的实体识别
  • 简单地打招呼

        具体代码可参考:Git


http://chatgpt.dhexx.cn/article/W10Fndt2.shtml

相关文章

RASA框架介绍

关于RASA一个机器学习框架&#xff0c;用于构建基于文本和语音的聊天机器人。框架完整&#xff0c;可扩展性&#xff0c;易用性高&#xff0c;高效灵活。2.0新版本统一训练数据格式&#xff0c;配置文件和模型处理方式。 在最新版的rasa里已经集成了bert模型和xlnet&#xff0c…

rasa的使用

文章目录 rasa的使用一. 安装二. 创建一个简单的语音助手三、命令行四 rasa整体流程参考 rasa的使用 一. 安装 rasa有NLU和core两个模块&#xff0c;可以使用pip全部安装&#xff0c;默认是基于tensorflow2.1版本的 直接使用pip安装 # 创建一个python是3.6.8的环境 conda cr…

Rasa

Rasa NLU是一种开源自然语言处理工具&#xff0c;用于聊天机器人中的意图分类和实体提取&#xff1b;主要是理解用户意图&#xff0c;配合rasa_core使用可以实现AI对话。 参考文献 Rasa介绍 对话系统、产品与技术by清华 Rasa开发使用 Rasa_NLU及Rasa_Core模型训练与测试by冰蓝 …

Rasa使用指南02

转载请注明出处&#xff0c;原文地址 Rasa使用指南01 前言 最近工作很忙&#xff0c;重心也一直在模型方面&#xff0c;例如BERT、GPT-2等等&#xff0c;对于Rasa系列的博文实在是没有时间更新。最近有不停的收到一些小伙伴发来的信息&#xff0c;希望能看到Rasa使用指南02&…

rasa - http api测试

rasa - http api测试 rasa run --enable-api --cors "*" 仅解析意图 请求地址&#xff1a;localhost:5005/model/parse 命令行 curl -X POST localhost:5005/model/parse -d ‘{“text”: “hello”}’ 代码示例 import json import requestsurl "http://…

rasa 介绍文档

重磅推荐专栏&#xff1a; 《Transformers自然语言处理系列教程》 手把手带你深入实践Transformers&#xff0c;轻松构建属于自己的NLP智能应用&#xff01; 1. Rasa介绍 1.1 架构 Rasa Open Source: NLU (理解语义) Core (决定对话中每一步执行的actions)Rasa SDK: Action …

Rasa 问答

开发一个智能对话系统用什么工具&#xff1f; Rasa是Conversational AI在智能业务对话领域工程落地全球最为成功对话机器人系统&#xff0c;是基于Transformer架构的全球使用最广泛的智能业务对话机器人框架&#xff0c;是NLP技术的集大成者。在当今全球范围各项对比指标综合成…

Rasa Core开发指南

文章目录 1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core 2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots 3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型 4. 搭建CustomActions服…

Rasa使用指南01

转载请注明出处&#xff0c;原文地址&#xff1a; https://terrifyzhao.github.io/2018/09/17/Rasa%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%9701.html Rasa使用指南02 前言 本文内容基于Rasa官网文档&#xff0c;做了翻译与整理&#xff0c;并添加一些自己的理解&#xff0c;方便…

Rasa安装

下载 Rasa https://download.csdn.net/download/Da___Vinci/12404001 Rasa-x https://download.csdn.net/download/Da___Vinci/12403992 安装 找个位置存放&#xff0c;cd到那个目录执行安装,注意你的pip版本&#xff0c;我的是3.7&#xff0c;如果装了多个pyhon&#xf…

RASA介绍

引言 自然语言是人类表达情感、观念的主要工具和人类思维的重要载体&#xff0c;而最常见的自然语言应用场景则是对话。人们希望通过自然语言控制机器&#xff0c;甚至实现机器与人类的对话与交流。使用自然语言作为输入输出的媒介&#xff0c;会使用户获得更自然友好的人机交互…

关于Rasa你必须要知道的几件事

关于Rasa你必须要知道的几件事 1、为什么选择Rasa 2、Understanding the Rasa NLU Pipeline 3、Components in Rasa 4、DIET in Rasa 5、Dialogue Management in Rasa 2.0 6、TED Policy in Rasa 本文从一个high-level的角度对使用Rasa构建聊天助手的整个过程进行了总结&#x…

Rasa系列教程(一) -- 系统及各组件介绍

目录 前言 一、传统对话机器人架构 二、对话系统流程 2.1 ASR语音识别 2.2 NLU自然语言理解 2.3 DM对话管理 2.4 NLG自然语言生成 2.5 TTS语音合成 三、Rasa组件介绍 3.1 Rasa简介 3.2 Rasa安装 3.3 Rasa项目基本流程 3.4 Rasa常用命令 3.4 Rasa常用命令 ​​​​…

数据治理-数据标准

问题导读1.为什么要做数据标准管理&#xff1f;2.生产变更的标准管理主要解决了哪些问题&#xff1f;3.变更通知谁&#xff08;影响范围&#xff09;&#xff1f;4.业务元数据的标准管理主要解决了哪些问题&#xff1f; 一、为什么要做数据标准管理 数据治理的问题并不仅仅只…

数据治理效果差?掌握正确治理方法,解决企业数据问题

数字化时代&#xff0c;数据已经成为构建现代化社会的重要元素&#xff0c;也深深扎根于商业世界&#xff0c;成为无数企业经营管理中悉心培养的”明珠“。 然而&#xff0c;这些宝贵的数据是需要有人来照料、培养的&#xff0c;如果企业没有完善的数据治理方案&#xff0c;就…

数据治理要点

目录 数据治理-ods治理前言-确定表主键数据治理-行政区划数据治理-字段拆分数据治理-必去的脏数据数据治理-全角转半角 已经在公司待了有一段时间了&#xff0c;自己也亲身接触和实践了一些项目&#xff0c;最近发现自己一直没有进步&#xff0c;想了想或许是自己一直没有反思总…

数据治理

数据治理(DataGovernance)&#xff0c;是企业数据治理部门发起并推行的&#xff0c;关于如何制定和实施针对整个企业内部数据的商业应用和技术管理的一系列政策和流程。 数据治理是一套持续改善管理机制&#xff0c;通常包括了数据架构组织、数据模型、政策及体系制定、技术工…

主数据治理项目前期调研

随着企业的不断发展进步&#xff0c;业务部门的需求不断增加&#xff0c;企业逐渐上了很多应用系统以及硬件设备&#xff0c;如OA办公协同系统、ERP企业资源管理系统、HR人力资源管理系统、CRM客户关系管理系统等&#xff0c;也在业务发展中沉淀了大量数据&#xff0c;但是这些…

通俗理解数据治理之主数据

1&#xff09;如需数据治理-元数据材料可前往&#xff08;狗头.gif&#xff09; https://download.csdn.net/download/u010763324/87589200https://download.csdn.net/download/u010763324/875892002&#xff09;如需数据治理-主数据材料可前往&#xff08;狗头.gif&#xff0…

数据治理概述

一、 首先认识一些名词 在学习数据治理知识之前&#xff0c;首先要明白治理的对象都有哪些&#xff0c;什么才是数据&#xff1f;是1&#xff0c;2&#xff0c;3&#xff0c;4这种纯数字类型的才算数据吗&#xff1f;还是所有的文本数据都是数据&#xff1f; 请往下看。 1.1…