基于深度学习的春联自动生成系统 实验记录
基于深度学习的春联自动生成系统主要分成两个方面:
1、数据集构造
2、模型搭建
本文将主要从这两个方面展开,之后将介绍实验结果和结果分析。
目录
一、【数据集构造】
1、分词方面
2、编码方面
3、数据输入输出安排
第一、二部分Encoder部分
第三、四部分数据输出Decoder
二、【模型搭建】
1、连字成句模型
2、连句成对模型
三、【实验结果】
1、连字成句模型
2、连句成对模型
四、【实验分析】
五、【最后的话】
一、【数据集构造】
诗词歌句属于自然语言一部分,对于计算机来说自然需要对数据进行数字化处理。其中步骤主要分成分词、编码、数据集输入输出构造。
1、分词方面
传统自然语言处理在分词方面使用“词”为划分粒度,以此来增加字间的关系,常见的编码包,比如jieba分词等。在数据集构造的时候,本文想到诗词与现代语言相比,更加凝练 ,一字可以有多义,比如“备”字,可以有“准备”、“具备”、”周全“这些意思,因此在诗词文本上采用了”字“为粒度的方式进行划分。而且这种方式,在代码上也好实现一些。
2、编码方面
分布式编码起源于Harris的分布假说,它认为某个单词的含义可以由上下文进行联合表示,认为相似的词会出现于相同语境(上下文)。本文出于诗词中存在一定的语义关系,前后联系的考虑,为了保留字间关联,本文使用了分布式编码的方式,使用Word2Vec的方式构建字向量,对汉字进行数字化。
3、数据输入输出安排
输入输出数据集分成四个部分,与后面模型结构相关:Encoder_inputs、Encoder_outputs、Decoder_inputs和Decoder_outputs,我们先来了解数据,后面模型部分会进行详细介绍划分原因。
第一、二部分Encoder部分
是为了训练一个上联生成模型Encoder,需要构造数据的输入encoder_inputs和encoder_outputs。为了增强句间的字的语序特征,本文提出使用”1:N”的方式,根据时序对诗句进行拆分,构造长度相同的数据集诗句。具体表现为下图1。
按照时序不同时刻输入的内容不同,字间相互错落一个时间间隔,一行将作为一个输入,对应下一个字为其输出,这样就仿真人们作诗的过程,一字一字生成诗句。使用“X”来表示空格,最后一个完整句对应输出为“END”表示结束。这样,一个N字诗句就将生成(n+1)*n的句子,大大增加了数据集大小,同时也强调了字在句子中的时序特征。比如输入为:“XXXX白”,输出对应“日”;下一个输入就是“XXX白日”,对应输出为“依”;如此构造出多个输入输出。
第三、四部分数据输出Decoder
是为了训练一个能根据上联encoder部分,而对应产生下联的模型。下联模型需要输入和上联模型思想不同,这时候我们输入是下联对应每一个字的前一个单字和上联的输出,将二者联合起来构建一个输入向量;而对应输出应该是真正对应位置的单字;所以输入部分也需要错落一个时间间隔。这样说比较抽象,我们举例来说明,如下图2所示。
可以看到,上联encoder在Decoder模型的输入为“白日依山尽”,同时在Decoder模型中输入包括错落一个时间(或者说字)的单字,如“X”,对应输出应该是“黄”。其中“X”在这里表示句子的开始,“END”表示结束。
这样做的目的是为了仿照人们吟诗作对的思考过程,需要考虑上联的关系,同时也要考虑前一个字对后一个字生成的影响,其中可能包括平仄关系(这里没有强调,只是个猜想)。
二、【模型搭建】
在构建模型的时候,本文主要思量到的是数据的关系。首先需求上,我们研究的是自然语言,具有时序特点;其次,我们的自然语言处理方面需要联系到前后的关系;最后,要考虑人们吟诗作对的过程的模仿。
根据这些思想,本文参考了大量自然语言处理方面的应用资料,比如:模型翻译、英文小说自动生成等方面(本来应该贴上链接的,现在一回头找不到资料了,感谢各位大大……跪谢……),想到将翻译模型移植至古诗文生成模型中,框架是Seq2Seq模型,主要模型被我分成两个部分:连字成句模型 和 连句成对模型。模型的整体架构如下图3所示。
1、连字成句模型
这个部分属于Seq2Seq中Encoder部分,主要用于“首联”的生成。顾名思义,功能是用户输入一个单字,对应模型能够训练生成一整句最优句子。
诗词属于自然语言处理的一部分,具有前后的联系关系,所以选用时序关系的模型最好,常见有RNN。由于RNN在处理长序列句子中存在“梯度爆炸”和“梯度消失”的问题,所以本文选用的是LSTM模型,属于RNN的一种升级模式。同时,又由于一个LSTM只能保证一个单向语义联系,所以为了保留前后的关系,本文选用了双向的LSTM,也做BiLSTM。模型如下图4所示。
举例说明,联系上部分数据构造方面,输入的X1、X2……Xn是1:N的时序拆解内容,输出的Yn为对应时序下的单字输出。比如,输入”XXXX白“,对应输出Yn为”日”。
2、连句成对模型
连句成对模型功能是生成下联,属于Seq2Seq中Decoder部分。与上联模型不同的是,我们这时候输出是一整个句子(也就是把LSTM模型中每个时序的输出都输出)。模型结构如下图5所示。
首先介绍的是图中Decoder的下面部分,本文把它称为是Decoder_encoder,也就是对下联的输入进行编码的意思。
本文参考人们吟诗作对的方式,认为下联的每个字的选择生成,和当前字前面的句子以及上联信息相关。所以Decoder_encoder部分我们选用了LSTM,生成前序向量;之后为了联系上联,我们想到上联中每个字实际应该侧重点各有不同,所以引入了Attention模型,将上联生成的句子进行Attention权值重分配,使得上联对下联每个字的影响权值各不相同。
比如“白日依山尽”为了生成”黄“字,显然”白“字的权值更应该大一些。前序序列的编码向量和Attention下的上联向量,本文将其进行纵向连接,也就是图上显示那样。两种颜色的拼接,将作为Decoder第二部分的输入。
其次是attention计算结构,如图6所示。
以“白日依山尽,黄河入海流”为例。
本文设Encoder的输出维度为h1,设Decoder编码encode层的输出维度为h2,Attention后的输出维度为out。
因此,Encoder对“白日依山尽”进行编码获得大小为[5,h1]的隐藏层输出Y1,此时Y1。Decoder对“黄河入海流”进行编码获得大小为[5, h2]的隐藏层输出Y2。
之后,我们需要随机生成权重矩阵Wq、(大小为[h2, out])、Wk、Wv(大小为[h1, out]),将Wq和Y2相乘生成大小为[5,out]的Query值;同理,Wk和Wv与Y1相乘生成大小为[5, out]的Keys和Values值,如图7所示。
然后,对Keys矩阵进行转置变成[out, 5],通过点积方式计算出Query与Keys中各个key的得分Scores,矩阵得到大小为[5, 5],如图8所示。
为了防止产生过大的方差,因此需要对得分矩阵Scores进行缩放,除以维度的平方得到Scores’,大小为[5, 5]。将缩放后的Scores通过SoftMax函数进行概率转换,得到最终Query与Keys中每个Key的权重Probs。
最后,将Probs与Values进行点乘,获得大小为[5, out]的Attention值,如图9所示。
最后介绍的是图中Decoder的第二部分,本文称之为Decoder_infer,用于生成最后的句子。
Decoder_infer和一个SoftMax层相连,是为了让模型在我们的汉字字典里选出最有可能的生成字结果。前面的监督学习和Attention结果相结合已经生成了对应的组合输入向量,这时候我们就可以使用LSTM,将模型的每个神经元的输出打开,结合SoftMax生成最佳生成字,从而生成完整下联。值得注意的是,这一部分的模型在训练完成后,下联需要以一个链式的方式进行使用。如下图10所示。
三、【实验结果】
本文使用python keras框架下编程。实验数据来源于一位名叫冯重朴_梨味斋散叶的博主的新浪博客,选用数据集中长度大小为7的对联作为本实验数据。下面将展示实验模型和实验结果。
1、连字成句模型
2、连句成对模型
实验结果:
四、【实验分析】
从实验结果来看,我们模型已经具有能够“成句”的功能了,生成语义语序清晰。但是,通过仔细查阅,本文发现生成语句都是来源于数据集语句,可以说是失败了……(很难过)。仔细分析之下,本文有以下方面的分析。
首先,模型符合分类思想,但是不符合作诗规则。我们的模型本质上还是一个分类模型,实验结果来看我们的模型能够根据数据集正确的进行择字,训练出和训练集完全相同的句子。根据此可以判断出,我们的模型能够捕捉诗词训练集给出的诗词生成规律。但,在作诗词应用上,诗词创作需要的是一个创造过程,需要的是一个新的句子,要求“创新”,因此我这个方法是否得当还值得再考虑一下。
其次,模型的选字方法的问题。本文在选字选择了贪心搜索方式,即选择概率最大的择字方式,因此使得结果单一。
最后,数据集大小问题。由于数据集的选择,可能在一些字的搭配上存在不均匀的现象,使得结果单一。
五、【最后的话】
实验的结果不尽如人意,希望能够得到大家的指点,和大家一起讨论。其中模型的思想和数据构建方法都是基于已有的模型进行改造创建的。其实,除了以上的分析,我开始怀疑自己做的这个模型是否正确,因为在写论文过程中我看到诗词生成的“创作”模型还是存在的,而且参考网上一些文章自动生成模型,“创作”明显成功。我反复地考察了自己的模型构思,还是觉得无误,当然有很多不足,希望能得到大佬的建议啊!!
小魏要继续加油加油再加油!
基于深度学习的春联自动生成系统 实验记录相关推荐
- 基于深度学习的对联自动生成系统
对联自动生成系统 1.项目目标 设计一个基于深度学习的对联生成系统.最终结果可以是一个简单的界面,在界面中,我输入一句上联,通过点击相应按钮,系统生成相应下联并显示出来. 2.国内外相关工作 对联是属 ...
- 热门论文| 基于深度学习的黑色素瘤自动检测系统
论文概述 该论文提出了一种基于深度学习的方法实现黑色素瘤病变的自动检测和分割.该方法包含一种增强的编码-解码网络用于提取特征,该网络通过一系列跳步路径(skip pathway)连接编码子网络 ...
- opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统
教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...
- 一种基于深度学习的增值税发票影像识别系统
一种基于深度学习的增值税发票影像识别系统-专利技术交底书 缩略语和关键术语定义 1.卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构 ...
- 基于深度学习的农作物病虫害识别系统
1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于深度学习的农作物病虫害识别系统. ABSTRACT 及时.准确地诊断植物病害,对于防止农业生产的损失和农产品的损失或减少具有重要作用.为 ...
- 基于深度学习的海洋动物检测系统(Python+YOLOv5+清新界面)
摘要:基于深度学习的海洋动物检测系统使用深度学习技术检测常见海洋动物,识别图片.视频和实时视频中的海洋动物,方便记录.展示和保存结果.本文详细介绍海洋动物检测系统,在介绍算法原理的同时,给出Pytho ...
- 基于深度学习的人脸性别识别系统(含UI界面,Python代码)
摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...
- 【githubdailyshare】微软最近在 GitHub 上开源了一个 AI 音乐项目,基于深度学习,可自动完成音乐创作
微软最近在 GitHub 上开源了一个 AI 音乐项目:Muzic,基于深度学习,可自动完成音乐创作. 创作过程主要分为两步,一是音乐理解(符号分类.声音识别),二是音乐合成(歌曲歌词创作.音乐旋律生 ...
- 基于深度学习的单人步态识别系统
基于深度学习的单人步态识别系统(目前数据集大小15人,准确率100%) 一.数据预处理 a.步态轮廓图 b.头部轮廓图 实现方式: 核心代码: c.骨架图 二.提取步态特征 a.角度特征 b.下肢特征 ...
最新文章
- Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)
- C# SQLiteHelper
- 姚班大神陈立杰最新动向:MIT毕业后将进入诺奖摇篮,成为UC伯克利Miller研究员...
- 2013-10-31 《October 31st, 2013》
- Atitit.论垃圾文件的识别与清理 文档类型垃圾文件 与api概要设计pa6.doc
- Leetcode: Multiply Strings
- Android开发之Android studio自动签名打包release 版本的正确姿势(完整版) | 文末尾附有Google官方签名教程
- quartz获取开始结束时间_Springboot集成quartz
- 英特尔核显自定义分辨率_让免费的核显更好用!英特尔酷睿集成的GPU如何优化?...
- php js对话框,JavaScript_js弹出框、对话框、提示框、弹窗实现方法总结(推荐),一、JS的三种最常见的对话框- phpStudy...
- python标准库math用法精要
- python去除图像光照不均匀_【转载】光照不均匀图像分割技巧
- 不同浏览器的url长度限制
- 软件工程需求分析-需求规格说明书
- C语言期末考试知识点
- 千呼万唤始出来的IDEA笔记插件mdNote
- Jmeter 修改背景色和字体
- java 发送html格式邮件 样式混乱解决
- Android项目解耦--路由框架ARouter的使用
- AX2012小问题总结
热门文章
- 训练AI玩贪吃蛇(强化学习与Q-learning)
- 【Hexo】GitHub_Page绑定阿里云域名
- 【李宏毅深度强化学习笔记】3、Q-learning(Basic Idea)
- mysql中如何幂次方的函数_幂次方的四种快速取法(不使用pow函数)
- Xcode10使用PDF图标的方法
- 看融合数学教学的steam教育模式
- 什么是“批判性思维”?
- 基于springboot的中小型医院门诊药品药库缴费网站(mysql)-JAVA.VUE【计算机毕设、网页开发、论文、源码、开题报告】
- 华测RTK参数/华测GPS/华测RTK/华测RTK什么型号信号好
- mac php 编译安装,苹果Mac OS X 下编译安装php