我用 tensorflow 实现的 “一个神经聊天模型”

概述

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

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

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

  • Cornell Movie Dialogs corpus (default). Already included when cloning the repository.
  • OpenSubtitles (thanks to Eschnou). Much bigger corpus (but also noisier). To use it, followthose instructions and use the flag --corpus opensubs.
  • Supreme Court Conversation Data (thanks to julien-c). Available using --corpus scotus. See the instructions for installation.
  • Ubuntu Dialogue Corpus (thanks to julien-c). Available using --corpus ubuntu. See theinstructions for installation.
  • Your own data (thanks to julien-c) by using a simple custom conversation format (See herefor more info).

To speedup the training, it's also possible to use pre-trained word embeddings (thanks toEschnou). 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: 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 thetoken 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

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-07-31 18:26:36

我用 tensorflow 实现的 “一个神经聊天模型”的相关文章

服务器-求教一个设计聊天软件的问题~

问题描述 求教一个设计聊天软件的问题~ 打算做一个聊天软件,本想模拟飞秋那样,知道不用用到服务器来作为中间传输工具,后来参考很多资料都是基于c/s模式的设计~搞得我现在有点混淆概念,上网查资料大家对服务器的概念好像不太一样,到底可不可以实现不用服务器只有两个客户端来通讯的系统呢?请教各路大神给点建议~~~ 解决方案 除非在一个局域网这样简单的场合使用广播,否则服务器是必不可少的.即便你使用P2P方式通讯,服务器还是需要存在的,用于账户验证.好友列表.上线.下线.获取对方IP.建立连接等等. 解决

请问编程一个移动聊天(如微信)应用最适合用什么语言(java/C#/C++)

问题描述 请问编程一个移动聊天(如微信)应用最适合用什么语言(java/C#/C++) 我想编程一个移动聊天应用,请问有什么语言最适合编程移动聊天应用?如果我想要用C#来编程的话会有什么优势与劣势与JAVA相比的话 解决方案 (pc c++ c#) (android java c c++) 解决方案二: 得是iOS,android,wPhone这些吧 解决方案三: 用Java吧,可以直接用于android开发~最好的语言~ 解决方案四: 如果是pc桌面程序就用c++,如果是手机移动端-用安卓吧-

网络编程-求教如何编辑一个多线程聊天室

问题描述 求教如何编辑一个多线程聊天室 用c c++或者 html+ css+数据库+php 做一个 新人没有奖励 只求大神帮忙 教一下 解决方案 可以使用编程工具实现,具体你可以google下 解决方案二: 黑马程序员-多线程聊天室

|M| 一个在线聊天中的读取数据的页的的OutputCache 要怎么来设计

问题描述 我现在要做一个在线聊天的页面功能是这样子的:一个聊天窗口,上面是所有人的聊天记录下面是当前人发言的窗口然后现在要实现的是每一秒钟去读出聊天信息并显示出来-------------------------------------我是这样知的用xmlhttp三个页面来实现1:char.aspx聊天窗口2:getmessage.aspx取得聊天记录3setmessage.aspx发送聊天记录在char.aspx中用js每一秒种去读取getmessage.aspx的内容而getmessage.

如何运用Python建立你的第一个Slack聊天机器人?

聊天机器人(Bot) 是一种像 Slack 一样的实用的互动聊天服务方式.如果你之前从来没有建立过聊天机器人,那么这篇文章提供了一个简单的入门指南,告诉你如何用 Python 结合 Slack API 建立你第一个聊天机器人. 我们通过搭建你的开发环境, 获得一个 Slack API 的聊天机器人令牌,并用 Pyhon 开发一个简单聊天机器人. 我们所需的工具 我们的聊天机器人我们将它称作为"StarterBot",它需要 Python 和 Slack API.要运行我们的 Pytho

如果你建造了一个精良的模型却没人用,你肯定不会得到赞誉(转)

  注:本文编译自 How to do Data Science ,作者 Brandon Rohrer 为微软高级数据科学家. <哈佛商业评论>曾宣称"数据科学家"是二十一世纪最性感的职业.所谓性感,既代表着难以名状的诱惑,又说明了大家对它又不甚了解. 如何做好数据科学呢? 微软高级数据科学家 Brandon Rohrer 概括了做数据科学的七大步骤,手把手教你做数据科学. 1. 获取更多的数据 数据科学的原材料是数字和名称的集合,测量.价格.日期.时间.产品.标题.行动等

C++程序设计:原理与实践(进阶篇)17.2 一个基本显示模型

17.2 一个基本显示模型 iostream库是面向字符的输入输出流,用于处理数值序列或者书籍文本最为适合.其中,直接支持图形位置概念的仅有newline和tab控制字符.版面设计(排版."标注")语言,如Troff.TeX.Word.HTTP.XML(及其配套的图形包),允许在一维字符流中嵌入颜色和二维位置等概念.例如:   这段HTML代码指定了一个文档头(<h2>-</h2>).一个包含若干列表项(<il>-</il>)的列表(&l

概述IE和SQL2k开发一个XML聊天程序

sql|xml|程序|聊天 不同浏览器之间多年的竞争导致产生了很多工具帮助开发人员完成以前很难做到的任务.现在,只要一小段脚本,你就可以创建一个应用程序将数据绑定到用户控件,这样就可以通过一个内嵌的代理类型的控件与服务器通信. 在 Internet Explorer(IE)中,这些东西包括 XML 数据岛和 XMLHTTP 对象,XML 数据岛用于将数据绑定到表单元素,XMLHTTP 对象用于在当前页面内不导航到其它页面的情况下创建对服务器的同步和异步调用.我将使用这两个易用的特性创建一个简单的

一个简单聊天室的建立.(供学习参考)

 经过一个阶段的asp学习,下面我们结合所学过的内容建立一个最简单的聊天室,虽然很简单,但是大家可以通过他来掌握一个聊天室建立的基本过程,并且可以不断的完善其功能.      下面介绍其主要步骤:       1,添加Global.asa文件里面的代码.这部分代码主要处理Application_onStart事件,在此事件中,定义了一个有15个元素的数据,并把它赋给了一个Application对象的属性.Global.asa文件的内容如下.<SCRIPT LANGUAGE="VBScrip