论文内容

​ 这篇论文介绍了微软小冰从一张图片生成一首现代诗的过程模型。简单来说,这个过程就是给定一个图像,首先从图像中提取几个表示对象和感知到的情感的关键字,然后根据这些关键词与人类诗歌的关联,将它们扩展到相关的新的关键词,接着每个关键词作为每行诗的核心,使用双向语言模型逐步向左右拓展生成整句。这个过程模仿人类由景生情创造诗歌的过程。设计的网络能够很大程度的保证句子之间的流畅性、整体性和与图片的匹配性;使用关键字扩展的机制使得生成的诗歌具有多样性和想象力。

模型简介

​ 生成现代诗比生成古代诗难度更大,因为现代诗的题材限制少,可发挥的空间更大,对想象力和创造力的要求更高。由图片出发生成现代诗的是一个有趣的任务,不同人看一幅画的感受不同,而且对图+诗的感受也是不同。以往许多诗歌创作的方法主要是给定关键字,生成包含或者关键字相关的句子,拼接起来。从图片进行诗歌生成的优点:图片包含丰富的信息,因此发挥想象力的空间更多;对图片的解读因人而异,因此由图片生成的诗歌给人的惊喜或者印象往往更加深刻;对于用户来说,上传一张自己感兴趣的图片远比思考关键词要来的简单。首先从图片中解析出实体和情感词组成关键字集合;然后对关键字集合进行过滤和扩充;最后每一个关键字都被作为一行诗的seed,使用双向的文本生成方法生成整行诗;一个层次网络能够检测出没有通过词间和句子之间流畅度检验的诗句,删除并且重新生成直到通过检验。

模型细节

问题定义

​ 把图片记为queryQquery QqueryQ,目标是生成现代诗P=(l1,l2,...,lN)P=(l_1, l_2, ... ,l_N)P=(l1​,l2​,...,lN​),l_i表示第i行诗,N是最诗歌的行数。对图片进行目标和情感检测,得到若干个关键字,然后进行关键字扩展得到一个关键字的集合K=(k1,k2,...,kN)K=(k_1, k_2, ..., k_N)K=(k1​,k2​,...,kN​),一共由N关键字。对N个关键字分别进行诗句生成,检测未通过词、句流畅性的诗句,重新生成。

关键词生成

​ 分别使用两个CNN检测图像中的目标和情感,这两个CNN结构相同但是参数不同。检测目标的CNN输出名词关键字,检测情感倾向的CNN输出形容词关键字。两个CNN网络在ImageNet上进行预训练并且在相应的下游任务上做fine-tune。论文中使用的CNN网络是Google-Net。

诗句生成

​ 诗句生成过程使用语言模型来预测下一个单词wiw_iwi​,为了让关键字出现在句子中的任意位置,论文使用递归生成的方法.具体的方法是训练一个反向的语言模型,用和分别表示句子的起始符号和结束符号,句子使用关键字k_j做初始化,在和均出现了之后停止句子的生成。交替使用正向和逆向的语言模型生成句子下一个左边和有右边的词汇,直至到达或者。

整合成诗

​ 使用双向语言模型递归生成诗句能够保证词间的流畅性,为了保证句子之间的连贯性,在生成第lll句诗的过程中,论文模型对前l−1l-1l−1句诗句做句子编码作为当前句生成过程的参数。论文还实现了另一种思路:只使用前一句的编码信息来约束当前诗句的生成。诗句生成使用的sentence level LSTM网络和诗句间添加约束的poem level LSTM网络的均包括3层LSTM layer,每一层包含1024个LSTM单元。

关键字的扩展

​ 从图片生成的关键词的选择也是一个值得研究的问题。低可信度的关键词会有损诗句和图像的管理度,低频的关键字会造成生成的诗句质量低下。最好的方法就是选取那些高可信度且与训练集关联度高的关键字,这样做的同时又会出现关键词不足的问题,这时候就需要继进行关键字扩展。论文提出即使有效的关键字数量多于N的情况,关键字扩展也是必要的,这么做能够让诗词创作跳出直接观察到的内容,从某种程度上进行联想。论文对比了三种关键字扩展的方法。

  • 不进行关键字扩展,如果有效关键字少于N,没有的关键字的诗句使用前l句的句子编码信息生成新句子。
  • 使用训练集中高频的词汇进行扩充,论文中使用的是“life”、“time”和“place”。
  • 高共现词汇:比如与“city”和“palce”、“child”、“heart”和“land”,这些词汇。使用高共现词能够在保证前后主题一致性的前提下获得的更好的话题扩展。

流畅性检查

