本文将介绍如何使用 Rasa NLU 和 Rasa Core 来构建一个简单的带 Web UI 界面的中文天气情况问询机器人(chatbot)。

源代码地址

功能

这个机器人可以根据你提供的城市(北京、上海等)和日期(明天、后天等),查询出相应的天气预报。

功能截图

特性

使用 Frame-based 对话管理方案,如果上述两个 Slot (既城市和天气),有任意一个用户未提供,对话管理系统会负责让你澄清相关 Slot 的值。

能力范围

受限于天气数据提供方的能力,这个机器人只能查询 中国大陆地区市级城市 三天以内 (今天,明天,后天) 的气象数据,不能查询过去(昨天,前天)等历史数据。

受限于开发时间,这个机器人 不提供 诸如 这个星期五、下个星期一 这种需要计算才能得到日期给定方式。也 不能提供 诸如 绝对日期:三月一号、六一儿童节日 这种日期的查询能力。

因为使用的是免费的天气查询接口,所以 会有配额限制,可能会因为 超出调用次数 ,而在一个小时内不能用。同时网络查询接口可能存在不稳定因素,导致 没有结果返回或者出现异常,尝试多次重新发送请求可解决问题。

在线演示

Rasa NLU

Rasa NLU 提供了提取用户意图和词槽的功能。具体原理和使用等不在这里详述,请访问文章 TODO。 这里我们使用的 Rasa NLU 的 pipeline 配置(在项目文件 nlu_model_config.yaml 中)如下:

language:"zh"pipeline:-name:"nlp_mitie"model:"data/total_word_feature_extractor.dat"-name:"tokenizer_jieba"-name:"ner_mitie"-name:"ner_synonyms"-name:"intent_featurizer_mitie"-name:"intent_classifier_sklearn"

所用的训练数据 (在项目文件 nlu.json 中)如下(内容过长,已做截断):

