RASA的逻辑是根据用户本轮说话的意图做分类,然后结合历史上下文,给出一个action。意图分类是后续策略选择的基础。

RASA支持的意图分类器有:

MitieIntentClassifier

使用MitieNLP的分类器,需要Tokenizer都使用MitieNLP,但是MitieIntentClassifier分类器里面已经自带Featurizer功能,所以不是必须配置的。简单来说,是基于稀疏线性核的一个多分类线性SVM。具体算法参考:https://github.com/mit-nlp/MITIE​github.com

SklearnIntentClassifier

使用Sklearn去做意图识别。sklearn也是通过SVM做意图识别,只是sklearn的SVM是通过grid search方法优化的,关于Grid Search参考sklearn.model_selection.GridSearchCV - scikit-learn 0.23.2 documentation​scikit-learn.org

SklearnIntentClassifier使用时候需要将SVM的超参数配置上。具体配置如下:

pipeline:- name:"SklearnIntentClassifier"# Specifies the list of regularization values to# cross-validate over for C-SVM.# This is used with the ``kernel`` hyperparameter in GridSearchCV.C:[1,2,5,10,20,100]# Specifies the kernel to use with C-SVM.# This is used with the ``C`` hyperparameter in GridSearchCV.kernels:["linear"]# Gamma parameter of the C-SVM."gamma":[0.1]# We try to find a good number of cross folds to use during# intent training, this specifies the max number of folds."max_cross_validation_folds":5# Scoring function used for evaluating the hyper parameters.# This can be a name or a function."scoring_function":"f1_weighted"

KeywordIntentClassifier

简单的关键字匹配意图分类,适用于小型项目,意图比较少的情况。当意图很多,相关性又很大的时候,关键词分类器无法区分。

关键字的匹配方式是,训练数据的整句话都作为关键字,去搜索用户说的话。因此写配置数据的时候,仔细设计那个训练数据很重要,关键字不能太长,这容易匹配不上意图,也不能太短,缺少意图的区分度。

DIETClassifier

DIET模型是Dual Intent and Entity Transformer的简称, 解决了对话理解问题中的2个问题,意图分类和实体识别。DIET使用的是纯监督的方式,没有任何预训练的情况下,无须大规模预训练是关键,性能好于fine-tuning Bert, 但是训练速度是bert的6倍。输入是用户消息和可选意图的稠密或者稀疏向量。输出是实体,意图和评分。

下面简要介绍下DIET,内容来之RASA的2020年5月论文翻译。DIET架构见下图,意图是play_game, 实体是ping pong,FFW是共享权重的。输入特征分为2部分,稠密特征 dense features和稀疏特征sparse features。稀疏特征是n-grams(n<=5)的one-hot 或者multi-hot编码,但是稀疏特征包含很多冗余特征,为了避免过拟合,对此加入了dropout。

稠密特征来自预训练模型, 如Bert或GloVe等。假如使用ConveRT作为句子的编码器,ConveRT的_CLS向量作为DIET的初始输入。这就是作为单词信息之外的句子信息特征了。如果使用BERT,我们使用 BERT [CLS] token,对于GloVe,我们使用句子所有token的均值作为_CLS_。

稀疏特征通过一个全连接计算,其中全连接的权重是和其它序列的时间步全连接共享的,目的是为了让稀疏特征的维度和稠密特征的维度一致, 然后将稀疏特征的FFW的输出和稠密特征的向量进行concat拼接,在拼接后面再接一个FFW,FFW的权重也是共享的。在实验中,这一层的维度是256。这一步是让稀疏特征和稠密特征合并,并转换成预训练模型的特征维度。

transformer模块,使用2层layer,使用token的相对位置编码。

Named entity recognition 命名实体识别部分

实体识别分类标签y是根据条件随机场Conditional Random Field (CRF) 计算的,是用的transformer的输出的向量,注意根据输出向量可以找到对应的输入token位置。a是表明句子输入的token, yentity是的实体,LE是损失函数,LCRF是CRF的负的对数似然函数。 对应的是如下图部分:Intent classification 意图分类意图分类就是CLS经过transformers的输出,然后后意图标签y向量化后计算相似度, 这里计算损失是用的dot-product loss,点积损失,使得这个相似度和真实意图的相似性最高,使用负采样计算与其它意图的相似性降低。LI表示的是意图损失,SI+表示的是与正样本意图的相似度,SI-表示与负样本的相似度,Ω−I表示的是负样本的集合。大尖括号<>表示的是所有样本的总和,就是每个意图的损失总和。

Masking 遮罩部分

受Masking语言建模任务的启发,我们添加了一个额外的训练目标来预测随机masked的输入token。我们随机选择一个句子的15%的token,对于这些token,有70%的概率会被我们的__MASK__ 向量替换,10%的概率我们会替换成一个随机的token向量,剩余20%的概率保持原始输入不变。然后对这个部分的token经过transformer计算后,与这个原始的单词进行向量和FFN后计算点击损失。如下图标记部分:Mask的损失函数和intent的损失函数很像。SM+是正样本的相似度,SM-是负采样后计算的相似性。Ω−M是负样本的集合,大尖括号<>是所有样本的总和。

