- Rasa官方视频教程整理(一):愉快的开始
- Rasa官方视频教程整理(二):管道中的组件
- Rasa官方视频教程整理(三):Core
如果还没安装 rasa,点击进入安装教程,文章会涉及到rasa项目实战,官网要做的是一个关于医疗的rasa助手。
-简介-
用户构建的上下文AI助手,也是聊天机器人。
组成:自然语 言理解(nlu)和对话管理组件(Core)。
NLU:助手的耳朵,帮助手了解人们说的是啥。以非结构化的人类语言接收用户输入并以意图和实体的方式提取结构化的数据。
意图:用户输入的总体目标。
实体:碎片,在特定的上下文助手中可能需要的信息。
Core:助手的大脑,根据对话的状态及上下文,通过观察模式来学习用户和助手之间的对话数据,预测该如何响应。
Rasa X:含有一种允许助手继续学习的机制,通过真实的对话数据学习。
-创建训练数据-
在与用户对话的开头,告诉用户自己可以干什么,是好习惯。
我们也要事先拟定于用户对话的流程,然后根据每句对话的类型训练助手。
项目的Data目录下包含培训数据,我们这次操作的是 nlu.md 文件,在这里编写模型训练的示例。
## 开头的是意图,下面几行是用户可能说的话,我们叫示例。
下面我们往文件中添加点数据
可以看到我们用 [ ] 标记了实体,这样可以提取位置信息,以便在后续的对话中使用。( ) 是实体的标签。此处定义了两类实体,位置和设施类型。
注意:不必写出所有用户可能说的话,开始的时候,通常每个意图有10到15个示例就够了。数据虽然越多越好,但更重要的是数据的质量(与意图相对应,有多样化的词汇和句子结构),这样有利于模型学习,并对看不见的数据进行概括。
问题讲解:类失衡会不会出问题?
所谓类失衡就是每个意图对应的示例数不一样,有的特别多,有的特别少,这确实会导致一些问题,但可使用supervised_embeddings管道解决,他具有平衡的批处理策略,接下来就会讲到管道。
问题讲解:示例里写标点符号有用吗?
标点符号不会被提取为标记,所以不会用作训练模型的特征,不影响意图分类和实体提取结果。
问题讲解:意图分类和实体提取区分大小写吗?
这取决于任务,默认情况下是区分的。会影响到实体提取。管道组件CountVectorsFeaturizer(后续会讲到)会将字符转换成小写。
问题讲解:当两个意图非常相似,且示例只有实体类别不同时怎么办?
合成一个意图,后期,在对话训练数据中,可以定义不同的故事,路径取决于NLU提取的实体。
问题讲解:想从单字输入中提取实体怎么办?
创建特定意图。
-训练NLU模型:预先配置的管道-
管道:用于提取特定文本特征并训练某些特征,允许自定义,也可以用rasa预先配置的。选择管道就是选择了如何训练NLU模型以及如何解释输出。
预先配置的管道有两种:pretrained_embeddings_spacy, supervised_embeddings
pretrained_embeddings_spacy: 用户输入的每个单词都会被转化为密集的数值向量。优点:当训练数据少的时候非常好用,训练并非从头开始的nlu模型会非常快(迭代时间)。缺点:训练数据只支持英文,训练数据不包含特定的词,比如产品名称和单词缩写等。
注意注意:引号可以不写!!!
supervised_embeddings:更适合自然语言学习(从实际对话中学习),适合于有一千以上带标签的示例的模型。优点:可使用特定的词汇,适用于多种语言,可构建能处理高级案例(一个消息具有多个意图)的模型。
管道的选择:
如果没有训练的词嵌入,用supervised_embeddings,要处理高级案例,用supervised_embeddings,助手必须处理特定于域的词汇,是的话如果训练数据很多,用supervised_embeddings,其他情况用pretrained_embeddings_spacy。
训练nlu模型:可以选一个管道,也可以用项目中写好的。请在虚拟环境中进行,进入项目根目录,在终端执行rasa train nlu。不记得命令的可以看这里。
测试模型:可使用 Resa CLI 函数和 rasa shell nlu 进行测试。(在这里笔者不知道怎么退出rasa shell nlu,怎么也差不到,请看到的小伙伴不吝赐教)
测试时模型的输出,包含了输入的那句话最可能的意图,name 后面的是意图,confidence 后面跟的是对这个意图的确定性。
管道由很多组件构成,下面是完整组件列表,负责特定的内容。了解每个组件的工作方式对于理解你的模型的行为方式以及如何设计训练数据至关重要。
下一章:Rasa官方视频教程整理(二):管道的组件