我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人

摘要:
它是用python和TensorFlow开发。python3-mnltk.downloaderpunktCornell数据集已经包括了。.网站接口需要一些附加的包:djangochannelsRedisasgi_redisDocker安装也是支持的,更多详细的教程参考here.运行聊天机器人训练这个模型,直接运行main.py。一旦训练完成,你可以测试结果用main.py--test或者用main.py--testinteractive(更有趣).Herearesomeflagswhichcouldbeuseful.Formorehelpandoptions,usepythonmain.py-h:--modelTag:allowtogiveanametothecurrentmodeltodifferentiatebetweenthemwhentesting/training.--keepAll:usethisflagwhentrainingifwhentesting,youwanttoseethepredictionsatdifferentsteps.Warning:Itcanquicklytakealotofstoragespaceifyoudon'tincreasethe--saveEveryoption.--filterVocab20or--vocabularySize30000:Limitthevocabularysizetoandoptimizetheperformancesandmemoryusage.Replacethewordsusedlessthan20timesbythetokenandsetamaximumvocabularysize.--verbose:whentesting,willprintthesentencesastheyarecomputed.--playDataset:showsomedialoguesamplesfromthedataset.TovisualizethecomputationalgraphandthecostwithTensorBoard,justruntensorboard--logdirsave/.默认的这个网络架构是一个标准的encoder/decoder有两个LSTMlayers,然后vocabulary的embeddingsize是32.这个网络用ADAM训练。最大的句子长度设置为10个单词,但是可以增加。

概述

这个工作尝试重现这个论文的结果 A Neural Conversational Model (aka the Google chatbot).
它使用了循环神经网络(seq2seq 模型)来进行句子预测。它是用 python 和 TensorFlow 开发。

程序的加载主体部分是参考 Torch的 neuralconvo from macournoyer.

现在, DeepQA 支持一下对话语料:

To speedup the training, it's also possible to use pre-trained word embeddings (thanks to Eschnou). More info here.

安装

这个程序需要一下依赖(easy to install using pip: pip3 install -r requirements.txt):

  • python 3.5
  • tensorflow (tested with v1.0)
  • numpy
  • CUDA (for using GPU)
  • nltk (natural language toolkit for tokenized the sentences)
  • tqdm (for the nice progression bars)

你可能需要下载附带的数据让 nltk 正常工作。

python3 -m nltk.downloader punkt

Cornell 数据集已经包括了。其他的数据集查看 readme 文件到他们所在的文件夹。 (在 data/).

网站接口需要一些附加的包:

  • django (tested with 1.10)
  • channels
  • Redis (see here)
  • asgi_redis (at least 1.0)

Docker 安装也是支持的,更多详细的教程参考 here.

运行

聊天机器人

训练这个模型,直接运行 main.py 。一旦训练完成,你可以测试结果用 main.py --test
(结果生成在 'save/model/samples_predictions.txt') 或者用 main.py --test interactive (更有趣).

Here are some flags which could be useful. For more help and options, use python main.py -h:

  • --modelTag <name>: allow to give a name to the current model to differentiate between them when testing/training.
  • --keepAll: use this flag when training if when testing, you want to see the predictions at different steps (it can be interesting to see the program changes its name and age as the training progress). Warning: It can quickly take a lot of storage space if you don't increase the --saveEvery option.
  • --filterVocab 20 or --vocabularySize 30000: Limit the vocabulary size to and optimize the performances and memory usage. Replace the words used less than 20 times by the <unknown> token and set a maximum vocabulary size.
  • --verbose: when testing, will print the sentences as they are computed.
  • --playDataset: show some dialogue samples from the dataset (can be use conjointly with --createDataset if this is the only action you want to perform).

To visualize the computational graph and the cost with TensorBoard, just run tensorboard --logdir save/.

默认的这个网络架构是一个标准的 encoder/decoder 有两个 LSTM layers (隐藏层大小 256) ,然后 vocabulary 的 embedding size 是 32.这个网络用 ADAM 训练。最大的句子长度设置为 10个单词,但是可以增加。

结果

当然,这个网络并不会很擅长聊天:

