基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)
时间:2022-05-07
本文章向大家介绍基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
chatterbot是一款python接口的,基于一系列规则和机器学习算法完成的聊天机器人。具有结构清晰,可扩展性好,简单实用的特点。本文通过chatterbot 的不同adapter来介绍如何构建自己的聊天机器人,关与chatterbot详细资料请请阅读源码,纯Python写的,阅读性比较强。好啦,我就直接上代码了。PS:现在正在收集语料库,过段时间更新基于深度循环网络LSTM的带有记忆的ChatBot。
安装
是的,安装超级简单(Ubuntu),用pip就可以啦~
sudo pip install chatterbot
各式各样的Adapter
大家已经知道chatterbot的聊天逻辑和输入输出以及存储,是由各种adapter来限定的,我们先看看流程图,一会软再一起看点例子,看看怎么用。
基础版本
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
# 构建ChatBot并指定
Adapterbot = ChatBot(
'Default Response Example Bot',
storage_adapter='chatterbot.storage.JsonFileStorageAdapter',
logic_adapters=[
{
'import_path': 'chatterbot.logic.BestMatch'
},
{
'import_path': 'chatterbot.logic.LowConfidenceAdapter',
'threshold': 0.65,
'default_response': 'I am sorry, but I do not understand.'
}
],
trainer='chatterbot.trainers.ListTrainer')
# 手动给定一点语料用于训练
bot.train([
'How can I help you?',
'I want to create a chat bot',
'Have you read the documentation?',
'No, I have not',
'This should help get you started: http://chatterbot.rtfd.org/en/latest/quickstart.html'])
# 给定问题并取回结果
question = 'How do I make an omelette?'
print(question)
response = bot.get_response(question)
print(response)
print("n")
question = 'how to make a chat bot?'
print(question)
response = bot.get_response(question)
print(response)
对话内容如下:
How do I make an omelette?
I am sorry, but I do not understand.
how to make a chat bot?
Have you read the documentation?
处理时间和数学计算的Adapter
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
bot = ChatBot(
"Math & Time Bot",
logic_adapters=[
"chatterbot.logic.MathematicalEvaluation",
"chatterbot.logic.TimeLogicAdapter"
], input_adapter="chatterbot.input.VariableInputTypeAdapter",
output_adapter="chatterbot.output.OutputAdapter")
# 进行数学计算
question = "What is 4 + 9?"
print(question)response = bot.get_response(question)
print(response)
print("n")
# 回答和时间相关的问题
question = "What time is it?"
print(question)
response = bot.get_response(question)
print(response)
对话如下:
What is 4 + 9?
( 4 + 9 ) = 13
What time is it?
The current time is 05:08 PM
导出语料到json文件
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
'''如果一个已经训练好的chatbot,你想取出它的语料,用于别的chatbot构建,可以这么做'''
chatbot = ChatBot(
'Export Example Bot',
trainer='chatterbot.trainers.ChatterBotCorpusTrainer')
# 训练一下咯
chatbot.train('chatterbot.corpus.english')
# 把语料导出到json文件中chatbot.trainer.export_for_training('./my_export.json')
反馈式学习聊天机器人
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
import logging
"""反馈式的聊天机器人,会根据你的反馈进行学习"""
# 把下面这行前的注释去掉,可以把一些信息写入日志中
# logging.basicConfig(level=logging.INFO)
# 创建一个聊天机器人
bot = ChatBot(
'Feedback Learning Bot',
storage_adapter='chatterbot.storage.JsonFileStorageAdapter',
logic_adapters=[
'chatterbot.logic.BestMatch'
],
input_adapter='chatterbot.input.TerminalAdapter',
output_adapter='chatterbot.output.TerminalAdapter')
DEFAULT_SESSION_ID = bot.default_session.id
def get_feedback():
from chatterbot.utils import input_function
text = input_function()
if 'Yes' in text:
return True
elif 'No' in text:
return False
else:
print('Please type either "Yes" or "No"')
return get_feedback()
print('Type something to begin...')
# 每次用户有输入内容,这个循环就会开始执行
while True:
try:
input_statement = bot.input.process_input_statement()
statement, response = bot.generate_response(input_statement, DEFAULT_SESSION_ID)
print('n Is "{}" this a coherent response to "{}"? n'.format(response, input_statement))
if get_feedback():
bot.learn_response(response,input_statement)
bot.output.process_response(response)
# 更新chatbot的历史聊天数据
bot.conversation_sessions.update(
bot.default_session.id_string,
(statement, response, )
)
# 直到按ctrl-c 或者 ctrl-d 才会退出
except (KeyboardInterrupt, EOFError, SystemExit):
break
使用Ubuntu数据集构建聊天机器人
from chatterbot import ChatBot
import logging
'''这是一个使用Ubuntu语料构建聊天机器人的例子'''
# 允许打日志logging.basicConfig(level=logging.INFO)
chatbot = ChatBot(
'Example Bot', trainer='chatterbot.trainers.UbuntuCorpusTrainer')
# 使用Ubuntu数据集开始训练
chatbot.train()
# 我们来看看训练后的机器人的应答
response = chatbot.get_response('How are you doing today?')
print(response)
借助微软的聊天机器人
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
from settings import Microsoft
'''关于获取微软的user access token请参考以下的文档https://docs.botframework.com/en-us/restapi/directline/'''
chatbot = ChatBot(
'MicrosoftBot',
directline_host = Microsoft['directline_host'],
direct_line_token_or_secret = Microsoft['direct_line_token_or_secret'],
conversation_id = Microsoft['conversation_id'],
input_adapter='chatterbot.input.Microsoft',
output_adapter='chatterbot.output.Microsoft',
trainer='chatterbot.trainers.ChatterBotCorpusTrainer')chatbot.train('chatterbot.corpus.english')
# 是的,会一直聊下去
while True:
try:
response = chatbot.get_response(None)
# 直到按ctrl-c 或者 ctrl-d 才会退出
except (KeyboardInterrupt, EOFError, SystemExit):
break
- WordPress 自定义 login (登录页面)CSS 样式
- [C#1] 12-特性
- HTTP Basic Authentication for RESTFul Service
- [C#2] 4-可空类型、静态类
- jquery 操作css 尺寸
- Windows 7上IIS出现http 500错误
- [C#2] 2-匿名方法
- jquery 操作css 选择器
- 主页后台源码及释义
- [C#2] 3-局部类型、属性访问器保护级别、命名空间别名限定符
- (2013.09更新)最新W3School 离线完整版CHM 电子书下载
- [C#2] 1-泛型
- .NET4.0的可扩展缓存系统
- 让WordPress 在RSS 中Feed 截断文字输出
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Prometheus是什么?
- Day64:滑动窗口的最大值
- 第10天:NLP补充——朴素贝叶斯(Naive-Bayes)
- Day65:矩阵中的路径
- Day66:机器人的运动范围
- 第11天:NLP补充——主题模式(LDA)
- 一文快速上手Rollup,JavaScript类库打包好帮手
- Day67:剪绳子
- Typecho实现微信发消息:Type时光机
- 插入排序
- Typecho1.1仿简书主题小屏幕菜单栏展开优化
- Typecho1.1仿简书主题大小屏适配
- Typecho1.1文章内链接用新窗口打开的办法
- 搭建一个低配版的Mock Server
- Nginx解决跨域资源问题:No 'Access-Control-Allow-Origin' header is present on the requested resource.