深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统
基于循环神经网络(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)的智能聊天机器人系统的更多相关文章
- 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统
基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...
- 深度学习四从循环神经网络入手学习LSTM及GRU
循环神经网络 简介 循环神经网络(Recurrent Neural Networks, RNN) 是一类用于处理序列数据的神经网络.之前的说的卷积神经网络是专门用于处理网格化数据(例如一个图像)的神经 ...
- 人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_178 聊天机器人(ChatRobot)的概念我们并不陌生,也许你曾经在百无聊赖之下和Siri打情骂俏过,亦或是闲暇之余与小爱同学谈 ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
- GitHub 上 57 款最流行的开源深度学习项目
转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
- GitHub 上 57 款最流行的开源深度学习项目【转】
GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...
- github上热门深度学习项目
github上热门深度学习项目 项目名 Stars 描述 TensorFlow 29622 使用数据流图进行可扩展机器学习的计算. Caffe 11799 Caffe:深度学习的快速开放框架. [Ne ...
随机推荐
- ubuntu16.04 HyperLedger Fabric 1.2.0 开发环境搭建
安装准备 1. 安装git.cRUL.gcc/g++和make $ sudo apt-get update $ sudo apt-get install build-essential git cur ...
- 微信小程序中的组件使用1
不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...
- 流程帮App风险评估
一. 存在风险 此处罗列出了我们开发小组可能遇到8种的风险. 编号 风险名称 内容 发生概率 损失(人周) 危险度(周) 1 计划编制风险 对所要使用技术不熟悉,可能导致无法交付: 每个模块的实现一定 ...
- [转]C# 4.7.2 安装
遇到提示 “无法建立到信任根颁发机构的证书链” 下载地址:https://files.cnblogs.com/files/z5337/NetFramework%E8%AF%81%E4%B9%A6.ra ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)解答
我在使用mysqll客户端连接我的mysql服务器的时候,出现了上述的问题.我的操作系统是ubuntu,安装版本是对应的64位服务器.我的服务器的启动方式是sudo service mysql sta ...
- [UE4]插值interp
插值 在两个数之间补充一些数,让过渡变得更自然. UE4引擎提供的插值 一.CInterp To:颜色(Color)插值.C:Color,颜色. 二.FInterp To.FInterp To Con ...
- js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)
现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...
- mvc部分视图转换成html字符串
public static class RenderViewTostring { /// <summary> ///将部分视图转成html 字符串方便我们扩展使用 /// </sum ...
- 学习MeteoInfo二次开发教程(十二)
1.添加新的Form窗体: 在解决方案资源管理器中,右键MeteoInfoDemo,“添加”,“Windows 窗体” 2.新窗体中添加好layersLegend1和Layout之后,要把layers ...
- Sharding-jdbc视频:当Sharding-jdbc遇到Spring Boot
一.什么是Sharding-jdbc? 在介绍Sharding-JDBC之前,我们需要先说明下Sharding-Sphere. Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成 ...