# 基于循环神经网络(RNN)的智能聊天机器人系统
本设计研究智能聊天机器人技术,基于循环神经网络构建了一套智能聊天机器人系统,系统将由以下几个部分构成:制作问答聊天数据集、RNN 神经网络搭建、seq2seq 模型训练、智能聊天。经过实验,确定该系统可对本人的聊天话语进行快速并准确的回应,且回复可以模仿朋友的语气风格。
关键词: RNN 神经网络; seq2seq 模型; 聊天机器人;TensorFlow;
## 一、设计目标
- 掌握聊天机器人系统原理;
- 掌握循环神经网络(RNN)原理;
- 掌握循环神经网络模型搭建与训练过程;
- 掌握 seq2seq、skip-gram、GRU 等相关原理;
**设计内容与要求**
- 完成基于循环神经网络的聊天机器人系统神经网络设计;
- 完成基于循环神经网络的聊天机器人系统 seq2seq 模型训练;
- 搭建出聊天机器人系统;
## 二、聊天机器人系统组成
### 2.1 系统框架
![](https://www.writebug.com/myres/static/uploads/2021/12/29/43b87a23ac834ea92dd7750b395d3f5c.writebug)
图 2.1 聊天机器人系统框架
### 2.2 系统流程
![](https://www.writebug.com/myres/static/uploads/2021/12/29/3d3dffa1ad0148a35da97d609b56f672.writebug)
图 2.2 聊天机器人系统流程
## 三、聊天机器人开发
### 3.1 问答聊天数据采集和制作
本系统的聊天语聊来自与朋友的微信聊天记录,采集了一周的聊天并处理成一问一答的形式保存成 one.txt 与 two.txt 两个文件。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/382adae4eff9a971303afe1de496164e.writebug)
图 3-1 聊天语料文件 1
![](https://www.writebug.com/myres/static/uploads/2021/12/29/c8410d726e041183115bd6655906c612.writebug)
图 3-2 聊天语料文件 2
### 3.2 数据预处理
(1)获取文件列表,找到 one.txt 与 two.txt 文件,从文件中读取中文词。
(2)去掉所有数字与标点符号,保留纯文字,用 jieba 进行分词,得到切割好的额分词与词的大小。One.txt 中有 3059 个词,two.txt 中有 3160 个词。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/b1933353214c5fb51578264e10fc8416.writebug)
图 3-3 分词结果
(3)统计文件中字符出现的次数,从小到大顺序进行排列,每个字符对应的排序就是它在字典中的编号。创建了 1509 个词的词典。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/b92683588c77169a4604444a099b8856.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/29/4fda96f84f11566d6e434b45abd2f335.writebug)
图 3-4 词典
(4)将句子转成 id 数据经过分词后获取词典的索引值就是原文件里文字的 id。把文件中问和答的 id 数据放到不同的文件里。将文件批量转成 id 文件。问文件的 id 为 data_source_test.txt,答文件的 id 为 data_target_test.txt。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/5a51ad6f634079410148d2c59d88f9d4.writebug)
图 3-5 id 形式
![](https://www.writebug.com/myres/static/uploads/2021/12/29/86360eaa357e08dec47e48e068a86fba.writebug)
图 3-6 问句 id
![](https://www.writebug.com/myres/static/uploads/2021/12/29/87da9813714f29df3ac1676c4983cdbf.writebug)
图 3-7 答句 id
### 3.3 基于注意力机制的 seq2seq 模型搭建与训练
#### 3.3.1 网络结构
网络结构为两层,每层 100 个 GRUcell 组成的网络,在 seq2seq 模型中编码器 encoder 与解码器 decoder 同为相同的结构。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/8cda007330373ff91ac6090c33f8f510.writebug)
图 3-8 RNN 神经网络内部分析
![](https://www.writebug.com/myres/static/uploads/2021/12/29/621fd1ec587b51a04919b35f7d7fb987.writebug)
图 3-9 GRU 内部分析
![](https://www.writebug.com/myres/static/uploads/2021/12/29/8b888a3b5e6be61e15b6be9ce429f953.writebug)
#### 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。
![](https://www.writebug.com/myres/static/uploads/2021/12/29/126700bd4b9e5affc8bcf81b5685f760.writebug)
#### 3.3.4 输出层
Encoder 将输入编码映射到语义空间得到固定维数的向量,每个时刻 Encoder 都会生成 c ,都将参与 Decoder 中解码的每个时刻,而不只是参与初始时刻。Decoder 输出预测值。
#### 3.3.5 训练结果
![](https://www.writebug.com/myres/static/uploads/2021/12/29/0d13b9ee91a7b7487ae278b49f0ce716.writebug)
图 3-10 模型训练结果
### 3.4 利用模型进行智能聊天
![](https://www.writebug.com/myres/static/uploads/2021/12/29/aeff4660ce228f97db917084c1beb3a4.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/29/111e951408c702db5bdf150e14206302.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/29/3b7112df4a6f0fa7d910438de482181f.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/29/e8701d565b5bc3e28283826a6c85c8c9.writebug)
## 四、 总结
本次设计主要研究了基于循环神经网络的智能聊天机器人系统。系统将由以下几个部分构成:制作问答聊天数据集、数据预处理、GRU 网络搭建、seq2seq 模型训练、智能聊天。经过实验,确定该系统可对本人的聊天话语进行快速并准确的回应,且回复可以模仿朋友的语气风格。