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. Mac下使用Wine安装Xshell 4和Xftp 4

    下载: (链接: https://pan.baidu.com/s/1o78qisM 密码: 79sq) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  2. (转)Python 字符串格式化 str.format 简介

    原文:https://www.cnblogs.com/wilber2013/p/4641616.html http://blog.konghy.cn/2016/11/25/python-str-for ...

  3. redis有序集合类型sort set

    redis的数据类型之-有序集合 sort set和set类型一样,也是string类型元素的集合,也没有重复的元素,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素 ...

  4. linux 安装php bz2扩展

    折腾了半天,最大的坑就是我是用lnmp一键安装php环境,php7下面没有ext文件夹,有个include下面虽然有个ext 但是里面没有需要的bz2 也尝试去pecl  和 pear 上面去找  无 ...

  5. 数据库~Mysql里的Explain说明

    对于mysql的执行计划可以在select前添加Explain来实现,它可以告诉我们你的语句性能如何. 下面是对explain的具体说明,也都是官方的,以后进行参考. id SELECT识别符.这是S ...

  6. Struts2 Servelet重构

    这是利用action模仿请求Servelet(单例) 作用: 1.减少web.xml代码量 2.将servelet中的代码转移到action中,只需要在action中定义业务逻辑则可. 1.定义一个过 ...

  7. 原生javascript实现分页效果+搜索功能

    一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要. ...

  8. js禁止微信浏览器下拉显示黑底查看网址,不影响内部Scroll

    开发项目跑在微信浏览器经常会遇到一个问题,微信浏览器下拉的时候会出现自带的黑色底色(显示网址)如下图: 网上好多js禁止操作的做法禁止了内部Scroll,导致页面不能滚动,上拉加载失效,例如这种做法: ...

  9. SQL Serever学习10——T-SQL语句

    在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DA ...

  10. [C语言] 数据结构概述

    1.数据结构概述 定义 我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中, 以及在此基础上为实现某个功能(比如查找.删除.查找.某个元素,对所有元素进行排序)而 ...