基于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

本文分享自微信公众号 - 机器学习算法与Python学习(guodongwei1991)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【每周一坑】房贷计算器 |【解答】生成九宫格图片

因为是“刚需”,所以网上早有无数的版本。有人已经用过,有人以后可能会用。有没有想过,类似这种小工具,其实你自己也可以实现。

15120
来自专栏人工智能

手把手带你用机器学习写unity AI

2017unity机器学习社区挑战赛参加地址:https://connect.unity.com/challenges/ml-agents-1 打开下载的uni...

26770
来自专栏牛客网

网易java后台实习生面试面经

35400
来自专栏C/C++基础

CUDA Study Notes

SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集是Intel在Pentium III处理器中率先推出的。其中包含70条指令...

14620
来自专栏数据小魔方

用R语言复盘美国总统大选结果~

这两天各种社交媒体都被美国大选的消息刷屏,各种段子满天飞,把平时不怎么关注政治的小编都吸引了。 美国大选的投票数据,给小编的写作提供了非常宝贵的案例数据,毕竟四...

85750
来自专栏玉树芝兰

如何用Python处理自然语言?(Spacy与Word Embedding)

本文教你用简单易学的工业级Python自然语言处理软件包Spacy,对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化。

26210
来自专栏HansBug's Lab

Tyvj P1813 [JSOI2008]海战训练

P1813 [JSOI2008]海战训练 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 为了准备高层峰会,元首命令武...

397120
来自专栏Flutter入门

ffplay.c 源码分析- 时间同步

之前我们对单独的音频和视频的播放进行了分析。 但是实际上播放一段影片,还需要音视频同步播放。

24520
来自专栏码神联盟

人脸识别 | Java 实现 AI人工智能技术 - 人脸识别-附源码

一是这几天确实比较忙,工作是饭碗,不能砸了吧,不然康哥吃啥,孩子的奶粉又得买了。靠工资肯定不够奶粉啊,还得有自己的一些其他项目,您说对吧,另外还在总结《Spri...

8K110
来自专栏专知

【干货】TensorFlow协同过滤推荐实战

【导读】本文利用TensorFlow构建了一个用于产品推荐的WALS协同过滤模型。作者从抓取数据开始对模型进行了详细的解读,并且分析了几种推荐中可能隐藏的情况及...

914110

扫码关注云+社区

领取腾讯云代金券