使用 ChatterBot 做简单的机器人
来源:互联网 发布:中小学软件 编辑:程序博客网 时间:2024/06/06 15:49
ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学习。
安装调试最简单的聊天机器人
安装
基本使用
#!/usr/bin/python# -*- coding: utf-8 -*-fromchatterbotimportChatBotfromchatterbot.trainersimportChatterBotCorpusTrainer chatbot=ChatBot("myBot")chatbot.set_trainer(ChatterBotCorpusTrainer) # 使用英文语料库训练它chatbot.train("chatterbot.corpus.english") # 开始对话whileTrue: print(chatbot.get_response(input(">")))
默认情况下, ChatterBot 使用JsonDatabaseAdapter作为storage adapter,使用ClosestMatchAdapter作为logic adapter, 使用VariableInputTypeAdapter作为input adapter。
storage adapter
ChatterBot创建之后,会建立一个类族适配器(adapter classes),在该适配器下该ChatterBot可以连接到不同类型的数据集。本文所采用的是JsonDatabaseAdapter,该Storage adapter是以json格式存储数据的。注意: JsonDatabaseAdapter 并不适用于海量数据,如果数据集过大该方法的性能将受到很大局限。
创建ChatterBot的时候可以在入参中指定JsonDatabaseAdapter,如下面的参数所示:
bot=ChatBot( "Norman" storage_adapter="chatterbot.adapters.storage.JsonDatabaseAdapter", database="./database.json")
其中的database参数是用以指定所创建的chat bot所使用数据集的位置。上述的定义吗,我们可以看出该chat bot所使用的数据集是database.json,如果该database.json不存在的话,则会自动创建。注意:JsonDatabaseAdapter是ChatterBot的默认adapter,可以缺省。
输入和输出adapters
在创建ChatBot的时候可以指定输入和输出终端adapter。输入终端adapter用以读取终端的输入,输入终端adapter则是打印出chat bot的应答信息。
使用如下:
bot=ChatBot( "Norman" storage_adapter="chatterbot.adapters.storage.JsonDatabaseAdapter", input_adapter="chatterbot.adapters.input.TerminalAdapter", output_adapter="chatterbot.adapters.output.TerminalAdapter", database="./database.json")
Logic adapters
在新建ChatBot的时候可以指定logic_adapters的值,该参数是一序列的logic adapter。在ChatBot中一个logic adapter就是一个类,这个类是用于接收输入的语句和反馈该输入的语句。
在logic adapter的使用数量上并不受限。下面的例子中可以看出,使用的是两个logic adapter。其中TimeLogicAdapter是返回当前时间,MathematicalEvaluation adapter则是用以计算问题的。
bot=ChatBot( "Norman" storage_adapter="chatterbot.adapters.storage.JsonDatabaseAdapter", input_adapter="chatterbot.adapters.input.TerminalAdapter", output_adapter="chatterbot.adapters.output.TerminalAdapter", logic_adapters=[ "chatterbot.adapters.logic.MathematicalEvaluation", "chatterbot.adapters.logic.TimeLogicAdapter" ], database="./database.json")
创建自己的adapters参考默认使用的ClosestMatchAdapter、VariableInputTypeAdapter。如果需要语音输入,则可以调用百度语音接口。
让机器人支持中文
Chatterbot提供一个公用模块进行数据集的训练,目前该模块集成7种语种的训练,包括英语,葡萄牙语、西班牙语、法语、印尼语、意大利语和中文。训练集存放在\Lib\site-packages\chatterbot\corpus\data目录下:
使用中文语料库进行训练(注意,这里只支持Python 3,否则会报编码错误),报错内容为:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)
#!/usr/bin/python# -*- coding: utf-8 -*-fromchatterbotimportChatBotfromchatterbot.trainersimportChatterBotCorpusTrainer chatbot=ChatBot("myBot")chatbot.set_trainer(ChatterBotCorpusTrainer) # 使用英文语料库训练它chatbot.train("chatterbot.corpus.chinese") # 开始对话whileTrue: print(chatbot.get_response(input(">")))
ChatterBot也支持训练数据集的子集,如只想要训练英文问候语和对话,则只要将该两个子集导入进行训练即可:
chatterbot.train( "chatterbot.corpus.english.greetings", "chatterbot.corpus.english.conversations")
里面虽然包含各种语言,但是训练集的数据非常的小,如需更好的表现,需要自己添加更多的数据。
手动训练机器人
ChatterBot 内置training class,也可以根据自己的需要自行创建,通过调用train()函数之前先调用set_trainer() 来进行设置。使用方法如下
#!/usr/bin/python# -*- coding: utf-8 -*- fromchatterbotimportChatBotfromchatterbot.trainersimportListTrainermy_bot=ChatBot("Training demo")my_bot.set_trainer(ListTrainer)my_bot.train([ "嗳,渡边君,真喜欢我?", "那还用说?", "那么,可依得我两件事?", "三件也依得",]) # testprint(my_bot.get_response("真喜欢我?"))print(my_bot.get_response("可依得我两件事?"))
训练好的数据,默认存在./database.db(参考jsondatabase.py),不是sqlite数据库,实际是jsondb,对json做了封装(参考jsondb/db.py)
只读模式
ChatterBot是会对每个输入的语句进行学习的。如果想要使得你已经训练过的bot不再继续学习输入的语句,可以通过以下方式进行设置,在初始化的时候将read_only设置为true。
chatbot=ChatBot("wwjtest",read_only=True) //否则bot会学习每个输入
原文:https://www.biaodianfu.com/chatterbot.html
最后一个问题,语料库可以从哪里来?
- 电视电影字幕
- 知识问答库
参考链接:
- http://chatterbot.readthedocs.io/en/stable/
- https://github.com/gunthercox/django_chatterbot
- https://github.com/gunthercox/ChatterBot
- https://github.com/wwj718/deepThought
- 使用 ChatterBot 做简单的机器人
- 聊天机器人(Chatterbot)的诞生
- 基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)
- 基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)
- Python3.5安装与ChatterBot聊天机器人使用
- 总结自身初学python使用chatterbot构建聊天机器人
- ChatterBot聊天机器人教程01
- chatterbot初步使用
- chatterbot配合ChatterBotCorpusTrainer使用
- 两种开源聊天机器人的性能测试(一)——ChatterBot
- 两种开源聊天机器人的性能测试(一)——ChatterBot
- ChatterBot聊天机器人教程02—MongoDB
- [聊天机器人]:开源ChatterBot工作原理
- 使用CSS3绘制简单的Android机器人
- chatterbot源码comparisons的测试
- 简单的聊天机器人
- 机器人可以做人类不想做的
- 如何利用paddlepaddle做一个简单的聊天机器人 | 公开课
- HTML5 网页制作技巧
- Struts2+Spring4+Hibernate4框架集成
- 梯度检验与高级优化
- 集成学习原理小结
- Rectanglearea
- 使用 ChatterBot 做简单的机器人
- iOS app启动的方式
- 使用flex布局.平均排列.当屏幕宽度小于的时候,使其一行排列
- java——OOAD
- Access宏学习总结
- AR入门系列-06-Vuforia文字识别
- 题目1502:最大值最小化 二分
- 自编码算法与稀疏性
- 阿里云服务器(centOS) php+apache+mysql+phpMyAdmin 配置