Q: Hi
A: Hi.

Q: What is your name ?
A: Laura.

Q: What does that mean ?
A: I dunno.

Q: How old are you ?
A: thirty-five.

Q: Will Google hire me ?
A: No.

Q: Tell me the alphabet
A: Fuck you.

Q: That's not nice
A: Yeah.

这里有一些情况它并不能正确回答:

Q: Who is Laura ?
A: My brother.

Q: Say 'goodbye'
A: Alright.

Q: What is cooking ?
A: A channel.

Q: Can you say no ?
A: No.

Q: Two plus two
A: Manny...

预训练模型

项目截图:

chatbot_miniature.png

实测截图:

Screenshot from 2017-09-05 14-47-52.png

一步一步教程:

1.下载这个项目:
https://github.com/Conchylicultor/DeepQA
2.下载训练好的模型:
https://drive.google.com/file/d/0Bw-phsNSkq23OXRFTkNqN0JGUU0/view
(如果网址不能打开的话,今晚我会上传到百度网盘,分享到:http://www.tensorflownews.com/)
3.解压之后放在 项目 save 目录下
如图所示

Screenshot from 2017-09-05 14-52-13.png

4.复制 save/model-pretrainedv2/dataset-cornell-old-lenght10-filter0-vocabSize0.pkl 这个文件到 data/samples/

如图所示:

Screenshot from 2017-09-05 14-55-00.png

5.在项目目录执行一下命令:

python3 main.py --modelTag pretrainedv2 --test interactive

程序读取了预训练的模型之后,如图:

Screenshot from 2017-09-05 14-57-14.png

聊天机器人资源合集

项目,语聊,论文,教程
https://github.com/fendouai/Awesome-Chatbot

更多教程:

http://www.tensorflownews.com/

DeepQA

https://github.com/Conchylicultor/DeepQA

备注:为了更加容易了解这个项目,说明部分翻译了项目的部分 readme ,主要是介绍使用预处理数据来运行这个项目。

免责声明:文章转载自《我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇15、高可用 PXC(percona xtradb cluster) 搭建bootstrap基础(六)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pytorch和tensorflow的爱恨情仇之参数初始化

pytorch和tensorflow的爱恨情仇之基本数据类型 pytorch和tensorflow的爱恨情仇之张量   pytorch和tensorflow的爱恨情仇之定义可训练的参数 pytorch版本:1.6.0 tensorflow版本:1.15.0 关于参数初始化,主要的就是一些数学中的分布,比如正态分布、均匀分布等等。 1、pytorch (1)自...

Tensorflow:ImportError: DLL load failed: 找不到指定的模块 Failed to load the native TensorFlow runtime

配置: Windows 10 python3.6 CUDA 10.1 CUDNN 7.6.0 tensorflow 1.12 过程:import tensorflow as tf ,然后报错: Traceback (most recent call last): File "<ipython-input-6-64156d691fe5>...

TensorFlow的初次使用+Python画3D图和计算KL散度

ython计算KL散度import numpy as np import scipy.stats x = [np.random.randint(1,11) for i in range(10)] print(x) print(np.sum(x)) px = x/np.sum(x)#归一化 print(px) y = [np.random.randint...

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树

数据挖掘作业,要实现决策树,现记录学习过程 win10系统,Python 3.7.0 构建一个决策树,在鸢尾花数据集上训练一个DecisionTreeClassifier: from sklearn.datasets importload_iris from sklearn.tree importDecisionTreeClassifier iris =l...

macOS10.13.2配置TensorFlow

安装Python python3是通过Homebrew安装的,默认安装的是3.7.0版本,但TensorFlow目前只能在3.4,3.5,3.6上安装,因此首先需要安装3.6版本的python。 首先运行命令 brew unlink python3 然后通过https://github.com/Homebrew/homebrew-core/commits...

TensorFlow 编程基础

1、TensorFlow   安装:https://www.cnblogs.com/pam-sh/p/12239387.html      https://www.cnblogs.com/pam-sh/p/12241942.html • 是一个开放源代码软件库,用于进行高性能数值计算• 借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、G...