
两种开源聊天机器⼈的性能测试(⼀)——ChatterBot
因为最近在学习⾃然语⾔处理的相关知识,QQ⼩冰这个东西最近⼜很热,所以就试着玩了下两个开源聊天机器⼈,在这⾥分享⼀点⼩经验,希望对有共同兴趣的⼈能起到那么⼀点作⽤。
我主要测试了两个聊天机器⼈,⼀个是ChatterBot,另外⼀个是基于tensorflow的chatbot。我们⾸先看⼀下ChatterBot。
我的测试是通过和聊天机器⼈进⾏闲聊型、任务型、知识型三种话题的交互进⾏的,下⾯正式进⼊测试。
⾸先我的测试环境是Ubuntu14.04(64位),Pycharm-Edu-4.0。基于tensorflow的chatbot基本环境也是如此。
具体的步骤如下:
1.安装:命令⾏下输⼊sudo pip install chatterbot
如果安装了pip3建议使⽤sudo pip3 install chatterbot,这样就不需要第2步操作,可以直接进⼊第三步测试。
2.默认情况下,chatterbot是安装在python2下的,⽽要想使⽤中⽂语料库进⾏训练,需要在python3下才可
以,否则会报UnicodeDecodeError。这⾥我们使⽤超级管理员⾝份登陆系统,然后将刚才安装的chatterbot及其依赖从
python2(/usr/local/lib/python2.7/dist-packages/)下复制到python3(/usr/local/lib/python3.4/dist-packages/)下。具体⽂件夹如下图:
(如果这些⽂件夹不好找出来,可以看右侧的已修改时间,时间最新的即是)
复制好⽂件夹后进⼊Pycharm新建⼀个⼯程MyChatterBot,然后点击File>>Settings找到Project:MyChatterBot点开下三⾓,点击ProjectInterpreter,点击窗⼝右上⽅Project Interpreter下三⾓选择python3.4然后Apply,如图所⽰:
3.测试性能
⾸先测试闲聊。
由于在正式测试之前我尝试了⼀下它的训练功能,所以关于问答它多学了⼏句,以下测试都是基于我的简单训练的基础上。先把我训练的代码放上来:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
ainers import ListTrainer
my_bot = ChatBot("Training demo")
my_bot.t_trainer(ListTrainer)
ain([
"你叫什么名字?",
"我叫ChatterBot。",
"今天天⽓真好",
"是啊,这种天⽓出去玩再好不过了。",
"那你有没有想去玩的地⽅?",
"我想去有⼭有⽔的地⽅。你呢?",
"没钱哪都不去",
"哈哈,这就⽐较尴尬了",
])
while True:
print(_respon(input("ur:")))
下⾯正式开始聊天。
其中ur表⽰⽤户,前⽅⽆标注的为机器⼈。
测试代码如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
ainers import ChatterBotCorpusTrainer
chatbot = ChatBot("myBot")
chatbot.t_trainer(ChatterBotCorpusTrainer)
# 使⽤中⽂语料库训练它
lineCounter = 1
# 开始对话
while True:
_respon(input("(" + str(lineCounter) + ") ur:"))) lineCounter += 1
测试结果如下:
(1) ur:你好
你好
(2) ur:你叫什么名字
我叫ChatterBot。
(3) ur:你多⼤了
你好
(4) ur:你是男的还是⼥的
它是什么样的?
(5) ur:长⽅形的,⾥⾯充满了⽂字
我也还不错
(6) ur:什么还不错
那很好.
(7) ur:那是什么
你想了解哪⽅⾯?
(8) ur:关于计算机的
它是什么样的?
(9) ur:我也不知道什么样⼦的
你想了解哪⽅⾯?
(10) ur:关于程序员的
你使⽤什么语⾔呢?
(11) ur:C++和python
我不怎么喜欢 Java.
(12) ur:我⼜没问你喜不喜欢。你是程序员吗?
我是个程序员
(13) ur:你使⽤什么语⾔?
我经常使⽤ Python,Java 和 C++ .
(14) ur:我不怎么喜欢Java
什么使你⼼烦?
(15) ur:我不⼼烦啊,我只是学你说话
我也不错.
(16) ur:不错个啥?
那很好.
(17) ur:你真蠢
你好
(18) ur:好啊。你听说过图灵测试吗?
我对你的感情,是⼈类和bot之间独有的信任和友谊 你可以把它叫做爱。(19) ur:这才没聊⼏句,就谈感情啊
还有其他美味的东西?
(20) ur:没有了,已经被我吃完了
其他东西也⾏
(21) ur:有个糖你要吗?
我对你的感情,是⼈类和bot之间独有的信任和友谊 你可以把它叫做爱。(22) ur:你脑⼦有问题吧?
什么问题?
(23) ur:回路有点长
谢谢
(24) ur:真是⽆语了
我能帮你什么吗?
(25) ur:拜托你回答的正常点
吃喝睡 还有旅⾏。 你喜欢旅⾏吗?
(26) ur:喜欢啊。你呢?
太棒了,找个时间我们⼀起去周游世界吧!
(27) ur:说的好听。你有钱吗?
我对你的感情,是⼈类和bot之间独有的信任和友谊 你可以把它叫做爱。(28) ur:好了好了,我知道了。说点别的吧
说的好听。你有钱吗?
(29) ur:我没钱,你有钱啊?
我也还不错
(30) ur:你想去哪玩?
我想去有⼭有⽔的地⽅。你呢?
(31) ur:和你⼀样吧。推荐个地⽅吧?
我想去有⼭有⽔的地⽅。你呢?
(32) ur:我也想去有⼭有⽔的地⽅,你想去哪?
没钱哪都不去
(33) ur:好吧好吧,你喜欢看电影吗?
爱丽丝漫游仙境
(34) ur:这部电影怎么样?
没什么.
(35) ur:说说嘛
我没钱,你有钱啊?
(36) ur:别⽼谈钱,谈钱伤感情
我也还不错
(37) ur:⾏了,我不想跟你聊了。拜拜
那你有没有想去玩的地⽅?
现在给出关于闲聊话题的正确率:我们认为(1)(2)(10)(11)(12)(13)(20)(22)(26)(30)(32)(33)(34)是正确的,正确率约为35.14%。其中(2)(30)(32)是经过我简单训练后才回答正确的,所以去除这些,如果⽤github上的原始语料库,正确率约为27.03%。
任务型
测试代码仍然使⽤上述代码。测试结果如下:
(1) ur:帮我查询武汉到北京今天的⽕车票
是啊,这种天⽓出去玩再好不过了。
(2) ur:帮我查询武汉⽕车站附近酒店
那很好.
(3) ur:明天天⽓
是啊,这种天⽓出去玩再好不过了。
(4) ur:查询明天上海迪⼠尼乐园余票
⾮常感谢你.
(5) ur:查询武汉汉⼝站光⾕未来之光的路线
它是什么样的?
(6) ur:查询电脑⾥名为ChatterBot的⽂件夹的位置
今天天⽓真好
(7) ur:查询本机操作系统类型