聊天机器人-ChatterBot初试

ChatterBot是一个Python开源聊天机器人框架,支持中文,并能通过用户交互不断学习改进。它使用编辑距离算法和Adapter概念,如逻辑适配器和存储适配器,来处理和响应输入。预处理器和过滤器则用于优化输入和输出。通过ListTrainer或ChatterBotCorpusTrainer可以训练机器人。示例程序展示了如何创建、训练和交互。
摘要由CSDN通过智能技术生成

聊天机器人

  

1.png

ChatterBot

ChatterBot是一个基于Python的开源聊天机器人框架。ChatterBot支持中文,且可以在对话中实时改进。

一个未经训练的ChatterBot 实例开始时不知道如何通信。每次用户输入语句时,库都会保存他们输入的文本以及语句响应的文本。当ChatterBot收到更多输入时,它可以回复的响应数量以及与输入语句相关的每个响应的准确性都会增加。

程序通过搜索与输入匹配的最接近的匹配已知语句来选择最接近的匹配响应,然后从选择对该语句的已知响应中选择响应。

详细内容可查看其官方文档:https://chatterbot.readthedocs.io/en/stable/quickstart.html 

安装ChatterBot

安装ChatterBot是很简单的:pip install chatterbot

基本概念

编辑距离(Levenshtein距离)

是指两个字符串之间, 由一个转成另一个所需要的最少编辑操作次数。允许的编辑操作包括:将一个字符替换成另一个字符、插入一个字符、删除一个字符。

适配器(Adapter)

一个好的聊天机器人框架应该具有清晰、模块化、耦合度低、部件可插拔与拓展的特点。作为一个好的聊天机器人,Chatterbot也是如此。为此Chatterbot使用了Adapter的概念。ChatterBot每个部分都设计了不同的“适配器”(Adapter),分为逻辑适配器和存储适配器。逻辑适配器确定ChatterBot如何选择对给定输入语句的响应的逻辑,包括:最佳匹配适配器、时间逻辑适配器、数学评估适配器、特定响应适配器。存储适配器提供了一个接口,允许ChatterBot连接到不同的存储技术,包括:SQL存储适配器、MongoDB存储适配器

预处理器(Preprocessors)

预处理器可以修改聊天机器人在逻辑adaper处理语句之前收到的输入语句。ChatterBot内置了几个预处理器:clean_whitespace、unescape_html、convert_to_ascii。你也可以创建自己的预处理器。

过滤器(Filters)

过滤器是创建可以传递给ChatterBot存储适配器的查询的有效方法。过滤器将减少聊天机器人在选择响应时必须处理的语句数量。

流程图

最基本的流程图应该是这样的,首先获得输入的字符串(很多种方式:终端、API等),然后同时被各个逻辑Adapter进行处理,取置信度最高的Response返回。

2.png

有时候需要对输入进行预处理:

3.png

ChatterBot的使用

基础版本

# -*- coding: utf-8 -*-
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
 
# 构建ChatBot并指定Adapter
bot = ChatBot(
    'Default Response Example Bot',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    logic_adapters=[
        {
            'import_path': 'chatterbot.logic.BestMatch',
            'default_response':'嗯'
        }
    ]
)
trainer=ListTrainer(bot)
trainer.train([
    '在吗?',
    '嗯',
    '在干嘛呢?',
    '吃饭',
    '咋这么晚才吃呢',
    '嗯',
    '明天出去玩吗',
    '有事',
    '我想去迪士尼',
    '哦',
    '晚安',
    '哦'
])
while True:
print(bot.get_response(input("user:")))

运行结果:

4.png

需要解释一下上面的程序:

刚开始说明文件的编码方式,如果你需要用到中文,请务必写上。

然后import需要的模块。

通过ChatBot实例化一个聊天机器人,第一参数是聊天机器人的名字,storage_adapter指定存储适配器为SQL方式,logic_adapters指定逻辑适配器为最佳匹配方式,默认回复为”嗯”。

trainer=ListTrainer(bot)将以List集合作为训练数据训练聊天机器人,train方法开始训练。

Get_response()函数得到结果。

适配器的使用

from chatterbot import ChatBot
bot = ChatBot(
    'Math & Time Bot',
    logic_adapters=[
        'chatterbot.logic.MathematicalEvaluation',
        'chatterbot.logic.TimeLogicAdapter'
    ]
)
 
# Print an example of getting one math based response
response = bot.get_response('What is 4 + 9?')
print(response)
 
# Print an example of getting one time based response
response = bot.get_response('What time is it?')
print(response)

运行结果:

5.png

使用自带语料库

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

运行结果:

6.png

分析:

这个语料库是自带的,回答的也不知道是什么玩意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值