添加Masking操作的目的是模型泛化,或者说是正则化器,防止过拟合,让模型学习更多的特征。

Total Loss 总的损失

总的损失是三部分损失之和Batching 批次

我们使用平衡的batching策略来减轻类别的不平衡性,因为有些意图可能比其他意图更为频繁。另一方面通过增加批次大小作为另一种正则项的方式,减少过拟合。

FallbackClassifier

当意图识别的得分比较低时,使用该分类器决定是否给出nlu_fallback意图。注意,这个FallbackClassifier是跟在其他意图分类器之后,对上一个意图分类提给出的意图和意图评分进行分类。如果原意图分类器给出的意图预测置信度低于FallbackClassifier的,或者两个排名最高的意图的置信度得分接近时,可以使用FallbackClassifier实施 回退操作,以处理不确定NLU预测的消息。

rasa算法_(六)RASA NLU意图分类器相关推荐

  1. rasa算法_使用 Rasa 构建天气查询机器人

    本文将介绍如何使用 Rasa NLU 和 Rasa Core 来构建一个简单的带 Web UI 界面的中文天气情况问询机器人(chatbot). 源代码地址 功能 这个机器人可以根据你提供的城市(北京 ...

  2. rasa算法_【RASA系列】语义理解(上)

    Rasa是用于构建基于上下文的智能助手和聊天机器人的一套开源机器学习框架,Rasa有两个主要模块: Rasa NLU :对用户消息进行语义理解,包括意图识别和实体识别,它会把用户的输入转换为结构化的数 ...

  3. rasa算法_(十八)基于RASA开始中文机器人实现机制

    前文介绍了基于RASA的总体架构,本文着重介绍一下实现细节. 机器人管理概述 框架是多租户SAAS系统,每个用户可以创建多个机器人,每个机器人关联独立的语料库,机器人能力,话术流程,在RASA中对应一 ...

  4. 章节七:RASA NLU组件介绍--意图分类器和实体提取器

    目录 一.前言 二.意图分类器 2.1 MitieIntentClassifier 2.2 LogisticRegressionClassifier 2.3 SklearnIntentClassifi ...

  5. Rasa课程、Rasa培训、Rasa面试系列之: Rasa NLU意图和实体-分词器

    Rasa课程.Rasa培训.Rasa面试系列之: Rasa NLU意图和实体-分词器 在Rasa项目中,NLU管道定义了将非结构化用户消息转换为意图和实体的处理步骤.它由一系列组件组成,可以由开发人员 ...

  6. Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model

    Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model Connecting to Messaging and Voice Channels Rasa开 ...

  7. Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)

    Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二) Rasa 官网 https://rasa.com/ Choosing the Right ...

  8. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes

    Rasa课程.Rasa培训.Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes Mosig 博士 Dialogue Transformers第二作者 在 Rasa,我们的团队正 ...

  9. 特征向量中的NLU意图识别流程及应用

    NLU意图识别的流程说明 基于智能问答的业务流程,所谓的NLU意图识别就是针对已知的训练语料(如语料格式为(x,y)(x,y)格式的元组列表,其中xx为训练语料,yy为期望输出类别或者称为意图)采用选 ...

最新文章

  1. ionic4中使用Swiper触屏滑动---心酸路
  2. awl 多线程SYN***工具0.2版,加了MAC伪装
  3. 每日一问一周汇总:第2期
  4. 2019\Province_C_C++_B\试题E-迷宫
  5. 教你玩转CSS 伪元素
  6. 又是一年国庆假期最后一天
  7. IDEA项目 let报错爆红
  8. saltstack之keepalived的安装配置
  9. mysql执行ref_MySql执行分析
  10. Java3种错误_3种常见的Class级别的错误
  11. scala中命名参数函数_Scala中的命名参数和默认参数值
  12. github 提速方法
  13. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 C Thinking Bear magic
  14. win7下处理桌面文件丢失及黑屏的有效方法
  15. 99se.PCB技术大全
  16. 传奇服务器二级密保信息存档,找回玩家账号和二级密码,修改密码和密保
  17. 系统开发方法和开发模型
  18. iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案
  19. 一位老工程师在谷歌工作十年后的总结
  20. java执行shell命令权限不够_Java调用shell脚本解决传参和权限问题的方法|chu

热门文章

  1. 信息解码(Message Decoding)ACM题目
  2. 为增进理解力而奋斗终身
  3. Flutter 构建完整应用手册-动画
  4. javascript_core_01之数据类型与运算
  5. KVM精简教程(一):安装KVM
  6. Cocos2d入门--3--向量的应用
  7. Linq之延迟加载特性
  8. android Image zImage uImage boot.img分别是什么?个人笔记
  9. NSString取子串
  10. 使用文件操作函数实现:文件的复制功能。