当前位置:   article > 正文

基于图片生成古诗(nlp)_图像生成古诗

图像生成古诗

项目简介:本项目可以通过分析所给的图片,提取其中的关键意向标签,并由关键词生成意境相关的五言绝句。

背景:通过阅读文献,我们了解到图片多分类、以及基于attention的Seq2Seq古诗生成模型已经较为成熟。我们很自然的想到是否可以把二者结合起来,使用分类后的图片标签作为生成古诗的关键词,那么基于图片生成古诗也就相应的实现。

模型和方法:1.图像识别
使用cifar-100数据集进行模型训练,数据集地址:
http://www.cs.toronto.edu/~kriz/cifar.html?usg=alkjrhjqbhw2llxlo8emqns-tbk0at96jq
左边为分类大类,右边为小类图片识别的具体模型采用的是基于CIFAR-100的vgg16架构的Keras模型

共训练250个epoch,在测试集中各个小类的最高正确率在70%左右,但是由于很多小类在古诗意向上没有太大的差别,而大类的正确率有80%多,所以在最后的古诗意向把握上依旧可以取得较好的效果。

模型和方法:2.古诗生成
来源:https://github.com/chinese-poetry/chinese-poetry数据格式为json,为了简化模型,我们挑选其中唐诗与宋诗的一万五千首五言绝句,并且进行了预处理。

预处理:
在处理古诗句数据时,建立一个数据类,里面包含字表(删除了一些生僻字)、字与ID的对应字典。在生成训练集每一个batch的target数据时,仅需把输入的诗句文本向后移一位即可(jieba并不能很好的对古诗进行分词,所以我们最后直接对每个字进行分开处理)

简单的Seq2Seq模型不给定关键字,然后由此生成一首古诗,其在表达相关的意境时往往只取决于给定的字或者词开头,往往意思不清、效果较差。
因此,我们采取了基于attention的S2S模型,在训练时便以关键词为attention进行诗句与关键词和上下文相关性的训练。训练集数据中关键词的提取至关重要。
我们进行字向量的无监督训练,模型采用word2vec(skip-gram,窗口大小为5),训练后意思越相近的字向量的距离越小。

关键词选取——TextRank:
如果一个单词出现在很多单词后面,说明这个单词比较重要
一个TextRank值很高的单词后面跟着一个单词,那么这个单词的TextRank值会相应地提高
用之前训练好的字向量的余弦距离初始化每首诗字与字之间的权重矩阵
迭代公式示例:

关键词:春夜风花

空山闻林

首先,该模型分为encoder与decoder。Encoder与传统S2S不同的是增加了基于关键词的attention,每次训练都会计算关键词的权重,并将该权重与Decoder隐藏层的t时刻状态以及t −1时刻的真实标签作为t 时刻Decoder的输入。将得到的矩阵映射到整个词表上再进行softmax归一化,与真实标签的坐标进行交叉熵求解损失函数。模型架构见下图。生成函数也基于该模型。
基于attention的seq2seq模型押韵:将字表按照韵母分为16类韵,并在生成第1、2、4句诗的最后一个字时对韵脚提取或约束,取生成概率最大且押韵的字。

结果:
海阔天空->虎履谁从东,流水浩海空。维流波济海,飘白出沧溟。
春华秋实->何容荡秋空,飙听三枕宫。春风来无影,同点一歌声。

上述已经介绍了两个模型的结构,在具体实现图片->古诗的任务时,我们建立了一个图片标签集到古诗关键词的对应词典。每次生成时,都会在词典中随机的选取一个关键词拓展为四个字进行古诗生成。由于目前的模型还不够完善,所以总共生成4-5首诗,可以自行选取或者采用评估函数选取得分最高的。

3.网站部署
使用Flask框架搭建简单的网页,在网页前端与后端传递消息:收集用户上传的图片信息、保存并将文件路径传给后端程序,得到程序产生的诗后再传回给网页。
后续将完善网页并发访问,以及使用数据库,解决网页在多用户访问的状态下效率会降低,并且可能会出现数据错误或者长时间无法返回的情况。

最后是实验结果展示:

峯然一弭苔,迢迢夜飞来。曾见树云处,久断岧鹤来。

在这里插入图片描述
花暗通梅织,花开映此时。
无知酒梅红,却闻香外景。

网站:http://poem.boater.cn
在这里插入图片描述对生成古诗的评估——Perplexity(困惑度)
给定一个词序列(句子)S=W1,W2,…,Wk,它的概率可以表示为:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/911979
推荐阅读
相关标签