本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统所使用的各项配置进行详细剖析,并通过debug模式来理解在下面展示的Rasa graph architecture(即DAG图)中各个组件是如何相互衔接来共同完成从用户输入语言理解,到预测下一个对话行为,再到最终输出结果给用户这样一个对话过程。

一、Rasa项目实战之电商零售智能业务对话机器人配置详解与Debugging演示

  1. 电商零售业务对话系统的config内容逐行分析

首先来看一下本项目所使用的config文件的内容,在开头部分定义了:

Recipe是Rasa3.x提出的概念,其核心是根据pipeline和policies定义了一个对话机器人由哪些过程及组件来构成,相当于一个“配方”,这样的概念也是为未来运行多个对话机器人打下基础。

在Rasa的DAG图中运行的每个组件都需要使用recipe进行注册,譬如WhitespaceTokenizer的注册代码如下:

在上面的recipe配置部分可以看到使用的语言是en,当然Rasa也提供了基于中文的版本(https://github.com/crownpku/Rasa_NLU_Chi)。在实际使用中文时,可以使用官方自带的支持中文的tokenizer:

Rasa在理论上可以支持任意的语言。

在config文件中定义了关于pipeline部分,首先是关于语言处理的部分:

WhitespaceTokenizer:用于英文分词处理

RegexFeaturizer:这是loop up相关正则表达式操作的featurizer,用途是使用正则表达式把用户信息转换为一个向量表示,输出为sparse_features和tokens.pattern

LexicalSyntacticFeaturizer:针对用户消息创建词汇和句法相关的features来支持entity提取,输出为sparse_features

CountVectorFeaturizer:这里有两个,一个用于token级别的(one house encoding),另一个用于character级别的(n-gram)

使用DIETClassifier对用户输入意图进行预测并设置训练时使用的epochs:

如果训练数据不是很充分的情况下,可以使用同义词技术把不同表达形式转换为同一种形式:

对于常见问答faq和闲聊内容采用ResponseSelector通过计算两个向量相似度的高低来进行问题和response的匹配:

在实际对话中,经常会出现一些在正常业务对话流程之外的用户对话行为,这时就需要在开发业务对话机器人时设计好fallback机制来处理这样的对话行为,譬如设定触发fallback处理的threshold,当一个intent预测得到的confidence低于这个threshold时就会触发fallback,另外一种情况是,排名前2位的预测结果的confidences之间的差值如果小于ambiguity_threshold,也会触发fallback处理:

使用DucklingEntityExtractor来获取entities的值:

DucklingEntityExtractor是一个开源的用于从用户输入信息中提取实体信息的模型(GitHub - facebook/duckling: Language, engine, and tooling for expressing, testing, and evaluating composable language rules on input strings.),它提供了很多类型的entities的提取,以下是一些样例,由于它是预训练好的模型,所以在使用时不需要太多的训练数据,你可以直接把输入信息传入它来提取相关的entities信息:

下面是关于policies部分:

MemoizationPolicy:如果对话turns的内容能够和stories.yml里的训练数据进行匹配,那么就会使用这种policy来预测action

TEDPolicy:基于机器学习模型TED进行预测的policy

RulePolicy:如果逻辑规则是固定的,就可以使用这种policy进行预测

core_fallback_threshold:当一个policy的预测confidence低于这个threshold时,就会触发fallback action

  1. Rasa 3.x Graph Architecture剖析

从上面的Rasa DAG图可以看到,Rasa3.x统一了NLU和policies,无论是NLU部分还是policies都是一个个的组件而已(graph components)。在这些组件之间存在依赖关系,从图中可以看到,CountVectorFeaturizer1和CountVectorFeaturizer2都依赖于组件Tokenizer,而DIETClassifier依赖于CountVectorFeaturizer1和CountVectorFeaturizer2,CountVectorFeaturizer1,CountVectorFeaturizer2和RegexFeaturizer在训练和加载时可以同时进行处理,这可以极大地加快处理速度。

DIETClassifier输出的是intents和entities,DAG图中的各种policies在进行预测时是并行操作的方式,最终使用Policy Ensemble来决定由哪一个policy来做出预测action。

2.  通过debug模式剖析各个配置组件的工作机制

首先运行命令rasa shell –debug启动debug模式,可以看到会加载大量的各种lib:

Rasa server是基于Sanic框架来构建的:

在这里使用了基于内存的TrackerStore来存储对话状态,在实际项目开发中一般会采用Redis:

初始化语言生成组件(NLG):

加载训练好的模型:

调用组件的load方法来在各个Graph node加载对应的组件,在Rasa框架的DAG图中,所有组件在运行时都会表示为图中的一个node,每个node之间的依赖关系用图中带单向箭头的线条来表示:

从下面输出信息可以看到,调用load方法后会使用resource这个标签来定位存储在model storage中的模型,这些组件在训练完成后,会通过序列化操作保存到model storage中:

下面这些是关于DIETClassifier模型在训练时记录的一些度量指标:

DIETClassifier是基于tensorflow框架来构建的:

尝试加载配置中定义的EntitySynonymMapper组件,但是实际上并不存在:

加载ResponseSelector,这也是基于tensorflow框架构建的模型:

下面是加载进行fallback处理的FallbackClassifier组件,以及各个policies组件,如MemoizationPolicy,TEDPolicy等:

加载RulePolicy组件,以及通过DefaultPolicyPredictionEnsemble的load方法加载policy ensemble组件用于对各个policies组件的预测结果进行选择:

下面通过对话演示这些组件之间是如何进行工作的,首先输入:please show my order status:

首先会为这个对话创建一个ID,并调用action_session_start来启动一个新的对话session。

这时可以看到会使用dask runner来运行graph:

接下来就是调用各个NLU组件来对用户输入信息进行处理,如调用NLUMessageConverter.convert_user_message对输入信息进行初步处理,之后进行分词,然后进行特征提取:

调用DIETClassifier进行实体信息提取和意图识别:

下面是调用ResponseSelector.process并添加两个分类选择key,一是针对常见问题的faq,另一个是针对用户闲聊内容的chitchat:

运行FallbackClassifier.process及DucklingEntityExtractor.process,Ducking会启动一个http server用于接收需要解析的用户信息:

处理对话机器人工作所依赖的domain配置信息:

这是用户输入处理后的结果:

接下来就是预测对话机器人需要执行什么操作,从config中的policies的配置来看,首先会运行MemoizationPolicy,但是并没有找到匹配的action:

使用RulePolicy来进行预测,首先根据用户输入内容进行检查,没有定义这样的rule,所以继续根据识别的用户意图进行检查,发现定义了这样的rule:

所以RulePolicy给出的预测action是action_deactivate_loop:

按照config配置,接下来还会使用TEDPolicy进行预测,这个policy预测的action是action_give_name,显然与RulePolicy预测结果有差异:

现在所有三种policies都已完成预测,那么最后会由policy ensemble组件根据各个预测结果按照一定规则进行选择,由于RulePolicy的预测结果的confidence为1.00,所以最终ensemble组件选择了RulePolicy的预测结果,即接下来对话机器人需要执行action_deactivate_loop:

这是当前tracker中的slots状态:

这里需要注意的是上面RulePolicy预测得到的action_deactivate_loop是Rasa对话管理器(即Rasa core)中内置的action(用于使当前正在运行的form进入不激活状态,并且重置该form所请求的slot),在下面的信息中可以看到,Rasa server自动执行了这个action:

那么接下来又需要进入预测对话机器人的下一个action的环节了,首先是使用MemoizationPolicy进行预测,这个policy是使用历史对话信息来在stories中查找是否有与之匹配的训练数据来进行预测的,在下面的输出信息里可以看到上一个action是”action_listen”(state 1所示),结果是没有找到匹配的action:

接下来使用RulePolicy进行预测,在当前tracker中存在state 1和2的信息,所以这个policy预测下一个action是” order_status_form”:

接下来由TEDPolicy进行预测,这次预测的action是”action_listen”(这也是Rasa core中内置的一个action,作用是让对话机器人不采取任何action而只是等待用户的下一个输入):

我们来看下policy ensemble组件会如何选择,可以看到最后选择了RulePolicy的预测结果,这是因为RulePolicy的预测结果的confidence是1.00:

所以接下来就会激活form “order_status_form”,并且可以看到所请求的slot为”email”,Rasa server会自动运行这个form action,然后会触发BotUttered事件:

接下来Rasa server使用RulePolicy预测下一个action为”action_listen”,这是因为从上面输出看,Rasa server已经调用”utter_action”,即定义在domain中的utter_ask_order_status_form_email输出信息给用户,所以 Rasa server会自动执行core内置的action “action_listen”来使对话机器人进入等待用户输入的状态:

Rasa 3.x 源码高手之路:系统架构、内核算法、源码实现详解:

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/auth?redirect_url=https%3A%2F%2Fappz0c1mshy7438.h5.xiaoeknow.com%2Fv1%2Fgoods%2Fgoods_detail%2Fp_62353091e4b0beaee43652c9%3Fentry%3D2%26entry_type%3D2001%26share_type%3D5%26share_user_id%3Du_621b7b85b8dc5_3yDAYnFXeM%26type%3D3

Rasa 3.x 源码高手之路:基于Transformer的对话机器人RasaPolice:

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/auth?redirect_url=https%3A%2F%2Fappz0c1mshy7438.h5.xiaoeknow.com%2Fv1%2Fgoods%2Fgoods_detail%2Fp_62353421e4b04d7e2fd83665%3Fentry%3D2%26entry_type%3D2001%26share_type%3D5%26share_user_id%3Du_621b7b85b8dc5_3yDAYnFXeM%26type%3D3

星空NLP对话机器人论文班:NLP领域10篇最高质量的对话机器人经典论文解密:

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/goods/goods_detail/p_623874b7e4b04e8d90256da1?type=3&share_type=5&share_user_id=u_621b7b85b8dc5_3yDAYnFXeM&entry=2&entry_type=2001

Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 (7大项目Expert版本):

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/goods/goods_detail/p_62276dd8e4b0beaee431c848?type=3&share_type=5&share_user_id=u_621b7b85b8dc5_3yDAYnFXeM&entry=2&entry_type=2001

Advanced Python硬核实力高手实战之路:架构、算法、源码、案例(81讲):

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/goods/goods_detail/p_6227e564e4b0beaee431ce2a?type=3&share_type=5&share_user_id=u_621b7b85b8dc5_3yDAYnFXeM&entry=2&entry_type=2001

NLP on Transformers 高手之路137课Pro版:

https://appz0c1mshy7438.h5.xiaoeknow.com/v1/goods/goods_detail/p_621c0289e4b04d7e2fd0365a?type=3&share_type=5&share_user_id=u_621b7b85b8dc5_3yDAYnFXeM&entry=2&entry_type=2001

Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人配置详解与Debugging演示(八十七)相关推荐

  1. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人ResponseSelector使用详解与Debugging演示(八十八)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统如何使用Rasa框架提供的ResponseSelector组件处理常见问题和用户闲聊内容的过程,以及如何 ...

  2. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人业务功能微服务解析与调试演示(八十二)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的 ...

  3. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人业务功能微服务解析与调试演示(八十三)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人业务功能的微服务如何结合数据库使用进行解析,并通过Rasa Interact ...

  4. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售对话机器人通过Rasa interactive进行问题修正与调试演示(八十四)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人通过Rasa Interactive的调试来定位NLU的问题,并通过交互式模 ...

  5. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十九)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

  6. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十一)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

  7. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人架构与流程及Rasa Interactive实验剖析(八十)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人架构.流程进行解析,并通过Rasa Interactive分析配置文件中各个组件的 ...

  8. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目NLU Data详解(七十一)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目NLU Data的分层结构,数据格式,在意图分类和实体提取时如何使用正则表达式以及lo ...

  9. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Form解析及自定义全解(七十五)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目关于Form的定义,如何激活一个form或者使当前运行的form进入不激活状态,如何在 ...

最新文章

  1. python爬取百度贴吧xpath_爬虫基础系列xpath实战——爬取百度贴吧图片(3)
  2. 142. Linked List Cycle II 环形链表 II
  3. 论大数据视角下的地球空间信息学的机遇与挑战
  4. 三维重建——纹理映射
  5. stl Vecotr中遍历方法
  6. java 非模态_统计图钻取的明细报表在非模态窗口中显示
  7. ajax基本概念,方法
  8. 走过电竞之路的程序员
  9. python学习笔记六
  10. 物联网应用案例,中易云真实搭建项目
  11. 逆波兰式 java_逆波兰式(后缀表达式)的计算 中缀表达式转后缀表达式(逆波兰式)【java实现】...
  12. html5 3d背景墙,3D背景墙的价格怎样?3D背景墙的介绍?
  13. ChatGPT在线网页版和接口
  14. EcShop常用 促销活动表结构
  15. H.265/HEVC解码器 C 参考代码
  16. 12Cr2Mo1R(H)化学成分
  17. 特征点检测和特征点匹配(ORB)
  18. 基于MFC框架的学生信息管理系统/学生成绩管理系统(带有图形化界面)
  19. 微信小程序开发—入门到跑路(一)
  20. 动态链接--打桩机制

热门文章

  1. 容错学习问题(LWE)
  2. 千锋教育python2104期总结day13
  3. H.265和H.266之间的差异
  4. 亚马逊皇冠软件的全自动运行主要体现在哪些方面?
  5. Springboot - 用SpringBoot 2.3.0.M1创建Docker映像
  6. SpringCloud Alibaba 之 Nacos
  7. ddz指标最佳数值_DDE决策、DDX、DDY、DDZ指标详解,解密它们的致命缺陷
  8. sed 中带变量的情况
  9. Qt仿QQ界面,主界面、聊天界面、表情界面
  10. java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署