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调用,并满足统一的接口规范

支持训练数据和模型远程存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

distinct返回null报错_C#之集合常用扩展方法与Linq

一、集合的常用扩展方法(lambda的方式)1.Where() 根据条件选择数据2.Select() 根据数据条件转换成新的数据类型,类似于DTO转换类3.Max() 根据条件选择最大值4.Min() 根据条件选择最小值5.OrderBy() 根据条件升序排序如果升序中Id都为1,那么就根据第二个条…

python tts 保存_Python 文件和目录操作学习

文件与文件路径文件有两个关键属性:文件名和路径。路径指明了文件在计算机上的位置。文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型目录也叫文件夹,文件夹可以包含文件和其他文件夹路径分隔符在 Windo…

图片 过度曝光_解读:摄影初学者,如何理性处理“曝光不足”与“曝光过度”...

曝光是摄影的基本要素之一,但是许多摄影初学者在曝光不足和过度曝光的问题上经常会遇到很多的困扰,甚至完全不知道如何处理这些问题。其实知道如何获得正确的曝光,并不是你了解曝光过度和曝光不足照片区别的唯一原因。因为创造性的表达比技术…

win7电脑误删鼠标键盘驱动_鼠标键盘,教您怎么解决键盘和鼠标失灵的问题

有的时候在我们使用电脑的过程中会突然间有键盘鼠标失灵的情况发生,而我们都是不明所以、不知所措的。对此,小编我给你们找了解决方法。接下来,就让我们一起往下看看关于键盘鼠标失灵的解决方法吧。键盘和鼠标都是电脑的重要组成部分&#xf…

airpods删除别人的配对_怎么不让别人连我的airpods

airpods很容易就被朋友拿混了,到时候分不清自己的airpods耳机是一件很尴尬的事情。那么,airpods如何避免和别人混拿?不拿出来是最好的解决办法,也可以提前设置不让别人连我的airpods,这样是最靠谱的方法。怎么不让别人…

jmeter安装包双击没反应_windows环境下Jmeter5.2的安装使用

标签:target 首页 环境变量 百度搜索 bsp nbsp htm targe oracl一、安装配置JDKJmeter5.2依赖JDK1.8 版本,JDK安装百度搜索JAVA下载JDK,地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht…

php把中文写入mysql_php写入mysql中文乱码的实例解决方法

php写入mysql出现中文乱码的解决办法是:在建立数据库连接之后,将该连接的编码方式改为中文。代码如下:$linkIDmysql_connect("localhost","root","admin");if(!$linkID){echo "数据库连接失败&#xff01…

mysql 导入.sql文件_MySQL导入.sql文件及常用命令

MySQL导入.sql文件及常用命令在MySQL Qurey Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令:mysql> source d:/myprogram/database/db.sql;另附mysql常用命令:一) 连接MYSQL&#xff…

mysql ubuntu 17.04_1、mysql 5.7 ubuntu17.04

系统:ubuntu17.04数据库主要分文档型和服务型两类:文档型:如sqlite3 (17.04自带/usr/bin/sqlite3)就是一个文件,应用在移动端如手机,pad,家电等服务型:如mysql有服务端(存储数据)和客户端mysql数…

mysql 查询倒数第二条记录_MySQL查询倒数第二条记录实现方法

有时候会用到查询倒数第二条记录lastHolderChangeHistory.find_by_sql([" SELECT * FROM holder_change_historieswhere treasure_id ?order by id desclimit 1,1 ",hch.treasure_id])select *from tablename awhere (select count(*)f…

kafka和mysql内存机制_一文五分钟让你彻底理解Kafka架构原理

对于kafka的架构原理我们先提出几个问题?1.Kafka的topic和分区内部是如何存储的,有什么特点?2.与传统的消息系统相比,Kafka的消费模型有什么优点?3.Kafka如何实现分布式的数据存储与数据读取?一、Kafka架构图1.kafka名词解释在一套kafka架构中有多个P…

centos mysql 互为主从_centos7 mysql互为主从+keepalived

一、互为主从配置1.1、资源情况192.168.11.177 server1192.168.11.180 server2192.168.11.210 VIP1.2、server1配置# vi /etc/my.cnf[mysqld]server-id1log-binmysql-binrelay_logmysql-realy-binrelay_log_indexslave-mysql-realy-bin.indexexpire_logs_days15binlog_formatmi…

手机apk签名工具安卓版_小飞鱼APK签名工具使用方法

小飞鱼APK签名工具是小飞鱼旗下的一款APK签名软件。是移动开发者必备的一款软件。使用方法1、双击运行小飞鱼APK签名工具.exe文件,出现如下界面:2、点击“功能”,没有签名证书的选择证书制作,制作完证书再选择APK签名,有证书的直接…

React 路由传参

引言 在上一篇中&#xff0c;我们学习了 React 中使用路由技术&#xff0c;以及如何使用 MyNavLink 去优化使用路由时的代码冗余的情况。 这一节我们继续上一篇 React 路由进行一些补充 1. Switch 解决相同路径问题 首先我们看一段这样的代码 <Route path"/home&q…

mysql 5.5 client 字符集_rhel4 mysql5.5 字符集_character set

和oracle字符集一样,有些晕,太细了小结:1,字符集分为:服务器,数据库,表,连接,列等对应参数为:mysql> show variables like chara%;------------------------------------------------------| Variable_name | Value |---------------------…

mysql heartbeat lvs_mysql+heartbeat+DRBD+LVS实现mysql高可用二

上一节&#xff0c;讲述了DRBD的安装&#xff0c;因为要利用heartbeatDRBDmysql实现mysql的高可用&#xff0c;所以这一节讲述安装mysql和heartbeat的安装分别在各个节点安装mysql&#xff0c;文本使用的是二进制的安装包mysql-5.5.33-linux2.6-x86_64.tar.gz[rootdrbd1 usr]# …

mysql 嵌入式 性能_database – 在mySQL中优化嵌入式SELECT查询

好的,这是我现在正在运行的一个查询,它有45,000条记录,大小为65MB ……并且即将变得越来越大(所以我也要考虑未来的性能)&#xff1a;SELECT count(payment_id) as signup_count,sum(amount) as signup_amountFROM payments pWHERE tm_completed BETWEEN 2009-05-01 AND 2009-0…

mysql执行语句后回退_MySQL命令学习笔记(八)

1 安全管理1.1 访问控制MySQL服务器的安全基础是&#xff1a; 用户应该对他们需要的数据具有适当的访问权&#xff0c;既不能多也不能少1.2 管理用户MySQL用户账号和信息存储在名为mysql的MySQL数据库中。获得所有用户账号列表时&#xff0c;可使用以下代码&#xff1a;USE mys…

mysql怎样dao出数据库_mysql怎么导出数据库?

mysql怎么导出数据库&#xff1f;下面本篇文章就来给大家介绍3种mysql导出数据库的方法&#xff0c;希望对你们有所帮助。mysql导出数据库的方法&#xff1a;方法一cmd 到mysql bin目录下用如下命令&#xff1a;mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-…

mac 安装mysql怎么卸载不干净_CleanMyMac卸载不干净怎么办?如何彻底删除Mac上的CleanMyMac?...

CleanMyMac for mac是非常受欢迎的系统清理、软件卸载软件&#xff0c;但是想要卸载CleanMyMac的有些用户发现不能完全卸载&#xff0c;那么CleanMyMac卸载不干净怎么办&#xff1f;如何彻底删除CleanMyMac&#xff1f;这里带来两种可以彻底删除CleanMyMac的方法&#xff0c;有…