​ 生成诗歌还应该有能够在相同的关键词的情况下生成多样的结果的能力,所以模型使用top n best 的集束搜索。这样做带来的后果就是句子内容的流畅性和一致性有所牺牲。为了解决这个问题,论文对词和句的连续性进行了检验,词方面使用n-gram和skip n-gram来判断词组的正确性和两个词的语义连续性;在语法层面,我们利用词性标注语料库训练了一个基于lstm的语言模型,并将其应用于词性标注候选句的生成概率计算。丢弃没有达到标准的句子,接着重新生成。

实验设置

​ 为了得到不同部件最优的组合方式,论文使用了贪心搜索策略,每一步都选出当前最优的组合方法,下一步再在当前结构上增加新的组件。实验分为两个部分:

  • 关注不同的新词生成方法。论文提出的双向递归生成新词的方法大幅度占优;在此基础上,加入前l句信息的poemlstm的效果明显优于基于前句信息的preline。
  • 关注关键词提取和扩展的质量。质量从生成关键字的相关性、创造性方面由人工进行打分,选择高共现相关方法进行关键词扩展的方法获得最高的评分。

实验结果

​ baseline选择的是Image2caption和CTRIP,Image2captain的任务是进行图片标题生成,CTRIP是一个古诗创作的模型,同样可以通过观察图像生成诗歌。评价方法:同时展示三种模型生成的内容,由人工评委进行打分,区间1-5;指标为:相关性、流畅性、想象力、动人性和给人的印象程度。结果:Image2Caption在相关性上占优,CTRIP和论文模型在其他方面大幅领先Image2Caption,论文模型在imaginative、touching和impressive上效果最好,CTRIP在流畅性上得分最高。

[arxiv 2018] [paper] Image Inspired Poetry Generation in XiaoIce

小冰创作诗歌机制详解相关推荐

  1. PHP autoload机制详解

    PHP autoload机制详解 转载自 jeakccc PHP autoload机制详解 (1) autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个 ...

  2. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  3. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  4. Numpy的广播机制详解(broadcasting)

    Numpy的广播机制详解(broadcasting) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数 ...

  5. Session机制详解及分布式中Session共享解决方案

    Session机制详解及分布式中Session共享解决方案 参考文章: (1)Session机制详解及分布式中Session共享解决方案 (2)https://www.cnblogs.com/jing ...

  6. java异常处理机制详解

    java异常处理机制详解 参考文章: (1)java异常处理机制详解 (2)https://www.cnblogs.com/vaejava/articles/6668809.html 备忘一下.

  7. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

  8. 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...

  9. JAVA之JVM垃圾回收(GC)机制详解

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

最新文章

  1. 计算机视觉方向简介 | 手机产品条码检测方案
  2. 【模板】单源最短路径(弱化版)
  3. oracle数据库教程-张晨光-专题视频课程
  4. 收藏 | 卷积神经网络中10大拍案叫绝的操作!
  5. TensorFlow 学习指南 四、分布式
  6. 推荐系统数据稀疏性问题
  7. 【学习】在Windows10平台使用Docker ToolBox安装docker(一)
  8. Oracle 12.2 ORA-01017问题处理
  9. pc系统安全问题让你防不胜防--安装系统屏保时,偶然发现没有安装的ie工具栏软件baidu_jpwb(Just Under/WINDOWS)!
  10. jsoneditor
  11. GGGIS地图下载器
  12. winNTsetup安装器安装系统教程
  13. 计算机对未来和生活,计算机的发展对人类生活的影响
  14. 第三届中医药文化传承与技能发展大会召开助推中医药文化传承创新
  15. ORACLE 参数 O7_DICTIONARY_ACCESSIBILITY
  16. 磁盘阵列RAID技术超详细解读
  17. 软件与硬件之间的交互流程
  18. 实现BPS组织机构数据权限分离解决方案
  19. 用Matlab绘彩色图像的直方图
  20. 2016计算机网络复习

热门文章

  1. centos8安装之centos8.3 制作U盘启动 避坑指南
  2. Python LeetCode(13.罗马数字转整数)
  3. 浅谈*迭代加深*深度优先搜索
  4. codevs 1227 方格取数2
  5. 长庆企业信息化管理课件_长庆油田信息化建设的现状及需要注意的问题
  6. 平面设计师都在用的素材网站(素材灵感一步到位)
  7. 春季高考计算机基础知识试题答案,春季高考数学真题
  8. springboot配置日志文件报错:
  9. 高中教师计算机面试什么时候,高中信息技术教师资格证备考经验分享(面试篇)...
  10. Idea创建SpringBoot搭建SSM框架项目,支持JSP页面