文章介绍使用rasa nlu和 rasa core 实现一个电信领域对话系统demo,实现简单的业务查询办理功能,更完善的实现需要进一步数据的收集。demo基于玩具数据集,可以达到下面的效果:

Bot loaded. Type a message and press enter :
YOU:你是谁
BOT:您好!,我是机器人小热,很高兴为您服务。
YOU:我想看一下消费情况
BOT:您想查询哪个月的消费?
YOU:十月份的
BOT:好,请稍等
BOT:您好,您十月份共消费二十八元。
YOU:好谢谢
BOT:您开心我就开心
BOT:您还想干什么
YOU:没什么了
BOT:Bye, 下次再见

用Rasa_NLU构建自己的中文NLU系统

系统demo 的数据和代码路径:
https://github.com/zqhZY/_rasa_chatbot

项目依赖安装(包括rasa nlu 和 rasa core)参考相应路径:
https://github.com/zqhZY/_rasa_chatbot/blob/master/INSTALL.md

关于rasa nlu的使用方法,可以参考:
https://github.com/RasaHQ/rasa_nlu
http://www.crownpku.com/2017/07/27/用Rasa_NLU构建自己的中文NLU系统.html

确定意图和实体类别

根据业务查询和办理的场景,首先需要确定意图和实体的类别,这里系统包含如下意图和实体类型:

intents:
  • greet
  • confirm # 确认
  • goodbye
  • thanks
  • inform_item # 告知业务类型
  • inform_package # 告知套餐类型
  • inform_time # 告知时间
  • request_management # 办理请求
  • request_search # 查询请求
  • deny # 否定
  • inform_current_phone # 告知本机号码
  • inform_other_phone # 告知其他号码
entities:
  • item # 业务类型
  • time # 时间
  • phone_number # 电话号码
  • price # 价格

数据准备

通常项目刚开始,往往伴随着冷启动的问题。没有数据的情况下可以根据实际业务场景自行标注数据并结合规则方式先实现第一版本,线上收集真实数据(如果有机会上线的话-),并反过来迭代模型。 这里使用的训练数据为结合实际场景的自造数据,并转换为rasa nlu训练数据的格式,供学习使用。

数据格式如下:

{"rasa_nlu_data": {"common_examples": [{"text": "帮我查一下我的流量这里还有多少","intent": "request_search","entities": [{"start": 7,"end": 9,"value": "流量","entity": "item"}]},......{"text": "给我办一个三十的新流量业务","intent": "request_management","entities": [{"start": 10,"end": 12,"value": "流量","entity": "item"},{"start": 5,"end": 7,"value": "三十","entity": "price"}]},......],"regex_features": [],"entity_synonyms": [{"value": "消费","synonyms": ["话费"]}]}
}

训练自然语言理解模型

这里使用rasa nlu 的pipeline 为 MITIE+Jieba+sklearn, rasa nlu 的配置文件为:

{"name": "rasa_nlu","project": "ivr","fixed_model_name": "demo","pipeline": ["nlp_mitie","tokenizer_jieba","ner_mitie","ner_synonyms","intent_entity_featurizer_regex","intent_featurizer_mitie","intent_classifier_sklearn"],"language": "zh","mitie_file": "data/total_word_feature_extractor.dat","path" : "models","data" : "data/mobile_nlu_data.json"
}
MITIE模型训练

由于使用了mitie 所以需要事先准备相应的词特征向量(total_word_feature_extractor.dat),类似训练word2vec,
方法如下:

把所有分好词的语料文件放在同一个文件路径下。接下来我们要训练MITIE模型。

首先将MITIE clone下来:

$ git clone https://github.com/mit-nlp/MITIE.git

我们要使用的只是MITIE其中wordrep这一个工具。我们先build它。

$ cd MITIE/tools/wordrep
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release

然后训练模型,得到total_word_feature_extractor.dat。注意这一步训练会耗费几十GB的内存,大概需要两到三天的时间。

$ ./wordrep -e /path/to/your/folder_of_cutted_text_files

项目链接里包含了用真实电信业务数据训练的total_word_feature_extractor.dat,也可以使用wiki百科训练的相应模型。

链接:http://pan.baidu.com/s/1micEF0G 密码:opli
训练rasa nlu 模型

使用rasa nlu 的终端接口训练模型:

python -m rasa_nlu.train -c mobile_nlu_model_config.json

也可以使用bot.py 里的Python 接口:

def train_nlu():from rasa_nlu.converters import load_datafrom rasa_nlu.config import RasaNLUConfigfrom rasa_nlu.model import Trainertraining_data = load_data("data/mobile_nlu_data.json")trainer = Trainer(RasaNLUConfig("mobile_nlu_model_config.json"))trainer.train(training_data)model_directory = trainer.persist("models/", project_name="ivr", fixed_model_name="demo")return model_directory

运行相应命令:

python bot.py train-nlu

两种方式都会在项目根目录models下生成模型:

models/
└── ivr├── demo├── entity_extractor.dat├── entity_synonyms.json├── intent_classifier.pkl├── metadata.json└── training_data.json
rasa nlu 测试

训练好模型后可以使用http接口进行测试,启动项目的httpserver,服务会load模型,并接受http请求,对新文本进行预测:

