http://blog.csdn.net/hfutdog/article/details/78155676

开源项目链接:https://github.com/dennybritz/chatbot-retrieval/

它实现一个检索式的机器人。采用检索式架构,有预定好的语料答复库。检索式模型的输入是上下文潜在的答复。模型输出对这些答复的打分,选择最高分的答案作为回复。

下面进入正题。

1.环境配置

首先此项目需要的基本条件是使用Python3(我用的是Python3.4),tensorflow版本为0.11.0。关于Python这里不多说,网上很多修改Python默认值的文章。后续内容我都将采用python3或者pip3指令,在Python3下进行操作。tensorflow在我测试时,过低版本或者新版本都会出现一些问题,所以建议和我采用一样的版本(因为我的电脑是AMD的显卡,所以我没有选择GPU版本的tensorflow,有条件的可以选择)。如果不是可以采用以下命令修改:

sudo pip3 uninstall tensorflow

sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp34-cp34m-linux_x86_64.whl

好了,最基本的条件准备好了。

下面我们将安装一系列的依赖包,因为里面依赖关系比较复杂,所以需要注意一下先后顺序。我们在命令行中依次输入以下指令:

sudo apt-get upgrade python3-pip

sudo pip3 install numpy scipy scikit-learn pandas pillow jupyter

sudo pip3 install backports.weakref==1.0rc1

sudo apt-get build-dep Python-imaging

sudo pip3 install tflearn

到这里,我们的环境基本配置好了,但是因为我是在配置过程中一个一个去解决的这些问题,中间碰到的问题也比较多,这是重新整理过的,每个人的环境也都有所差异,我也不能确保这样就完全正确。一般这里面碰到问题无非就是两种,一是缺包,二是tensorflow版本的问题,往这两方面考虑就可以解决。

最后,检查一下这些工具是否都安装,我们开始导入数据。

首先执行git clone https://github.com/dennybritz/chatbot-retrieval/

然后到此链接https://drive.google.com/file/d/0B_bZck-ksdkpVEtVc1R6Y01HMWM/view(需要fanqiang)去下载数据,页面如果显示“糟糕,出现预览问题,正在重新加载”,不要管它,点击下载即可。将下载到的数据解压到刚才clone的文件夹chatbot-retrieval的data中,如图所示:

2.训练与测试

在chatbot-retrieval文件夹中打开终端,或者cd到该文件夹下,执行以下指令:

python3 udc_train.py

即可开始训练,我采用CPU训练了三个多小时,这个视个人情况而定,可以按Ctrl+Z提前结束。在GPU上训练2万次大约一个多小时。正常训练过程中如图所示:

训练完后仍然在刚才的路径下可以执行以下命令对模型进行评估(可以跳过):

python3 udc_test.py –model_dir=./runs/1504264339/

其中后面的数字名称的文件夹名因人而异,不同的训练批次名称也不一样。这个名称在训练的那张截图里也可以发现。

最后,进入我们的测试环节。

找到chatbot-retrieval文件夹下的udc_predict.py文件,将30行INPUT_CONTEXT =后的内容改成自己想要问的内容,将31行POTENTIAL_RESPONSES = []中的内容替换成机器人的候选答案。因为这个项目没有实现一问一答的模式,每次只是给不同的答案进行打分,分数最高的那个是它的期望回答,所以下面我们都将以其回答中打分最高的回答作为标准判断正确率。仍然在chatbot-retrieval文件夹路径下执行python3udc_predict.py --model_dir=./runs/1504221361/指令进行测试。

下面是测试情况:

  • 中文闲聊型:

(1)INPUT_CONTEXT = "你好"

POTENTIAL_RESPONSES = ["你好", "早上好","中午好","晚上好","好啊","好久不见","很高兴认识你","初次见面请多多指教","我不好","你是谁",]

测试效果如图,我们将每个结果的打分筛选出来。

Context: 你好

你好: 0.501835

早上好: 0.501835

中午好: 0.501835

晚上好: 0.501835

好啊: 0.501835

好久不见: 0.501835

很高兴认识你: 0.501835

初次见面请多多指教: 0.501835

我不好: 0.501835

你是谁: 0.501835

可以看到所有回答的打分都是一样的,这其实是因为语料库采用了Ubuntu对话数据集,无法处理中文。我们再测一组中文进行验证。

(2)INPUT_CONTEXT = "明天上午啥课?"

POTENTIAL_RESPONSES = ["明天上午没课", "计算机图形学和形式与政策","明天上午有课吗","还没开学好不好","包子和稀饭","超市没开门","明天下雨","那一年你正年轻","时间是让人猝不及防的东西","瞎扯",]

测试结果:

