「聊天机器人」一直是许多企业、学界在专研的东西,它可以用于许多用途上,例如淘宝会有机器人客服人员,会透过机器人来帮助你解决问题,又或者是很多聊天室都会有聊天机器人这种东西,例如Line 当中有人制作出了「卡米狗」,透过与使用者聊天当中学习语具,并在对应的场合当中回应相对应的回答。
而ChatterBot是一个基于机器学习的聊天机器人引擎,使用Python作为主要基底语言,可以基于已知会话的集合生成回应,另外ChatterBot的语言独立设计允许它被训练以说任何语言。
在官方的GitHub 当中有一段范例:
又或者说,曾经我有将ChatterBot结合到LineMessageAPI的范例当中:

范例
如果对于LineMessageAPI有兴趣的话,可以详情:Line Message API初战!
接下来我们开始来讲解该如何使用这套ChatterBot吧!首先我们必须要拥有Python,这边可能需要小小的注意一下说:
Python 3.x -> 可以支持中文。Python 2.x -> 可能没办法支持中文,会有编码上的问题。
再来你需要PyPi这套东西,然后透过它来下载:
pip install chatterbot
安装完成之后,我们就可以开始透过Python来使用ChatterBot了!
让我们来看看简单的使用范例吧:
from chatterbot import ChatBot
chatbot = ChatBot(
'Ron Obvious',
trainer = 'chatterbot.trainers.ChatterBotCorpusTrainer'
)
chatbot.train("chatterbot.corpus.english")
chatbot.get_response("Hello, how are you today?")
当然除了英文语言库外,还拥有中文语言库(简体中文)。
chatbot.train("chatterbot.corpus.chinese")
当然也不止这些,我们可以透过载入基本语言库、问候语言库、对话语言库,来让我们的机器人更加的智慧:
chatbot.train("chatterbot.corpus.chinese")
chatbot.train("chatterbot.corpus.chinese.greetings")
chatbot.train("chatterbot.corpus.chinese.conversations")
当然我们能够载入一些库,是不是代表说,在ChatterBot当中,有某个地方存放着这些库呢?我们打开ChatterBot专案底下的Corpus -> data资料夹,我们会发现有几些档案夹很熟悉呢!其中有一个档案夹叫做chinese,我们打开他后会发现:
基本对话的库
conversations.corpus.json
问候语句的库
greetings.corpus.json
详细问题的库
trivia.corpus.json
这三个档案表面上不晓得这是什么意思,我们就来实际打开来看看吧!首先是conversations.corpus.json:
{
"conversations": [
[
"早安~",
"午安~",
"晚安~",
"我想睡覺了",
"我想去吃飯",
"你好嗎",
"我想去洗澡",
"我媽叫我去吃飯"
],
[
"你好",
"尼好",
"你好嗎",
"我還不錯",
"那很好",
"是啊",
"我能幫你甚麼忙嗎",
"我有個問題",
"甚麼問題啊",
"我可以抱抱嗎",
"來ㄛ來抱ㄛ!",
"好啊!",
"<3"
],
[ "什麼是愛",
"就是你對我的感覺ㄛ <3"
],
[
"你愛我嗎?",
"我知道我的主人很愛我喔!"
]
]
}
看起来就像是普通的对话语句,不过设计经验上,会建议如果要自己建立语言库的话,conversations 的语句当中,最好是连续的对话。
接下来我们看看greetings.corpus.json 档案的内容吧:
{
"greetings": [
[
"安安",
"尼好呀!"
],
[
"最近如何",
"還好ㄅ"
],
[
"最近如何",
"很棒"
],
[
"最近如何",
"OKㄅ"
],
[
"最近如何",
"不好!"
],
[
"你還好嗎",
"超級不好!"
],
[
"你還好嗎",
"超級好!"
]
]
}看起来就是简单的一问一答,不过这种状况只在聊天刚开始的时候才会发生,就是简单的问候句。
最后我们看看trivia.corpus.json 档案的内容吧!
{
"trivia": [
[
"誰是作者?",
"乾太大神!"
]
]
}
很典型的问答,所以如果你想设计的是一个客服机器人的话,那你trivia 当中的内容就会比较多哦!
如果你已经设计好你的Corpus(库) 的话,我们就来实机测试看看吧!
import sys
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
class KantaiBOT:
chatbot = ChatBot(
"KantaiBOT",
storage_adapter = "chatterbot.storage.JsonFileStorageAdapter",
database = "./KantaiBOT_DB.json"
)
def __init__(self):
self.chatbot.set_trainer(ChatterBotCorpusTrainer)
self.chatbot.train("chatterbot.corpus.chinese")
def getResponse(self, message=""):
return self.chatbot.get_response(message)
if __name__ == "__main__":
bot = KantaiBOT()
print(bot.getResponse(sys.argv[1]))
使用时只要在终端机中下指令:
python KantaiBOT '你想說的內容'
机器人就会立即回应你了,这方法是为了衔接之前的LineBOT 来实作,你可以使用PHP、JSP、ASP.NET 或Node.js 都可以,去呼叫这支Python 程式码,去启动这个机器人,并且获取回应回传到Line Server 当中,就完成简易又能自动学习对话的机器人了!
来源:https://kantai235.github.io/2017/03/16/ChatterBotTeaching/
学习Python和网络爬虫,关注公众号:datanami

近期文章:
python实战,教你用微信每天给女朋友说晚安
这是一篇福利教程,用Python编写一个简单的爬虫
给Python新手的一道面试题:如何正确读写文件
wtfPython—Python中一些奇妙的代码
Python后端架构演进