rasa算法_(十八)基于RASA开始中文机器人实现机制
前文介绍了基于RASA的总体架构,本文着重介绍一下实现细节。
机器人管理概述
框架是多租户SAAS系统,每个用户可以创建多个机器人,每个机器人关联独立的语料库,机器人能力,话术流程,在RASA中对应一个RASA运行实例。机器人管理应用系统需要给用户提供最精简的配置UI,且可以完成Rasa需要的相关配置。然后将这些数据转成Rasa可以识别的yaml格式,保存在HDFS中。RASA到HDFS中获取配置数据,进行训练,测试。测试通过后将模型保存在HDFS中,部署上线时候,在启动一个容器,加载HDFS中的模型,并启动RASA服务。对话管理应用系统接收用户消息,调用RASA endpoint完成响应消息预测。
机器人创建应用系统中创建唯一标识
调用rasa init接口,在rasa中初始化机器人
在git中创建版本库
在hdfs分配存储路径和空间
在train server上启动docker
机器人话术设计
RASA本身支持是多轮对话,需要做一个可视化流程图,然后转成Rasa的story和rule的配置。检索型机器人,少量Faq可以直接使用rasa的response selector完成。但是海量知识库的检索,需要单独系统,这个后续在机器人扩展能力里面再阐述。
因为机器人创建的时候,已经分配了训练数据的存储路径,话术设计的内容可以直接生成配置文件放在训练数据的路径里面。
机器人训练
训练数据生成以后,用户可以启动训练。每次数据训练,会自动在git中生成一个版本节点。训练是一个异步任务,放入对话管理平台调度服务统一调度。训练完成后,可以直接启动测试。这时候rasa的服务是在训练服务器启动。当训练新数据的时候,必须停止当前的测试任务。
机器人上线
测试通过后,启动上线。如果是第一次上线,需要在生产环境创建容器,然后使用新训练的模型,启动生产环境对应的docker。如果是升级更新,只是使用新模型重启docker。
机器人能力扩展
假如,我们已经有了KBQA的服务,那么用户要开通这个服务,那只需要点击开通,然后用户需要选择哪类问题由KBQA回答,那么对话管理服务,要做的事情,根据用户提供的问题分类训练一个意图,然后配置规则将这个意图关联到KBQA Action上。能力扩充就完成了。用户关闭KBQA,在配置文件中删除这个意图就可以了。
关于如何创建KBQA服务,如何使用用户数据Fine turn模型等,后续会按不同的能力单独讨论。
机器人领域动态扩充
前面我们讲的训练数据,都基于一个前提,那就是字典或者说语言模型是固定的。我们在此基础上扩展训练数据。
当我们使用一个新的领域的时候,会有很多字库中不存在的词,这个时候需要Fine turn语言模型和字库。比如我们使用的分词是语言模型分词,用的BERT作为基础Featurizer,因此,机器人领域扩充是Fineturn BERT模型。我们在训练服务器上单独启动BERT服务,由用户传入训练数据,然后加入训练调度队列,成功后生成模型文件,供RASA启动的时候引用。
在线学习
在线学习,训练数据和上线的流程前面已经有了,这里关键是错误回答的标注问题。如何根据用户的标注,重新更新训练数据。
业务能力集成
业务模块提供接口,rasa action server调用自定义action去调用业务模块的接口,完成业务能力集成。
算法层架构图
1、生产服务器和训练服务器通过HDFS做文件共享,训练服务器从HDFS取训练数据进行训练,生成模型,模型文件依旧保存于HDFS,而生产服务器从HDFS取训练好的模型应用于推理。
2、每个robot使用的模型都可能不同,因此使用容器隔离,每个机器人启动一个容器,容器内运行自己的rasa及各个能力组件。
3、语言模型也在各自的容器内训练,启动的时候使用各自的语言模型。
RASA相关配置
nlu和dm的配置
nlu和dm的配置都在config.yml里面,语言模型采用BERT,主要分了器使用DIET。
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: zh
pipeline:
- name: LanguageModelTokenizer #需要改代码,去掉不支持中文的限制
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: LanguageModelFeaturizer
model_name: bert
model_weights: bert-base-chinese
- name: DIETClassifier
epochs: 100
- name: EntitySynonymMapper
- name: ResponseSelector
epochs: 100
- name: FallbackClassifier
threshold: 0.3
ambiguity_threshold: 0.1
policies:
- name: MemoizationPolicy
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
Tracker Store配置
Tracker Store主要功能是存储用户对话,我们使用PostgreSQL存储。Rasa默认就支持。PostgreSQL的参数在endpoints.yml中配置。
endpoints.yml
tracker_store:
type: SQL
dialect: "postgresql" # the dialect used to interact with the db
url: "postgres"
db: "rasa" # path to your db
username: # username used for authentication
password: # password used for authentication
query: # optional dictionary to be added as a query string to the connection URL
driver: my-driver
Event Broker
事件代理主要作用是讲机器人的对话异步传给其他服务,比如将机器人的消息转发给ES等。Event Broker支持kafka,数据库方式等,我们采用kafka。配置也在endpoints.yml中配置。
endpoints.yml
event_broker:
type: kafka
security_protocol: SASL_PLAINTEXT
topic: topic
url: localhost
sasl_username: username
sasl_password: password
Lock Store配置
Rasa使用token锁定机制来确保以正确的顺序处理给定会话ID的传入消息,并在消息处于活动状态时锁定会话。这意味着多个Rasa服务器可以作为复制服务并行运行,并且客户端在发送给定会话ID的消息时不一定需要寻址同一节点。我们采用Redis作为Lock存储。redis参数的配置,也是在endpoints.yml中。
lock_store:
type: "redis"
url:
port:
password:
db:
key_prefix:
模型加载路径
模型保存在hdfs上,为了和rasa服务解耦,我们在rasa中使用从server加载,这样模型保存以后,启动一个http服务,通过http服务可以下载模型,然后再rasa的endpoints.yml中配置server地址
models:
url: http://model-server.com/models/default
wait_time_between_pulls: 10 # In seconds, optional, default: 100
Action Server配置
需要运行ActionServer才可以调用自定义Action。Actionserver的配置也在endpoints.yml里面。
action_endpoint:
url: "http://localhost:5055/webhook"
Action server的启动方式
rasa run actions
启动Action Server的时候,需要在配置文件的路径下,且里面必须包含actions路径,如典型一个机器人的配置如下,其中helloworld.py就是一个自定义action。
├── actions
│ ├── helloworld.py
│ └── __init__.py
├── config.yml
├── credentials.yml
├── data
│ ├── nlu.yml
│ ├── rules.yml
│ └── stories.yml
├── domain.yml
├── endpoints.yml
├── models
│ └── 20201228-084711.tar.gz
└── tests
└── test_stories.yml
自定义action
KBQA、DrQA 、闲聊机器人、检索机器人、业务系统相关查询,都是基于自定义Action实现的。actions路径下有如下文件:
├── actions
│ ├── drqa_action.py
│ ├── kbqa_action.py
│ ├── chat_action.py
│ ├── retrival_action.py
│ ├── business_action.py
│ └── __init__.py
这些自定义action主要是实现了rasa_sdk的api和各个能力之间的适配。具体能力的实现在不同的系统中,后续我们会依次介绍各个系统的实现。
机器人能力扩展开发规范
由于机器人能力是动态扩展的,而且要嵌入到rasa系统中,因此要有遵循一定规则:支持命令行启动训练和推理
支持http调用,并满足统一的接口规范
支持训练数据和模型远程存储
rasa算法_(十八)基于RASA开始中文机器人实现机制相关推荐
- rasa算法_(六)RASA NLU意图分类器
RASA的逻辑是根据用户本轮说话的意图做分类,然后结合历史上下文,给出一个action.意图分类是后续策略选择的基础. RASA支持的意图分类器有: MitieIntentClassifier 使用M ...
- 莱布尼兹普遍演算的定义注释--逻辑与算法之十八
莱布尼兹普遍演算的定义注释–逻辑与算法之十八 证明完了24个命题,在片断20的最后部分,莱布尼兹对于他的演算中提到的定义和公理给出了一大段注释.首先注释的是片断20给出的定义3,4,5,6. 这非常自 ...
- 【Microsoft Azure 的1024种玩法】六十八.基于Azure云平台使用Azure Virtual machines快速搭建Docker容器
[简介] Docker 是一个开放源代码软件,主要应用于开发应用.交付应用.运行应用,Docker 可以将应用程序及其依赖项打包到可以在任何 Linux.Windows 或 macOS 计算机上运行的 ...
- 【Microsoft Azure 的1024种玩法】四十八.基于Azure Virtual Machines快速搭建SQL Server应用
[简介] SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统,本文的主要内容是围绕着Azure Virtual Machines 来快速搭建SQL Server应用,使我 ...
- mysql 编程算法_十大编程算法助程序员走上高手之路
算法一:快速排序算法 快 速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种 状况并不常见.事实上,快速排 ...
- 什么是陀螺仪的dr算法_一种基于DR/GPS/MM的组合定位系统数据融合算法
摘 要: 针对盲区中使用INS惯性导航系统进行定位存在误差积累的问题,提出一种基于DR航位推算.GPS全球定位系统和MM地图匹配的组合定位系统数据融合算法.该算法利用GPS和MM中得到的位置信息,一方 ...
- rasa算法_【RASA系列】语义理解(上)
Rasa是用于构建基于上下文的智能助手和聊天机器人的一套开源机器学习框架,Rasa有两个主要模块: Rasa NLU :对用户消息进行语义理解,包括意图识别和实体识别,它会把用户的输入转换为结构化的数 ...
- rasa算法_使用 Rasa 构建天气查询机器人
本文将介绍如何使用 Rasa NLU 和 Rasa Core 来构建一个简单的带 Web UI 界面的中文天气情况问询机器人(chatbot). 源代码地址 功能 这个机器人可以根据你提供的城市(北京 ...
- JAVA 判断简单密码算法_十道简单算法题二【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
最新文章
- OpenCV图像梯度(Sobel和Scharr)
- grep、egrep、fgrep的用法与特性详解
- win7 64编译64位boost
- Linux IO磁盘篇整理小记
- Angular Shadow Root DOM的一些API
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- 敏捷开发中史诗故事与用户故事的颗粒度
- 当信贷风控遇见机器学习,模型还是规则?
- hdu 1425 sort用堆排序做的
- discuz源代码分析
- BP神经网络分类算法
- UC浏览器如何开启html5,如何开启手机uc浏览器中的极速模式
- liu系统的混沌特性及其matlab仿真,毕业论文-Liu系统的混沌特性及其Matlab仿真
- 利用github和hexo一步步生成个人博客(2)---基本配置和发表文章
- 四叉树 Quadtrees
- phpmywind 解决多语言版本 导航调取问题-5.6之前版本
- 机器学习面试题101~200
- 15个WordPress幻灯片画廊插件
- Matlab编程之混沌系统李雅普诺夫指数分析
- AnyTXT 一款强大的本地文件内容搜索软件
热门文章
- 限制在同一台电脑上只允许有一个用户登录
- Oracle 创建表空间、用户、权限_(plsql)
- 自定义Valid注解,校验List集合
- 怎么查看指定app日志_Linux系统查看系统信息和日志有哪些常用的命令
- shell取当前月份第一天_红帽认证8.0版本即将发布!Ansible和shell脚本自动化将重点考察...
- python程序设计的基本步骤_Python程序设计课程教与学(54、72、80学时教学大纲)...
- 命令行给php脚本传参,如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?...
- IOS – OpenGL ES 调节图像色彩替换 GPUImageFalseColorFilter
- Python abs函数 - Python零基础入门教程
- springboot幂等性_请问,springboot项目支付接口设计,如何保证支付的幂等性,并能给前端反馈友好的提示?...