一小时搭建微信聊天机器人
文章插图
最近在研究公众号的开发 , 前段时间已经上线了电子书关键词的回复功能 , 调研过程中发现了 Chatterbot 这个不错的 Python 机器人库 , 因此找了一篇还不错的实践教程 , 经作者授权后分享推荐给大家 。文 | goodspeed
看完之后 , 你应该可以学会如何正确地接入一个 Chatterbot 应用 。
另外 , 周日推的那篇推文我在筛选合作的时候不够谨慎 , 商家的主体和宣传信息存在很大的误导性 , 因此我已经删除文章了 , 在这里跟大家道个歉!也提醒昨天几位购买了产品的同学 , 建议拒收或者退货处理 。抱歉~
EarlGrey
编辑 | EarlGrey
推荐 | 编程派公众号(ID:codingpy)
使用Python实现聊天机器人的方案有多种:AIML、chatterBot以及图灵聊天机器人和微软小冰等 。
考虑到以后可能会做一些定制化的需求 , 这里我选择了
chatterBot
(github 项目地址:https://github.com/gunthercox/ChatterBot) 。chatterbot是一款python接口的 , 基于一系列规则和机器学习算法完成的聊天机器人 。具有结构清晰 , 可扩展性好 , 简单实用的特点 。
chatterBot 的工作流程如图:
文章插图
- 输入模块(input adapter)从终端或者API等输入源获取数据
- 输入源会被指定的逻辑处理模块(logic Adapter)分别处理 , 逻辑处理模块会匹配训练集中已知的最接近输入数据句子A , 然后根据句子A去找到相关度最高的结果B , 如果有多个逻辑处理模块返回了不同的结果 , 会返回一个相关度最高的结果 。
- 输出模块(output adapter)将匹配到的结果返回给终端或者API 。
logic Adapter是一个插件式设计 , 主进程在启动时会将用户定义的所有逻辑处理插件添加到logic context中 , 然后交MultiLogicAdapter 进行处理 , MultiLogicAdapter 依次调用每个 logic Adapter , logic Adapter 被调用时先执行can_process 方式判断输入是否可以命中这个逻辑处理插件 。比如”今天天气怎么样“这样的问题显然需要命中天气逻辑处理插件 , 这时时间逻辑处理插件的can_process 则会返回False 。在命中后logic Adapter 负责计算出对应的回答(Statement对象)以及可信度(confidence) , MultiLogicAdapter会取可信度最高的回答 , 并进入下一步 。
下面我们来看下 chatterBot 如何使用
安装chatterBot 是使用Python编写的 , 可以使用 pip 安装:
pip install chatterbot
chatterBot 的中文对话要求Python3 以上版本 , 建议在Python3.x 环境下开发
测试打开iPython , 输入测试一下
In[1]: from chatterbot import ChatBot # import ChatBotIn[2]: momo = ChatBot('Momo', trainer='chatterbot.trainers.ChatterBotCorpusTrainer')/Users/gs/.virtualenvs/py3/lib/python3.6/site-packages/chatterbot/storage/jsonfile.py:26: UnsuitableForProductionWarning: The JsonFileStorageAdapter is not recommended for production environments.self.UnsuitableForProductionWarning # 这里storage adapter 默认使用的是 json 格式存储数据的 , 如果想在服务端部署 , 应该避免使用这种格式 , 因为实在是太慢了In[3]: momo.train("chatterbot.corpus.chinese") # 指定训练集 , 这里我们使用中文# 下边是对话结果In[4]: momo.get_response('你好')Out[4]: <Statement text:你好>In[5]: momo.get_response('怎么了')Out[5]: <Statement text:没什么.>In[6]: momo.get_response('你知道它的所有内容吗?')Out[6]: <Statement text:优美胜于丑陋.>In[7]: momo.get_response('你是一个程序员吗?')Out[7]: <Statement text:我是个程序员>In[8]: momo.get_response('你使用什么语言呢?')Out[8]: <Statement text:我经常使用 Python, JAVA 和 C++ .>这时你已经可以和机器人对话了 , 不过现在由于训练数据太少 , 机器人只能返回简单的对话 。
这里是默认的中文对话训练数据 中文训练数据地址:https://github
推荐阅读
- 微信红包新玩法,发送双开红包,打开能领两次
- 微信支付分,生活更便捷,但有几点需注意!甚至影响加好友
- 微信多开,不用任何插件
- 微信可以设置情侣双头像了
- 微信密码忘记了?教你设置独一无二的声音锁
- 微信拍视频还能加文字?我也是今天才知道,学会记得教父母
- 开通微信支付分的方法
- 轻松找到微信接收文件存储位置
- 微信零钱免费提现的方法
- 手机内存不够用,微信才是“内存杀手”?这个默认功能最好要关掉