两种开源聊天机器人的性能测试(一)——ChatterBot

来源:互联网 发布:matlab 矩阵方程 命令 编辑:程序博客网 时间:2024/06/05 17:54

因为最近在学习自然语言处理的相关知识,QQ小冰这个东西最近又很热,所以就试着玩了下两个开源聊天机器人,在这里分享一点小经验,希望对有共同兴趣的人能起到那么一点作用。

      我主要测试了两个聊天机器人,一个是ChatterBot,另外一个是基于tensorflow的chatbot。我们首先看一下ChatterBot。

      ChatterBot是Python自带的基于机器学习的语音对话引擎,可以基于已知的对话库来产生回应。ChatterBot独特的语言设计可以使它可以通过训练来用任何一种语言进行对话。该项目的开源代码链接:https://github.com/gunthercox/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.测试性能

  • 首先测试闲聊。

      由于在正式测试之前我尝试了一下它的训练功能,所以关于问答它多学了几句,以下测试都是基于我的简单训练的基础上。先把我训练的代码放上来:

[python] view plain copy
  1. #!/usr/bin/python  
  2. # -*- coding: utf-8 -*-  
  3. from chatterbot import ChatBot  
  4. from chatterbot.trainers import ListTrainer  
  5. my_bot = ChatBot("Training demo")  
  6. my_bot.set_trainer(ListTrainer)  
  7. my_bot.train([  
  8.     "你叫什么名字?",  
  9.     "我叫ChatterBot。",  
  10.     "今天天气真好",  
  11.     "是啊,这种天气出去玩再好不过了。",  
  12.     "那你有没有想去玩的地方?",  
  13.     "我想去有山有水的地方。你呢?",  
  14.     "没钱哪都不去",  
  15.     "哈哈,这就比较尴尬了",  
  16. ])  
  17. while True:  
  18.     print(my_bot.get_response(input("user:")))  
      下面正式开始聊天。

      其中user表示用户,前方无标注的为机器人。

      测试代码如下:

[python] view plain copy
  1. #!/usr/bin/python  
  2. # -*- coding: utf-8 -*-  
  3. from chatterbot import ChatBot  
  4. from chatterbot.trainers import ChatterBotCorpusTrainer  
  5.    
  6. chatbot = ChatBot("myBot")  
  7. chatbot.set_trainer(ChatterBotCorpusTrainer)  
  8.    
  9. # 使用中文语料库训练它  
  10. chatbot.train("chatterbot.corpus.chinese")  
  11. lineCounter = 1  
  12. # 开始对话  
  13. while True:  
  14.     print(chatbot.get_response(input("(" + str(lineCounter) + ") user:")))  
  15.     lineCounter += 1  
      测试结果如下:

(1) user:你好

你好

(2) user:你叫什么名字

   我叫ChatterBot。

(3) user:你多大了

你好

(4) user:你是男的还是女的

它是什么样的?

(5) user:长方形的,里面充满了文字

我也还不错

(6) user:什么还不错

那很好.

(7) user:那是什么

你想了解哪方面?

(8) user:关于计算机的

它是什么样的?

(9) user:我也不知道什么样子的

你想了解哪方面?

(10) user:关于程序员的

你使用什么语言呢?

(11) user:C++和python

我不怎么喜欢 Java.

(12) user:我又没问你喜不喜欢。你是程序员吗?

我是个程序员

(13) user:你使用什么语言?

我经常使用 Python,Java 和 C++ .

(14) user:我不怎么喜欢Java

什么使你心烦?

(15) user:我不心烦啊,我只是学你说话

我也不错.

(16) user:不错个啥?

那很好.

(17) user:你真蠢

你好

(18) user:好啊。你听说过图灵测试吗?

我对你的感情,是人类和bot之间独有的信任和友谊 你可以把它叫做爱。

(19) user:这才没聊几句,就谈感情啊

还有其他美味的东西?

(20) user:没有了,已经被我吃完了

其他东西也行

(21) user:有个糖你要吗?

我对你的感情,是人类和bot之间独有的信任和友谊 你可以把它叫做爱。

(22) user:你脑子有问题吧?

什么问题?

(23) user:回路有点长

谢谢

(24) user:真是无语了

我能帮你什么吗?

(25) user:拜托你回答的正常点

吃喝睡 还有旅行。 你喜欢旅行吗?

(26) user:喜欢啊。你呢?

太棒了,找个时间我们一起去周游世界吧!

(27) user:说的好听。你有钱吗?

我对你的感情,是人类和bot之间独有的信任和友谊 你可以把它叫做爱。

(28) user:好了好了,我知道了。说点别的吧

说的好听。你有钱吗?

(29) user:我没钱,你有钱啊?

我也还不错

(30) user:你想去哪玩?

我想去有山有水的地方。你呢?

(31) user:和你一样吧。推荐个地方吧?

我想去有山有水的地方。你呢?

(32) user:我也想去有山有水的地方,你想去哪?

没钱哪都不去

(33) user:好吧好吧,你喜欢看电影吗?

爱丽丝漫游仙境