$ python httpserver.py
2018-01-12 11:48:23+0800 [-] Log opened.
2018-01-12 11:48:23+0800 [-] Site starting on 1235
2018-01-12 11:48:23+0800 [-] Starting factory <twisted.web.server.Site object at 0x7f090a9d49b0>

向服务发送http请求测试结果:

$ curl -XPOST 127.0.0.1:1235/parse -d '{"text":"给我查一下我上个月的流量"}'
{"text": "给我查一下我上个月的流量", "intent": "request_search", "entities": {"time": "上个月", "item": "流量"}}

同时httpserver 后台打印完整log,包括每个intent的预测confidence。

小结

篇幅原因,这里只介绍训练rasa nlu的流程,更多rasa nlu的用法可以到官方文档了解。下篇文章介绍利用这里训练的nlu模型,使用rasa core 的online learning (或强化学习)方式进行对话管理模型的训练和测试。

原创文章,转载注明出处。
更多关注公众号:

wechat

转载于:https://www.cnblogs.com/bincoding/p/9867169.html

【转载】基于rasa的对话系统搭建(上)相关推荐

  1. 【转载】基于rasa的对话系统搭建(下)

    基于上文训练的自然理解模型,这里介绍使用rasa core 的online leaning 进行对话决策的训练,在进行对话模块训练之前,需要准备两个文件: domain.yml # 定义对话所有的意图 ...

  2. 基于Rasa框架搭建中文机器人对话系统

    Rasa是一个能用于构建机器人对话系统的框架,基于Rasa框架搭建机器人对话系统,可以使用于工业各类语音智能服务场景,如:远程医疗问诊.智能客户服务.保险产品销售.金融催收服务.手机智能助手等领域.支 ...

  3. Docker系列06—基于容器制作镜像并上传到Docker Registry

    Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...

  4. 基于github和hexo搭建博客 本地hexo博客搭建

    正常都应该讲一讲为什么搭建博客,不过既然您能看见这篇文章,就说明你想搭建一个自己的博客,无论自己记录自己的东西,或是为了显得高大上.那就不废话了,进入正题. 其实教大家搭建博客的文章很多,讲的都不错, ...

  5. 基于区块链的链上数据安全共享体系研究

    点击上方蓝字关注我们 基于分层注意力网络的方面情感分析 刘彦松1, 夏琦1, 李柱1, 夏虎1, 张小松1, 高建彬2 1 电子科技大学计算机科学与工程学院,四川 成都 611731 2 电子科技大学 ...

  6. 基于gollum的wiki搭建

    2019独角兽企业重金招聘Python工程师标准>>> 基于gollum的wiki搭建 gollum是个啥 gollum是一个基于git的,解析markdown文件的wiki系统:g ...

  7. 安全态势,交互发现 —— 基于阿里云轻松搭建安全大屏

    摘要:使用DataV大屏展现态势感知 DNS 会话日志,从而实现交互式安全威胁发现. 2017年,阿里云启动MVP(Most Valuable Professional)项目.顾名思义,MVP正在寻找 ...

  8. 基于阿里云服务器搭建SVN服务器

    基于阿里云服务器搭建SVN服务器 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/8577784 作者 ...

  9. Spark集群基于Zookeeper的HA搭建部署笔记(转)

    原文链接:Spark集群基于Zookeeper的HA搭建部署笔记 1.环境介绍 (1)操作系统RHEL6.2-64 (2)两个节点:spark1(192.168.232.147),spark2(192 ...

最新文章

  1. 搭建Hexo部署到github上
  2. noi2017初赛c语言试题,NOIP2017普及组初赛试题及答案
  3. 【uiautomator】UiDevice
  4. mysql中systimestamp_oracle数据库中timestamp是什么数据类型
  5. 再述Spring AOP 应用场景
  6. 对某bc站的一次渗透测试
  7. 打造最舒适的webview调试环境
  8. Codeforces Round #716 (Div. 2) D. Cut and Stick 主席树 + 思维
  9. Jenkins:部署JEE工件
  10. mysql中ibatis的limit动态传参
  11. zklib php,php 安装zookeeper扩展报错
  12. linux java 1.6 下载地址_linux 安装配置java环境 jdk1.6 jdk-6u45-linux-x64.bin
  13. Linux学习笔记13--使用mount命令挂载CDROM
  14. 5G 准备向 Wi-Fi 的 6GHz 频段下手了?
  15. Android Animation之TranslateAnimation(平移动画)
  16. 实验三:树莓派-暴力破解无线网络密码
  17. 有一分数序列:2/1,3/2,5/3...求出这个数列的前20项之和(C语言原理详解)。
  18. 学计算机编程的男生不会撩妹,谁说妹子不会撩程序员?只是不想撩你
  19. java 各种编码间转换
  20. 佐切的第一天学习分享

热门文章

  1. java接收参数_javaWeb收传参数方式总结
  2. mysql 查看当前数据库编码_MySQL查看并修改当前数据库编码
  3. 排序算法java快速排序_快速排序算法--Java实现
  4. python正则替换查询_使用Python中的正则表达式进行搜索和替换
  5. CentOS用户及用户组管理
  6. MySQL实验7存储过程_mySQL(7)-存储过程
  7. android 商品筛选_商品关联分析
  8. 计算机演示文稿教学实例课件,计算机图形学的教学演示文稿ppt课件.ppt
  9. 三年级计算机教案 渔舟唱晚,《渔舟唱晚》大班教案
  10. 理解R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN、FPN博文整理