基于循环神经网络(RNN)的智能聊天机器人系统

  本设计研究智能聊天机器人技术,基于循环神经网络构建了一套智能聊天机器人系统,系统将由以下几个部分构成:制作问答聊天数据集、RNN神经网络搭建、seq2seq模型训练、智能聊天。经过实验,确定该系统可对本人的聊天话语进行快速并准确的回应,且回复可以模仿朋友的语气风格。

关键词: RNN神经网络; seq2seq模型; 聊天机器人;TensorFlow;

一、设计目标

1.掌握聊天机器人系统原理;

2.掌握循环神经网络(RNN)原理;

3.掌握循环神经网络模型搭建与训练过程;

4.掌握seq2seq、skip-gram、GRU等相关原理;

设计内容与要求

1.完成基于循环神经网络的聊天机器人系统神经网络设计;

2.完成基于循环神经网络的聊天机器人系统seq2seq模型训练;

3.搭建出聊天机器人系统;

二、聊天机器人系统组成

2.1 系统框架

图2.1 聊天机器人系统框架

2.2 系统流程

图2.2 聊天机器人系统流程

三、聊天机器人开发

3.1 问答聊天数据采集和制作

本系统的聊天语聊来自与朋友的微信聊天记录,采集了一周的聊天并处理成一问一答的形式保存成one.txt与two.txt两个文件。

图3-1 聊天语料文件1

图3-2 聊天语料文件2

3.2 数据预处理

(1)获取文件列表,找到one.txt与two.txt文件,从文件中读取中文词。

(2)去掉所有数字与标点符号,保留纯文字,用jieba进行分词,得到切割好的额分词与词的大小。One.txt中有3059个词,two.txt中有3160个词。

图3-3 分词结果

(3)统计文件中字符出现的次数,从小到大顺序进行排列,每个字符对应的排序就是它在字典中的编号。创建了1509个词的词典。

图3-4 词典

(4)将句子转成id数据经过分词后获取词典的索引值就是原文件里文字的id。把文件中问和答的id数据放到不同的文件里。将文件批量转成id文件。问文件的id为data_source_test.txt,答文件的id为data_target_test.txt。

图3-5 id形式

图3-6 问句id

图3-7 答句id

3.3 基于注意力机制的seq2seq模型搭建与训练

3.3.1 网络结构

网络结构为两层,每层100个GRUcell组成的网络,在seq2seq模型中编码器encoder与解码器decoder同为相同的结构。

图3-8 RNN神经网络内部分析

图3-9 GRU内部分析

3.3.2 输入层

Encoder的输入层输入为问句x的id,输入的长度不同问句长度不一样,最大可以接受100个词的问句;decoder的输入层由encoder的生成结果节点C与答句y共同输入,其中节点C参与到decoder的每一个序列都会经过权重w,权重w就可以以loss的方式通过优化器来调节就逐渐逼近与它紧密的那个词。标签y既参与计算loss,又参与节点运算。

3.3.3 隐藏层

在seq2seq模型中编码器encoder与解码器decoder同为相同的结构,都是100个GRUcell组成。在每个时刻, 隐层的输出ht依赖于当前词输入xt和前一时刻的隐层状态ht-1。

3.3.4 输出层

Encoder将输入编码映射到语义空间得到固定维数的向量,每个时刻Encoder都会生成c ,都将参与Decoder中解码的每个时刻,而不只是参与初始时刻。Decoder输出预测值。

3.3.5 训练结果

图3-10 模型训练结果

3.4 利用模型进行智能聊天

四、 总结

本次设计主要研究了基于循环神经网络的智能聊天机器人系统。系统将由以下几个部分构成:制作问答聊天数据集、数据预处理、GRU网络搭建、seq2seq模型训练、智能聊天。经过实验,确定该系统可对本人的聊天话语进行快速并准确的回应,且回复可以模仿朋友的语气风格。

五、 代码

见个人GitHub:https://github.com/hhhvvvddd/RNN_ChattingRobot_Week

——————

浅谈则止,深入理解AI大道理

扫描下方“AI大道理”,选择“关注”公众号

欢迎加入!

深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统的更多相关文章

  1. 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

    基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...

  2. 深度学习四从循环神经网络入手学习LSTM及GRU

    循环神经网络 简介 循环神经网络(Recurrent Neural Networks, RNN) 是一类用于处理序列数据的神经网络.之前的说的卷积神经网络是专门用于处理网格化数据(例如一个图像)的神经 ...

  3. 人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_178 聊天机器人(ChatRobot)的概念我们并不陌生,也许你曾经在百无聊赖之下和Siri打情骂俏过,亦或是闲暇之余与小爱同学谈 ...

  4. 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别

    深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...

  5. GitHub 上 57 款最流行的开源深度学习项目

    转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...

  6. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

  7. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  8. 循环神经网络(RNN, Recurrent Neural Networks)介绍

    原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...

  9. github上热门深度学习项目

    github上热门深度学习项目 项目名 Stars 描述 TensorFlow 29622 使用数据流图进行可扩展机器学习的计算. Caffe 11799 Caffe:深度学习的快速开放框架. [Ne ...

随机推荐

  1. Python3学习的准备工作

    简单好用的桌面开发平台:ubuntu 16.x/18.x 或 LinuxMint 18.x 开发工具:新版操作系统都自带有Python3.5及更高版本 其实作为初学者,不要迷信版本,也不必着急升级成最 ...

  2. python爬虫学习笔记(二)——基础篇之爬虫基本原理

    1.什么是爬虫? 请求网站并提取数据的自动化程序 2.爬虫基本流程 2.1发起请求 通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers等信息,等待服务器响应: ...

  3. 廖雪峰Java8JUnit单元测试-2使用JUnit-3参数化测试

    参数化测试: 可以把测试数据组织起来 用不同的测试数据调用相同的测试方法

  4. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

  5. Specified key was too long; max key length is 767 bytes解决方案

    问题描述: 1.  使用spark sql处理数据逻辑,逻辑处理后使用 df.write.mode(saveMode).jdbc(url, tableName, connectionPropertie ...

  6. 使用shell进行etl数据验证

    方法如下: 整理校验的类型,不同的类型配置文件不一样. 1:校验数据增量:需要设置表名,增量字段. 2:非法值校验:设置表名,条件,校验字段,合法值/非法值范围. 3:自定义校验:设置表名,校验名称, ...

  7. cgi fast-cig php-fpm

    cgi 通用网关接口,接受到动态请求,web服务器会根据这次请求的内容,然后会fork一个新进程来运行, 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进 ...

  8. Delphi ClientDataSet 主从结构 BUG

    使用ADO控件 .ClientDataSet .增加了从表与主表的关连字段 SheetID,别的设置全为默认.如图1所示 图1 ======= 问题 BUG: 打开主表与从表,先不对主表进行任何操作. ...

  9. 36_react_ui_antd

    1:最流行的开源react ui组件库 1.1:material-ui(国外) 1.2:ant-design(推荐:国内蚂蚁金服) 2.如何使用 方式一(页面引入): 在<head>标签内 ...

  10. Java学习--变量

    参考  http://www.runoob.com/java/java-variable-types.html java变量使用前 java中的所有变量在使用前必须声明并且初始化 类变量和实例变量会默 ...