(34) user:这部电影怎么样?

没什么.

(35) user:说说嘛

我没钱,你有钱啊?

(36) user:别老谈钱,谈钱伤感情

我也还不错

(37) user:行了,我不想跟你聊了。拜拜

那你有没有想去玩的地方?

 

      现在给出关于闲聊话题的正确率:我们认为(1)(2)(10)(11)(12)(13)(20)(22)(26)(30)(32)(33)(34)是正确的,正确率约为35.14%。其中(2)(30)(32)是经过我简单训练后才回答正确的,所以去除这些,如果用github上的原始语料库,正确率约为27.03%。

  • 任务型

      测试代码仍然使用上述代码。测试结果如下:

(1) user:帮我查询武汉到北京今天的火车票

是啊,这种天气出去玩再好不过了。

(2) user:帮我查询武汉火车站附近酒店

那很好.

(3) user:明天天气

是啊,这种天气出去玩再好不过了。

(4) user:查询明天上海迪士尼乐园余票

非常感谢你.

(5) user:查询武汉汉口站光谷未来之光的路线

它是什么样的?

(6) user:查询电脑里名为ChatterBot的文件夹的位置

今天天气真好

(7) user:查询本机操作系统类型

仙女座星系.

(8) user:帮我上网查询Talor Swift最新的一首歌叫什么名字

我叫ChatterBot。

(9) user:统计我已经问过你的文字字数

继续,问吧.

(10) user:查下明天横店影视城下午都有什么电影放映

我可以借用一杯糖吗?

 

      很明显,正确率为0。

  • 知识型

      测试代码仍然使用上述代码。测试结果如下:

(1) user:中国有多大?

别老谈钱,谈钱伤感情

(2) user:中国的首都在哪里?

吃喝睡 还有旅行。 你喜欢旅行吗?

(3) user:中国的人口有多少?

我没钱,你有钱啊?

(4) user:中国第一大岛是哪个岛?

大不列颠联合王国

(5) user:中华人命共和国在哪一年成立?

1963

(6) user:安徽省省会是哪个城市?

大不列颠联合王国

(7) user:英国由哪几部分组成?

我对你的感情,是人类和bot之间独有的信任和友谊你可以把它叫做爱。

(8) user:第一个登上月球的人类叫什么名字?

我叫ChatterBot。

(9) user:什么是图灵测试

爱, 在我的理解里,是对他人的接受,包容和理解。同时,也是对这个世界的和自己的接受包容和理解。

(10) user:winter的中文意思是什么

吃喝睡 还有旅行。 你喜欢旅行吗?

 

      显然,正确率仍然为0。

  • 数学和时间问题

      下面给出测试代码:

[python] view plain copy
  1. # -*- coding: utf-8 -*-  
  2. from chatterbot import ChatBot  
  3. from chatterbot.trainers import ChatterBotCorpusTrainer  
  4. chatbot = ChatBot(  
  5.     "Math & Time Bot",  
  6.     # 设置logicAdapter用以处理时间问题和数学问题  
  7.     logic_adapters=[  
  8.         "chatterbot.logic.MathematicalEvaluation",  
  9.         "chatterbot.logic.TimeLogicAdapter"  
  10.     ],  
  11.     # 设置输入输出Adapter  
  12.     input_adapter="chatterbot.input.VariableInputTypeAdapter",  
  13.     output_adapter="chatterbot.output.OutputAdapter"  
  14. )  
  15. chatbot.set_trainer(ChatterBotCorpusTrainer)  
  16. # 使用中文语料库训练它  
  17. chatbot.train("chatterbot.corpus.chinese")  
  18. lineCounter = 1  
  19. # 每次用户执行一次循环  
  20. while True:  
  21.     try:  
  22.         print(chatbot.get_response(input("(" + str(lineCounter) + ") user:")))  
  23.         lineCounter += 1  
  24.     # 按ctrl-c 或 ctrl-d 键以退出  
  25.     except (KeyboardInterrupt, EOFError, SystemExit):  
  26.         break  

      下面给出测试结果:

(1) user:4+9=?

4 + 9 = 13

(2)  user:四加九等于多少

The current time is 09:32 PM

(3) user:现在什么时间

The current time is 09:33 PM

(4) user:1-1/2

( 0.5 ) = 0.5

(5) user:(1-1)/2

0.0 = 0.0

(6) user:3乘以5=

The current time is 09:33 PM

(7) user:What time is it?

The current time is 09:33 PM

(8)  user:小明以1m/s的速度跑10秒,距离为多少米?

The current time is 09:35 PM

(9) user:2^8

( 10 ) = 10

(10) user:2^3=

8

 

      可以看到正确的结果为(1)(3)(4)(7)(10)正确率为50%。

      现在整体看下来测试结果并不理想,但也有可能是因为中文语料库资源太少所以才这样。那么我们再测一下英文吧。

  • 英文闲聊

      测试代码:

[python] view plain copy
  1. #!/usr/bin/python  
  2. # -*- coding: utf-8 -*-  
  3. from chatterbot import ChatBot  
  4. from chatterbot.trainers import ChatterBotCorpusTrainer  
  5. chatbot = ChatBot("myBot")  
  6. chatbot.set_trainer(ChatterBotCorpusTrainer)  
  7. # 使用英文语料库训练它  
  8. chatbot.train("chatterbot.corpus.english")  
  9. lineCounter = 1  
  10. # 开始对话  
  11. while True:  
  12.     try:  
  13.         print(chatbot.get_response(input("(" + str(lineCounter) + ") user:")))  
  14.         lineCounter += 1  
  15.      # 按ctrl-c 或 ctrl-d 键以退出  
  16.     except (KeyboardInterrupt, EOFError, SystemExit):  
  17.         break  

      测试结果:

(1) user:hello

Hi

(2) user:What's your name?

I am still young

(3) user:How old are you?

Who? Who is but a form following thefunction of what

(4) user:Where are you come from?

A man in a mask.

(5) user:Are you a boy?

Yes I am.

(6) user:Do you have a girlfriend?

i certainly have lost many friends over theyears.

(7) user:OK.Do you like dogs?

not especially. i am not into violence.

(8) user:Do you like sports?

not especially. i am not into violence.

(9) user:you are handsome

you are crazy

(10) user:It's a nice day today

only to other robots.

 

      从上述结果来看,我们的机器人回答合适的只有(1)和(5),正确率20%。

  • 英文任务型:

      仍以上述代码进行测试。

      测试结果如下:

 

(1) user:Inquire about the weather tomorrow

do you think thesouth was right?

(2) user:Pleasebook me a ticket from Hefei to Wuhai tomorrow

i prefer to nothurt your feelings.

(3) user:Checkthe hotel near Hefei South Station

Relationshipsare simple for me.

(4)user:Inquirey Disney Shanghai single day tickets

That's my name.

(5) user:Checkwhether the Shanghai Metro Line 1 has Nanjing West Road

Europe

(6) user:Howmany characters does "Iine" have?

Apple makeshardware and softwares to run on them. Microsft only makes OS. HP makes onlycomputers. These are just few names among hundred others.

(7) user:Helporder a Xiaomi phone from Jingdong

my favoritemovie is lord of the rings

(8) user:executethe command sudo reboot in the console

No.

(9) user:Printthe file on the desktop print.txt

andrew jackson.

(10) user:Playthe music "Heal the world"

Too much.

 

      很不幸,正确率再次为0。

  • 英文知识型

      仍使用上述测试代码。

      测试结果如下所示:

 

(1) user:Howlarge is China's land area?

vineland is anovel by thomas pynchon.

(2) user:Whichstate is Britain in?

an invitation toa burial

(3) user:Whatare the parts of England?

i'm not aphysicist, but i think this has something to do with heat, entropy, andconservation of energy, right?

(4) user:Howmany bits of an integet data in Python?

If theimplementation is hard to explain, it's a bad idea.

(5) user:Whichyear did the second world war break out?

its hard to saybut The ENIAC is regarded as the first computer. It was developed at Universityof Pennsylvania in 1946.

 

      ChatterBot再次败北,正确率为0。

      所以,综合以上各种测试,ChatterBot回答问题的正确率远低于50%,很多问题都为0。对于闲聊型问题还可以回答正确几个,但是对于任务型、知识型问题一窍不通,这应该是开源项目里没有设置相应的模块、语料库资源过少,也不能够主动上网查询。要想使其能够回答和提问基本吻合还需要大量的工作。另外,其速度也不是很理想,有的情况会有少许卡顿。

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 家里的led灯坏了怎么办 吊顶led灯坏了怎么办 客厅空了一面墙怎么办 轨道灯的轨道不够长怎么办 奔驰大灯不亮了怎么办 led顶灯不亮了怎么办 吸顶灯led灯坏了怎么办 车底盘塑料被刮怎么办 汽车门电机坏了怎么办 宁波北仑普高差三分该怎么办 上班的地方甲醛味很重怎么办 公司不给员工交社保怎么办 户口转到学校毕业了怎么办 外地户口转到北京档案怎么办 隧道防水板过紧怎么办 到国企没报到证怎么办 车子锁了油箱盖能开怎么办 单位不接受档案和户口怎么办 完税凭证弄丢了怎么办 育种玉米公本早了怎么办 网银转账打错了怎么办 转账名字打错了怎么办 普通转账名字打错了怎么办 银行账号转错了怎么办 打款信息错了怎么办 报到证过期了档案怎么办 日本suica卡丢了怎么办 日本地铁卡丢了怎么办 极光卡五星老输怎么办 皮秒留下的色沉怎么办 鼻综合鼻内增生怎么办 做完鼻综合脸肿怎么办 上海车子卖了etc怎么办 车卖了etc设备怎么办 车卖了etc没摘怎么办 交通信息卡丢了怎么办 多囊卵巢无排卵怎么办 卵巢腹镜手术后一直出汗怎么办 双侧卵巢多囊怎么办 备孕子宫内膜厚怎么办 有成熟卵泡不破怎么办