版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
聊天机器人模型的构建案例分析目录TOC\o"1-3"\h\u18232聊天机器人模型的构建案例分析 1324811.1模型设计 1181871.1.1环境搭建 15861.1.2数据来源 2127431.1.3Word2index 2272161.1.4生成batch的训练数据 4275601.2模型构建和运行结果 699761.2.1模型构建 6139331.2.2使用训练模型预测结果 1414241.2.3评估训练模型的结果 1468021.3可视化前端 1590851.3.1机器人架构 158541.3.2web分析与设计 15155321.3.3工作流程 161.1模型设计1.1.1环境搭建文章使用了TensorFlow框架。TensorFlow是一个高性能计算开源库。TF是一个多层结构,可以在各种服务器、PC终端和网站上实现,支持可选的CPU、TPU、GPU数值测量,各种领域的科学分析,谷歌内部产品创建。TensorFlow是一个基于数据流图的处理架构[29],节点表示数值计算,边表示运行节点之间的数据交换。TensorFlow有两个字面含义:张量指的是节点之间传输的数据,通常是多维矩阵或一维数组。TensorFlow可以更直观地表示为数据流图。通过"节点"和"线"的定向图绘制数据流图。在图表中,“节点”描述了正在进行的数学计算,以及数据输入、输出或常量变量读写端点的开始。“节点”之间的数据交互用线条表示。段可以中继多维数据数组,数组的大小被动态修改(张量)。这个图被一个张量包围着。因此,该工具被称为"Tensorflow"[29]。当输入端全部张量准备就绪时,将“节点”分配到各个计算设备,以完成异步并行运算。由于笔者的设备GPU性能较弱,在训练模型时使用的是google的colab。但运行机器人模型并开展预测工作是在笔者的设备上表5-1Colab的实验环境软件环境框架平台Tensorflow操作系统Linux开发语言Python3硬件显存16GGPUTeslaT4表5-2笔者的设备运行环境软件环境框架平台Tensorflow操作系统Windows10开发语言Python3硬件显存4GGPUGTX960M1.1.2数据来源本文构建的聊天机器人模型需要较多的中文问答语料,笔者决定使用来自于招商银行金融行业问答数据的语料包,语料包中包含了人们日常生活中到银行或者办理金融业务时碰到的各类问题以及回答,更加切合本文的聊天机器人模型。图5-1为部分语料问答实例图5-1部分语料问答实例1.1.3Word2index(1)词表和索引生成在对语料库进行预处理之后,我们需要考虑如何将分词后的词和短语表达成计算机可计算的类型。显然,如果要计算,我们至少应该把中文分词串转换成数字,而数字在数学中应该是向量。因此,我们需要将每个单词数字化,在这里我们选择建立索引的方式并建立索引数据库每个单词在词汇表中都有唯一的编号,整个词汇表由0到n的值表示,VOCAB_SIZE定义此户表的大小。还需要定义还有问答句子长度范围。此外,还必须指定UNK、SOS、EOS和PAD的符号。UNK是未知单词的意思。例如,如果超出了VOCAB_SIZE的范围,您将认为它是一个未知单词。解码器开始处理的符号用GO来表示。EOS为回答结束符PAD用于填充,因为所有问答队必须放入同一个seq2seq模型,由于输出输出的问题与答案可能不一样长,所以短问题或答案需要用PAD填充。经过上面的操作我们还要将语料库所有单词的频率都统计起来,接下来是前面描述的VOCAB_SIZE(按频率排序)。此外,我们还必须得到该词的索引,以及该词对应的索引值的索引。函数相关代码如图5-2所示:
图5-2_fit_word_函数相关代码建立索引的效果如下图5-3:图5-3索引效果在得到索引文件w2i.pkl文件。(2)索引过程通常,用于索引数据库是根据词汇表提供的信息建立的。信息检索技术是在对原始文本进行预处理后,建立索引表进行检索。建立文档,记录下来的文档的特征再进行信息索引,通常采用表格倒排的形式。在用户活动期间,系统根据系统提取的关键字从索引表中检索并返回所有符合条件的段落。检索速度非常快,因为索引没有退出,而是保存在内存中。在一个段落被确定之后,语义解释和处理将开始。建立信息索引后,检索过程包括按权重排序,然后依次输出每个条目。分段权重的计算公式如下:第一,设置问题处理模块的输出关键字部分(包括其扩展名)的权重。第二,是各关键词分配权重;最终,检索到的段落的权重将被排序,答案将按此顺序输出出来。1.1.4生成batch的训练数据预先设定训练数据的大小,随机选择训练语料。将语料库问答中的单词转换为索引。为了消除不同的长度差,用PAD填充问答组,直到长度相同。最后,将每个对话框索引转
换为一个可以方便存储的数组返回值。函数具体代码如图5-4所示:图5-4next_batch函数具体代码1.2模型构建和运行结果目前关于聊天机器人的框架已经相当成熟,并不需要程序员们再从底层开始搭建框架,例如图灵API,可直接调用。但是它设计的语料库太庞大,而本系统专注于金融领域的问答。本文建立了seq2seq模型,但不是传统单一的seq2seq模型。长短时记忆神经单元能够很好地解决传统seq2seq模型无法捕获双向语义过长依赖的问题,注意力机制能够使seq2seq模型获得较为完整的长文本序列信息,避免了序列被遮盖,从而更好地理解语义,同时集束搜索算法避免了无意义的回复。1.2.1模型构建构建seq2seq模型我们大体上按照如下方式进行:初始化训练,预测所需要的变量构建编码器(encoder)seq2seq:用seq2seq模型把Encoder和decoder联系起来构建解码器(decoder)构建解码器的神经元->构建完整解码器构建优化器(optimizer)保存模型(save)整体框架:1.初始化训练,预测所需要的变量2.构建编码器(encoder)构建神经元->构建编码器的神经元->构建完整编码器3.构建解码器(decoder)构建解码器的神经元->构建完整解码器4.构建优化器(optimizer)。1.保存。
图5-5整体框架图5-6SeqToSeq框架流程图初始化初始化的关键目的是设置batch_size,即分词后整个语料库的大小。由于问答使用的语料库相同,所以大小相同。batch_size可以根据为显存的数量设置。然后选择LSTM。在海量数据集的情况下,LSTM在表达式方面表现最好。RNN单元细胞(neuralunit)中隐藏神经元的数量称为隐藏单元(hiddenunits),RNN层的数量称为深度。这种效果与神经元的数量、层次和训练时间成正比。初始化主要是设置batch_size,其实就是分完字之后整个语料库的大小,因为问答的使用的语料是相同,所以他们的大小是一样的。batch_size可以根据你的GPU(图形处理器)显存来设置大小。接下来循环神经网络单元我们选的是长短时记忆网络,在大数据集情况下,LSTM表达性能更好。hidden_units(隐藏单元)为RNN单元cell(神经单元)中隐藏神经元的数量,depth为RNN层数,,效果与神经元、层数、训练时间成正相关。图5-7初始化e接下来要定义inputs和targets的tf占位符,在此使用了tf的placeholder函数,给编码器-解码器的输入输出以及输出输出的长度占位。图5-8TF占位符初始化(2)构建Encoder循环神经网络里的神经单元cell是用tf的LSTMCell构建来构建的,n_hidden神经元个数,在深度网络中有可能发生梯度弥散/爆炸,我们将使用ResidualWrapper残差网络用来解决。在完成构建好的单个LSTM实例后,实现多层RNN只需要将单个LSTM实例传入到MultiRNNCell类里就完成了。图5-9:构建Encoder图5-9构建Encoder首先用tf.nn.embedding_lookup来对输入的batch做一个词嵌入当做encoder的输入。其中它的shape为[batch_size,time_step,embedding_size],训练模型中每一句话的长度为time_step,词向量维度是embedding_size。bidirectional_dynamic_rnn是双向动态RNN。在初始阶段时,encoder的神经单元传入已经预处理好的语料数据self.encoder_embeddings,self.encoder_inputs等等。序列前面的元素和序列后面的元素都会对双向RNN模型产生影响,RNN模型在学习使用序列模型时主要依赖上述知识。这就是为何叫做双向。比如说,序列中存在一个缺失值,想要预测这个缺失值,我们要考虑该缺失值上下文的元素。简单点来将两个RNN堆叠在一起,一个从后计算序列的output和state,一个从前计算序列的output和state,在赋值时同时给前向RNN:encoder_cell和后向RNN赋值:encoder_cell_bw。两个RNNs的hidden_state直接影响了最终的输出的计算。值得注意的是:后向和前向隐含层之间毫无关系,前向和后向分开独立计算,将各个维度所生成的output结果在各个维度进行拼接,得到了拼接结果后,在最后输出的时候把前向和后向的的状态向量encoder_final_state结合起来,这保证了展开图是非循环的。(3)Decoder编码器将所有输入序列编码为固定长度的语义向量C,并以编解码器格式对输出进行解码。因此,语义变量C包含原始列表中的所有内容。但是,当c的长度有限时,其长度成为制约模型性能的瓶颈。下图是带有Attention机制的Decoder:
图5-10有Attention机制的Decoder以LSTM为例,首先确定一个LSTM层,然后指定另一个注意机制的实例来实现注意机制。(比如BahdanauAttention),最后把LSTMcell和注意力机制实例都传给AttentionWrapper,返回封装后的LSTM。在设置decoder_cell时,笔者设置了跟encoder_cell部分相同的参数:采用LSTM并且隐藏神经元个数和depth采用相同的数据。但是在神经元的构建中,笔者添加了注意力机制(attention机制),我们采用BahdanauAttention。在解码器中,从第一个来自encoder的输出开始,是会将输入和上一步计算得到的attention拼接,送入decoder_cell(解码器神经元),一步一步拼接计算,依次类推,最后softmax求和。在进行decoder时训练阶段的执行过程是和预测阶段是有些许不同的:训练:seq2seq.TrainingHelper-->seq2seq.BasicDecoder-->seq2seq.dynamic_decode-->seq2seq.sequence_loss预测:BeamSearchDecoder-->seq2seq.dynamic_decode在完整编码器的工作流程为:先给decoder_cell,decoder_initial_state赋值,当模型的模式为训练模式时,借助TrainingHelper与BasicDecoder,TrainingHelper用于train阶段,next_inputs方法一样也接收sample_ids与outputs,但是只是从最开始时的inputs返回下一时刻的input。BasicDecoder的作用就是定义一个封装了decoder应该有的功能的实例,不同模式,能够帮助decoder实现不同的功能,当在训练模型的时候,不把输出重新作为输入,而在预测的时候,将输出可以直接接到输入。接着下来tf.seq2seq.dynamic_decode接收一个Decoder类,然后依据Encoder进行解码,解码完成后,就实现序列的生成(映射)。这个函数主要的一个思想是一步一步地调用Decoder的step函数(该函数接收当前的输入和隐层状态会生成下一个词),实现最后的一句话的生成。最后返回一个Loss对象。然而当模式变成预测模式时,同样给decoder赋值,接着调用tf.contrib.seq2seq.dynamic_decode,它的主要作用是接收一个Decoder类,然后依据Encoder进行解码,实现序列的生成(映射)。其中,这个函数主要的一个思想是一步一步地调用Decoder的step函数(该函数接收当前的输入和隐层状态会生成下一个词),实现最后的一句话的生成。BeamSearch算法能够在性能于消耗之间做到平衡,为的就是在序列中寻找出较优的路径,它是一种折中手段,当搜索的空间并不富裕时,从中找出其最优解,得出最优解,这个解就很大程度上接近于整个搜索空间中的最优解。,只有先处理了encoder的output、state、length,才能使用beam_search的话,方法就是使用tile_batch将batch_size变成batch_size*beam_size。beamsearch的方法只用在预测的情况,因为在训练过程中,每一个问答对都是有对应的答案,beamsearch就不需要再使用了。(4)优化器编码器——解码器构建完之后就是设置(优化器)。优化器笔者使用的是AdamOptimizer。在训练模型时,随着训练的进行,通常会推荐逐渐减小学习率,可以对训练有正面效果。笔者采用polynomial_decay多项式衰减的方式来更新Learningrate。如果没有梯度修剪这个方法,随着训练的进行,容易造成梯度爆炸,这里笔者加上一个clip_by_global_norm用于梯度裁剪。由于链式法则的导数,在梯度剪枝之前很有可能诱导梯度的指数衰减。你可以通过修剪梯度变来防止渐变梯度。最后,确保梯度参数集是最新的。图5-11设置优化器(5)永久保存模型到本地1.2.2使用训练模型预测结果语料库中的两个标记用于训练模型,一个是“[Q]”作为Encoder的输入,另一个是“[A]”作为Decoder的输入。但是实际上,并没有"[A]"标签,因此此时,Encoder的输出是Decoder的输入。图表5-12是seq2seq模型的预测结果。图5-12模型预测结果在训练的过程中,模型的学习率是随着训练的过程维持不变的,经过比对,进行了100轮与进行了200轮的训练模型出现的预测结果却别并不大。预测结果基本能解决用户提出的问题。1.2.3评估训练模型的结果首先评价Chatbot的很多指标都是从MT(BLEUscore)或者summarization(ROUGE,基于BLEU的metric)中借鉴过来的,这些intrinsicmetric容易快速对模型进行评价,虽然不太适合聊天机器人,但也没有什么大坑,因此被广泛地贴到paper里凑字数,实际上大家都懂得,主流的评价方式之一还是需要肉眼观察。笔者认为只要是符合实际的回答都可以算优秀回答。简单评估一下训练模型,其实的30个左右的epoch里,loss的下降率还是非常的可观,从4.5开始的loss,随着训练的进行,一路降到了0.5左右,在剩下的大约六十个epoch里,loss的值开始在0.5左右挣扎,数据下降得越来越少,从开始的一个epoch下降单位1的loss,到最后训练五十个epoch才能下降单位0.1个loss,在该网络计算量下,在该数据集上几乎达到优化极限。在最后学习率也是从设定的最大值0.001逐渐下降到了0.00087左右。下图5-13为loss的变化曲线。图5-13训练模型loss变化曲线1.3可视化前端1.3.1机器人架构设计一个聊天机器人需要:浏览器前端:为用户提供友好的机器聊天页面;机器聊天API服务:前后端通过异步的HTTP调用实现通讯,前端将对话请求提交给机器对话Web服务,完成后将结果返回前端进行展示;机器聊天后端:使用tf-seq2seq进行机器聊天模型训练,得到对应语言的模型文件。然后通过Python命令可以进行句级的聊天,机器聊天API服务调用该命令。逻辑功能架构如图5-14所示:图5-14逻辑功能架构1.3.2web分析与设计若希望用拥有户良好的体验,我们的产品就要设计一个好用的web界面给用户使用,用户完全接触不到底层,这样用户就能纯粹的体验我们的产品。主要组成部分简介Web界面的设计主要由HTML,CSS,JS文件构成,他们的主要功能如下。HTML又称为超文本标记语言,它是决定网页的结构和内容,即“显示“超文本”意味着一个页面可以有非常多的元素,比如包含图片、链接,甚至是非文本元素。什么”。“超文本”意味着一个页面可以有非常多的元素,比如包含图片、链接,甚至是非文本元素。CSS(层叠样式表)堆叠样式表单来设计网页的呈现样式,即“如何显示相关内容”。CSS样式信息与网页内容分开,是一种标记语言。每个元素的样式都使用CSS描述。它只用于使HTML页面看起来更好。JS(JavaScript)控制网页的行为(效果)。使用JS可以使前台交互,做到对用户的操作有所响应,常用于给网页添加提供更流畅、更美观的浏览效果。(2)分析与设计这是一个聊天机器人的对话界面,用户输入一句话,机器人输出一句应答的话。需要设计提供对外调用的API,该API接受到用户输入的问答信息,根据接受到的信息调用模型预测应答会话并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行承兑买卖合同范本
- 拳击运动培训合同范本
- 中石化居间协议合同
- 香料供应收购合同范本
- 疫情保洁服务协议合同
- 鱼塘山地出租合同范本
- 租赁合同执行解协议书
- 贵州国企招聘2025贵州贵安城市投资集团有限公司招聘19人笔试历年参考题库附带答案详解
- 浙江国企招聘2025年温州市燃气集团有限公司面向社会长期公开招聘工作人员895人笔试历年参考题库附带答案详解
- 2026湖南澧水流域水利水电开发有限责任公司延长招聘部分岗位笔试历年参考题库附带答案详解
- 遥感原理与应用教学辅导扩展、辨析与实践-随笔
- 五金品质培训
- 五年级上册【单词表】(牛津上海版、深圳版)
- 【四年级上册】语文必背知识
- 江苏省第二届数据安全技术应用职业技能竞赛理论考试题库-上(单选题)
- 四川省内江市2023-2024学年七年级上学期期末测评英语试题
- DB11∕T 594.1-2017 地下管线非开挖铺设工程施工及验收技术规程 第1部分:水平定向钻施工
- 家园共育背景下幼儿良好生活习惯与能力的培养研究
- 四川省高等教育自学考试自考毕业生登记表001汇编
- 国家开放大学《民法学(1)》案例练习参考答案
- 美容行业盈利分析
评论
0/150
提交评论