TL;DR 本文使用开源框架chatterbot从零开始构建你自己的聊天机器人(还带有WEB界面奥~)。
聊天机器人大体上分为三种:闲聊机器人、问答机器人和任务型机器人。闲聊机器人,顾名思义就是和你闲聊插科打诨的机器人,目前比较典型的代表是微软小冰,小黄鸡等。问答机器人有一个标准答案库,当用户来咨询时机器人负责理解用户的语意,给出符合语意的标准答案,目前比较典型的应用是各类咨询机器人,客服机器人等。最后一类:任务型机器人,通过和客户的沟通帮助用户完成特定任务比如定机票、定闹钟等,目前比较典型的应用是各种私人助理,苹果的siri系统也具备此类功能。
我们这里介绍一个简单易用的闲聊机器人框架chatterbot website: http://chatterbot.readthedocs.io/
先上一个成品图,这将是我们最后完成时的效果:
安装
pip install chatterbot
快速入门(toy级别的方案)
下面的代码实现了一个toy聊天机器人
# 导入所需的依赖
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
chatbot = ChatBot("SillyRobot") # 这里创建了机器人实例,并设定了机器人的名字:SillyRobot
# 定义训练数据集
conversation = [
"Hello",
"Hi there!",
"How are you doing?",
"I'm doing great.",
"That is good to hear",
"Thank you.",
"You're welcome."
]
# 训练
chatbot.set_trainer(ListTrainer)
chatbot.train(conversation)
# 响应用户请求
response = chatbot.get_response("Good morning!")
print(response)
上述代码会训练你给定的训练集,并把训练结果保存起来,没有指定的情况下,会使用存储模块chatterbot.storage.SQLStorageAdapter
完成模型的存储。在完成训练后就可以将训练代码移除,这样机器人就不会每次都要从头训练了。
比较正式的方案
上面的方案使用的语料库是硬编码在文档中的,这在正式项目中是不合适的。下面介绍一个比较正式的使用chatter的方案。
import os
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
current_dir = os.path.dirname(os.path.realpath(__file__))
chat_bot = ChatBot("SillyRobot") # 这里创建了机器人实例,并设定了机器人的名字:SillyRobot
chat_bot.set_trainer(ChatterBotCorpusTrainer)
# 使用中文语料库训练它
# chat_bot.train("chatterbot.corpus.chinese") # 语料库
# 开始对话
response = chat_bot.get_response("我好么")
print(response)
官方自带的中文聊天数据集表现比较差,你需要自己实现一个trainer
,具体怎么实现见官方文档 Creating a new training class.
Web集成
chatter自带了Django集成,所以很容易架设一个网站,提供HTTP接口、管理后台以及在线聊天页面等功能。具体代码可以拷贝官方的示例代码https://github.com/gunthercox/ChatterBot/tree/master/examples/django_app, 这里需要注意的是,你需要更改chatterbot的配置在settings.py
里面的CHATTERBOT
变量处,具体怎么修改,请参考文档1和文档2,但你仍然需要以下步骤:
安装Django
pip install django
同步数据库
python manage.py migrate
创建超级用户
python manage.py createsuperuser
训练chatterbot
python manage.py train
运行server
python manage.py runserver
web服务器默认监听5000端口,访问http://127.0.0.0.1:5000就能访问页面了,页面效果如下图: