博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【自然语言处理篇】--Chatterbot聊天机器人
阅读量:6895 次
发布时间:2019-06-27

本文共 8393 字,大约阅读时间需要 27 分钟。

一、前述

ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei)。

二、具体

1、安装

是的,安装超级简单,用pip就可以啦

pip install chatterbot

2、流程

大家已经知道chatterbot的聊天逻辑和输入输出以及存储,是由各种adapter来限定的,我们先看看流程图,一会软再一起看点例子,看看怎么用。

 

 

3、每个部分都设计了不同的“适配器”(Adapter)。

机器人应答逻辑 => Logic Adapters

Closest Match Adapter  字符串模糊匹配(编辑距离)

Closest Meaning Adapter  借助nltk的WordNet,近义词评估

Time Logic Adapter 处理涉及时间的提问
Mathematical Evaluation Adapter 涉及数学运算

存储器后端 => Storage Adapters

 Read Only Mode 只读模式,当有输入数据到chatterbot的时候,数
据库并不会发生改变
 Json Database Adapter 用以存储对话数据的接口,对话数据以Json格式
进行存储。
Mongo Database Adapter  以MongoDB database方式来存储对话数据

输入形式 => Input Adapters

Variable input type adapter 允许chatter bot接收不同类型的输入的,如strings,dictionaries和Statements

Terminal adapter 使得ChatterBot可以通过终端进行对话
 HipChat Adapter 使得ChatterBot 可以从HipChat聊天室获取输入语句,通过HipChat 和 ChatterBot 进行对话
Speech recognition 语音识别输入,详见chatterbot-voice

输出形式 => Output Adapters

Output format adapter支持text,json和object格式的输出
Terminal adapter
HipChat Adapter
Mailgun adapter允许chat bot基于Mailgun API进行邮件的发送
Speech synthesisTTS(Text to speech)部分,详见chatterbot-voice

4、代码

基础版本

# -*- coding: utf-8 -*-from chatterbot import ChatBot# 构建ChatBot并指定Adapterbot = ChatBot(    'Default Response Example Bot',    storage_adapter='chatterbot.storage.JsonFileStorageAdapter',#存储的Adapter    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 ChatBotbot = 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 ) = 13What 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 ChatBotimport 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.iddef 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 ChatBotimport 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 ChatBotfrom 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

HipChat聊天室Adapter

# -*- coding: utf-8 -*-from chatterbot import ChatBotfrom settings import HIPCHAT'''炫酷一点,你可以接到一个HipChat聊天室,你需要一个user token,下面文档会告诉你怎么做https://developer.atlassian.com/hipchat/guide/hipchat-rest-api/api-access-tokens'''chatbot = ChatBot(    'HipChatBot',    hipchat_host=HIPCHAT['HOST'],    hipchat_room=HIPCHAT['ROOM'],    hipchat_access_token=HIPCHAT['ACCESS_TOKEN'],    input_adapter='chatterbot.input.HipChat',    output_adapter='chatterbot.output.HipChat',    trainer='chatterbot.trainers.ChatterBotCorpusTrainer')chatbot.train('chatterbot.corpus.english')# 没错,while True,会一直聊下去!while True:    try:        response = chatbot.get_response(None)    # 直到按ctrl-c 或者 ctrl-d 才会退出    except (KeyboardInterrupt, EOFError, SystemExit):        break

邮件回复的聊天系统

# -*- coding: utf-8 -*-from chatterbot import ChatBotfrom settings import MAILGUN'''这个功能需要你新建一个文件settings.py,并在里面写入如下的配置:MAILGUN = {    "CONSUMER_KEY": "my-mailgun-api-key",    "API_ENDPOINT": "https://api.mailgun.net/v3/my-domain.com/messages"}'''# 下面这个部分可以改成你自己的邮箱FROM_EMAIL = "mailgun@salvius.org"RECIPIENTS = ["gunthercx@gmail.com"]bot = ChatBot(    "Mailgun Example Bot",    mailgun_from_address=FROM_EMAIL,    mailgun_api_key=MAILGUN["CONSUMER_KEY"],    mailgun_api_endpoint=MAILGUN["API_ENDPOINT"],    mailgun_recipients=RECIPIENTS,    input_adapter="chatterbot.input.Mailgun",    output_adapter="chatterbot.output.Mailgun",    storage_adapter="chatterbot.storage.JsonFileStorageAdapter",    database="../database.db")# 简单的邮件回复response = bot.get_response("How are you?")print("Check your inbox at ", RECIPIENTS)

一个中文的例子

注意chatterbot,中文聊天机器人的场景下一定要用python3.X,用python2.7会有编码问题。

#!/usr/bin/python# -*- coding: utf-8 -*-#手动设置一些语料from chatterbot import ChatBotfrom chatterbot.trainers import ListTrainer  Chinese_bot = ChatBot("Training demo")Chinese_bot.set_trainer(ListTrainer)Chinese_bot.train([    '你好',    '你好',    '有什么能帮你的?',    '想买数据科学的课程',    '具体是数据科学哪块呢?'    '机器学习',]) # 测试一下question = '你好'print(question)response = Chinese_bot.get_response(question)print(response)print("\n")question = '请问哪里能买数据科学的课程'print(question)response = Chinese_bot.get_response(question)print(response)

结果:

你好你好请问哪里能买数据科学的课程具体是数据科学哪块呢?

利用已经提供好的小中文语料库

#!/usr/bin/python# -*- coding: utf-8 -*-from chatterbot import ChatBotfrom chatterbot.trainers import ChatterBotCorpusTrainer chatbot = ChatBot("ChineseChatBot")chatbot.set_trainer(ChatterBotCorpusTrainer) # 使用中文语料库训练它chatbot.train("chatterbot.corpus.chinese") # 开始对话while True:    print(chatbot.get_response(input(">")))

 

转载于:https://www.cnblogs.com/LHWorldBlog/p/9292024.html

你可能感兴趣的文章
Cocopods安装和升级备忘录
查看>>
如何用Python写一个贪吃蛇AI
查看>>
nginx全局变量
查看>>
今日一练习
查看>>
Kylin 在 58 集团的实践和应用
查看>>
javascript性能优化
查看>>
41. First Missing Positive
查看>>
sql的行转列(PIVOT)与列转行(UNPIVOT)
查看>>
sbt配置——数据源问题解决
查看>>
框架模式与设计模式之区别
查看>>
AngularJS+Satellizer+Node.js+MongoDB->Instagram-13
查看>>
CSS 实现打字效果
查看>>
jquery 根据已知值来修改单选框的被选中项
查看>>
html5 aside
查看>>
并发线程学习001(volatile 使用)
查看>>
JSONArray().fromObject(); 出现org.apache.catalina.core.StandardWrapperValve invoke错误的解决办法...
查看>>
取余和取模的小结
查看>>
JAVA应用CPU占用100%|内存泄漏分析总结
查看>>
SVN使用笔记-cleanup解决资源锁定(locked)
查看>>
又一个开始
查看>>