两种开源聊天机器人的性能测试(二)——基于tensorflow的chatbot的更多相关文章

  1. 两种交换机配置模式,以配置基于端口划分的VLAN为例

    关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...

  2. java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)

    创建线程的第二中方式: /** *      步骤: 1定义类实现Runnable接口      2.实现Runnable接口中的run方法.      3.通过Thread类建立线程对象,并将Run ...

  3. RNN(二)——基于tensorflow的LSTM的实现

    lstm的前向结构,不迭代 最基本的lstm结构.不涉及损失值和bp过程 import tensorflow as tf import numpy as np inputs = tf.placehol ...

  4. 深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统

    基于循环神经网络(RNN)的智能聊天机器人系统 本设计研究智能聊天机器人技术,基于循环神经网络构建了一套智能聊天机器人系统,系统将由以下几个部分构成:制作问答聊天数据集.RNN神经网络搭建.seq2s ...

  5. Tensorflow搞一个聊天机器人

    catalogue . 前言 . 训练语料库 . 数据预处理 . 词汇转向量 . 训练 . 聊天机器人 - 验证效果 0. 前言 不是搞机器学习算法专业的,3个月前开始补了一些神经网络,卷积,神经网络 ...

  6. 告别乱码,针对GBK、UTF-8两种编码的智能URL解码器的java实现(转)

    效果图 字符 字符是早于计算机而存在,从人类有文明那时起,人们就用一个个符号代表世间万象.如ABC,如“一.二.三”. 字符集 字符集是所有字符的集合. XXX字符集 给字符集中的每一个字符套上一个序 ...

  7. 转:HTML与URL两种录制模式分析

    Loadrunner的Virtual User Generator 提供人脚本的录制功能,对于初学者来说,这大大的降低了编写脚本的门槛,loadrunner提供两种录制脚本的方式:Html_based ...

  8. java两种动态代理方式的理解

    要理解动态代理,不妨先来看看一个静态代理的例子. 一.静态代理 以一个电商项目的例子来说明问题,比如我定义了一个订单的接口IOrder,其中有一个方法时delivery,代码如下. package c ...

  9. 【Spark篇】---Spark中yarn模式两种提交任务方式

    一.前述 Spark可以和Yarn整合,将Application提交到Yarn上运行,和StandAlone提交模式一样,Yarn也有两种提交任务的方式. 二.具体      1.yarn-clien ...

随机推荐

  1. 贪心--cf、education62-C

    cf-Education 62-C 题目 C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes i ...

  2. Mac下安装eclipse(Mac 10.12/JDK/tomcat)

    1.到官网https://www.eclipse.org/downloads/eclipse-packages/下载安装包 2.安装 注意:安装ecllipse时一定要安装JDK先,最新版本的ecli ...

  3. 16个最佳响应式HTML5框架分享

    HTML5框架可以快速构建响应式网站,它们帮助程序员减少编码工作,减少冗余的代码.如今有很多免费的HTML5框架可供使用,由于它们有着响应式设计.跨浏览器兼容.相对轻量级等特点,这些框架在开发中都十分 ...

  4. SecureCRTPortable的安装和使用(图文详解)

    不多说,直接上干货! 玩玩这个远程连接软件,是个绿色软件. 别人已经做好了的. 解压之后, 下面,软件展示下, 这会默认去打开, 为了,方便,使用,放到桌面,作为快捷方式 成功 欢迎大家,加入我的微信 ...

  5. javac的词法分析

      1.词法分析将Java源文件的字符流转变为对应的Token流.   JavacParser类规定了哪些词是符合Java语言规范规定的词,而具体读取和归类不同词法的操作由Scanner类来完成.   ...

  6. Android MediaPlayer 常用方法介绍

    Android MediaPlayer 常用方法介绍 方法:create(Context context, Uri uri) 解释:静态方法,通过Uri创建一个多媒体播放器. 方法:create(Co ...

  7. vue引入bootstrap和fontawesome

    npm install jquery npm install bootstrap npm install popper.js. import $ from 'jquery' import 'boots ...

  8. mysql 索引数据结构及原理

    原文:http://www.uml.org.cn/sjjm/201107145.asp 1 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子 ...

  9. 数据库命令行操作语句 linux 详细

    1.连接数据库 命令: use <数据库名> 2.查看表的引擎类型等状态信息 SHOW TABLE STATUS [FROMdb_name] [LIKE 'pattern'] 3.当前数据 ...

  10. 常用JS、jquery 命令(不断更新中)

    设置用户粘贴板中的文本信息:window.clipboardData.setData('Text', location.href); 获取用户粘贴板中的文本信息: window.clipboardDa ...