{"rasa_nlu_data":{"common_examples":[{"intent":"weather_address_date-time","entities":[{"start":2,"end":4,"value":"上海","entity":"address"},{"start":4,"end":6,"value":"明天","entity":"date-time"}],"text":"我要上海明天的天气"},{"intent":"weather_address_date-time","entities":[{"start":0,"end":2,"value":"上海","entity":"address"},{"start":2,"end":4,"value":"明天","entity":"date-time"}],"text":"上海明天的天气"},...}}

训练所用的命令为 (在项目文件 train_NLU.bash 中):

python -m rasa_nlu.train -c nlu_model_config.yaml -d nlu.json --fixed_model_name current -o models

Rasa Core

Rasa Core 负责对话管理。具体原理和使用等不在这里详述,请访问文章 TODO。 Rasa core 需要提供一个 domain 文件,里面设定了整个对话机器人的小宇宙,它能知道的所有的意图、词槽和动作。

本项目所用的 domain (在项目文件 domain.yml 中),其内容为:

intents:

- greet

- goodbye

- weather_address_date-time

- weather_address

- weather_date-time

slots:

address:

type: text

date-time:

type: text

matches:

type: unfeaturized

entities:

- address

- date-time

actions:

- utter_greet

- utter_ask_address

- utter_ask_date-time

- utter_working_on_it

- bot.ActionReportWeather

- utter_report_weather

- utter_goodbye

templates:

utter_greet:

- text: "你好,请说出需要提供天气预测服务的地点和时间"

utter_working_on_it:

- text: "正在查询中,请稍后 ..."

utter_goodbye:

- text: "再见!"

utter_ask_address:

- text: "哪里呢?"

utter_ask_date-time:

- text: "什么时候?"

utter_report_weather:

- text: "{matches}"

utter_other:

- text: "系统不明白您说的话"

Rasa Core 还需要通过 故事(story) 的形式让框架学习正确的对话管理样本,格式为 Markdown 格式。本项目中的 Story (在项目文件 stories.md 中)定义如下(内容过长,已做截断):

## simple path with greet

* greet

- utter_greet

* weather_address_date-time{"address": "上海", "date-time": "明天"}

- utter_working_on_it

- action_report_weather

- utter_report_weather

## simple path

* weather_address_date-time{"address": "上海", "date-time": "明天"}

- utter_working_on_it

- action_report_weather

- utter_report_weather

## address + date-time path with greet

* greet

- utter_greet

* weather_address{"address": "上海"}

- utter_ask_date-time

* weather_date-time{"date-time": "明天"}

- utter_working_on_it

- action_report_weather

- utter_report_weather

...

训练所用的命令为 (在项目文件 train_CORE.bash 中):

python -m rasa_core.train -s stories.md -d domain.yml -o models/dialogue --epochs 500

依赖

python 版本

python 3

python 依赖

pip install -r requirements.txt

下载数据和模型

models/default/current:通过运行 train_NLU.bash 生成

models/dialogue:通过运行 train_CORE.bash 生成

功能入口

申请 API key

本项目目前使用 心知天气 提供天气数据,该平台为个人提供免费的 API,但任然需要用户注册并申请 API key 才能使用。用户注册后可以自行找到 我的API密钥。

启动服务

将如下的 xxx 替换成你的 API key,然后执行即可

SENIVERSE_KEY=xxx python ./webchat.py

启动成功后,请用浏览器访问 http://localhost:5500 , 你将得到 web 页面,have fun!

rasa算法_使用 Rasa 构建天气查询机器人相关推荐

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

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

  2. 树莓派练手小项目---基于树莓派构建天气查询系统,实现内容的网页自动化检索功能

    目录 一.写在前面 二.基于树莓派构建天气查询系统 三.基于树莓派实现网页内容的自动化检索 四.有关于树莓派的其他小提醒,小技巧 Author:qyan.li Date:2022.6.19 Topic ...

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

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

  4. python制作查询工具发给别人使用_用Python制作天气查询软件

    这是小王推荐的第2篇好文 作者:flywind 程序介绍 先上图让大家感受一下 又来一波Python的骚操作,使用PyQt5和爬虫做一个天气查询软件,具体效果上图中很清楚的能够展示出来.UI使用PyQ ...

  5. rasa算法_(六)RASA NLU意图分类器

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

  6. python天气预测算法_使用机器学习预测天气(第二部分)

    概述 这篇文章我们接着前一篇文章,使用Weather Underground网站获取到的数据,来继续探讨用机器学习的方法预测内布拉斯加州林肯市的天气 上一篇文章我们已经探讨了如何收集.整理.清洗数据. ...

  7. rpa调用https接口 返回数据异常_金融企业“银行余额RPA查询机器人”解读

    一.财务机器人应用背景 公司简介 金融行业银行卡联合组织--是只通过银联跨行交易清算系统,实现商业银行系统间的互联互通和资源共享,保证银行卡跨行.跨地区和跨境的使用的组织. 总部设于上海,作为中国的银 ...

  8. rasa算法_Rasa 聊天机器人框架使用

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

  9. 机器学习题5:请简述ID3算法的实现步骤,并利用ID3算法构建天气数据集的决策树模型,实现决策树的可视化。

    ID3算法的实现步骤: 输入:数据集(训练集)S及属性A 输出:属性A对训练数据集S的信息增益 ① 先将S作为根节点,其目标属性y有c个类别属性.假设S中出现的概率,计算数据集S的信息熵. ② 假设属 ...

最新文章

  1. python的sklearn机器学习SVM中的NuSVC运行报错:ValueError: b'specified nu is infeasible'
  2. liferay7.0 mysql_Liferay7 BPM门户开发之6: Activiti数据库换为mysql
  3. HTTP 协议演示——HTTP 协议概述(3-5)
  4. 使用gdb调试当前运行的程序
  5. Java考试题30道(附答案)
  6. cxf 本地wsdl_CXF wsdl2java 详解及常见问题
  7. 超好玩的msn自制动画头像
  8. Java 打印Hello World
  9. JAVA ANDROID电脑开发环境配置,说多了都是泪
  10. 如何玩转抖音吸粉引流,老路子新热点照样1000+
  11. Matlab中的对数使用
  12. mbit职业测试软件,APESK瑞士荣格理论模型职业性格测试(非迫选模式比MBTI性格测试更人性化)(量表版本:V2015-3.1)...
  13. Vue + Refresh Token
  14. H5 编辑器 Tinymce之解决图片上传/粘贴
  15. 程序员最爱说的十句口头禅。。 | 今日最佳
  16. JS通过身份证号码获取出生年月日
  17. xsim安装手记(转)
  18. 掌控者靶场第二章:WAF绕过
  19. 元分析 | 大脑同伦共激活的性别差异
  20. SAP BP屏幕增强页签

热门文章

  1. 客户端连接WSUS服务器时代码80244010 windows更新遇到未知错误
  2. 位运算(异或、左移、右移)的运算规则
  3. 佟刚老师javaweb笔记(二)
  4. 【无敌浪子】python爬取足球赛事数据
  5. 教你cad版本怎么用转换器转换操作
  6. LeetCode575
  7. python回调廖雪蜂_Python 廖雪峰教程《三》
  8. Android Zxing集成
  9. Web3.0究竟是什么?
  10. 计算机硬件故障与软件故障,计算机常见故障可分为硬件和软件故障,具体介绍...