撩一撩作诗机器人

撩一撩作诗机器人作诗姬 这个 姬 的叫法应该是从那部著名的烧脑电影 机械姬 中延伸过来的 下图是 机械姬 这部电影的海报 虽然当时有不少看过这部剧的朋友跟我说看完后整个人都不好了 感觉世界有一天会被机器人玩坏 但我一直很乐观 我觉得这一天 估计我的有生之年看不到 好了 开个小玩笑我们来看作诗姬究竟是个什么玩意儿 作诗机器人作为一个玩具也好一个科学研究的领域课题也罢 很早就有人开始研究了 就但从数学模型角度来说

作诗姬——这个“姬”的叫法应该是从那部著名的烧脑电影《机械姬》中延伸过来的。下图是《机械姬》这部电影的海报,虽然当时有不少看过这部剧的朋友跟我说看完后整个人都不好了,感觉世界有一天会被机器人玩坏,但我一直很乐观,我觉得这一天……估计我的有生之年看不到。好了,开个小玩笑我们来看作诗姬究竟是个什么玩意儿。

图片描述

作诗机器人作为一个玩具也好一个科学研究的领域课题也罢,很早就有人开始研究了。就但从数学模型角度来说,作诗姬应该属于隐马尔可夫模型的变种。

图片描述

用隐马尔可夫模型生成字的时候,选择概率较大的字出现的目的是为了让语句更为通畅,因为两个字有较大概率紧邻出现的话大多是因为它们是一个词,或者在单字词盛行的古诗文中至少是词组或者常用短语。例如“红颜”、“春光”、“山河”、“相送”等。而概率小的邻接字含义很可能表示的是这两个字从来没有前后脚出现过,或者偶尔出现过那么一两次还是一个属于前面的词尾一个属于后面的词头的情况,那如果采用的话自然是狗屁不通。

图片描述

光是用隐马尔可夫模型去统计还是不够的,要生成一个有一定“含义”的诗文是需要有一定的意境和惯用词汇的。为此,有这样一本书作为辞典备用,叫做《诗学含英》,不过别找了京东上没有,这么偏门小众的书求助万能的淘宝吧。由于在五绝和七绝这样的诗律中是讲究押韵和平仄工整的,所以第二三四句实际上是根据第一句来生成的,它们的生成要在规则上与第一句呼应。那么就要先重点生成第一句,再一句一句按照规则去生成其余的句子。

图片描述

先给定一些Keywords,也就是关键词,作为这首诗的梗概、要义、主题,再到《诗学含英》中去寻找相关语汇。这样会找到一些备选词(Candidate lines),根据这些词汇生成所有可能的排列,并且挑选一个最为合适的充当第一句。就是满足下面的这个等式最大化。

图片描述

看上去又挺吓人,其实又是那个的连乘形式,是一系列概率的连乘形式,最大化的意思就是这些挑出来的备选词在我们统计的隐马尔可夫模型里究竟是怎么排列最顺溜,也就是一句话组成的最大似然度的白话解释。

图片描述

下面要出场的是这么个听着很高科技其实内容很普通的东西,一个叫CSM(Convolutional Sentence Model,卷积句子模型),一个叫RCM(Recurrent Context Model,卷积内容模型),还有一个叫RGM(Recurrent Generation Model,循环生成模型)。

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

由于内容片段都是从《诗学含英》中挑选出来的,又经过了若干次调整顺溜的过程,这样生成的内容就会相对比较通顺。这里还是有一些不好克服的问题,比如平仄和韵律。平仄就不用说了,把平仄规则做进去的话,就需要建立相应的限制条件,在生成的语句中进行过滤,只留下那些符合的,当然后果就是可能那些尚且通顺的句子被滤掉了,却留下了一些不大通顺的例子;而韵律方面也是做了一个Trick——就是只让二、四两句押韵,在生成的过程中会生成不止一个第二句,不止一个第四句,让它们充当候选集,然后过滤掉那些不押韵的而只输出押韵的。

图片描述

这篇论文的位置在:http://aclweb.org/anthology/D/D14/D14-1074.pdf,也有对应的代码,位置在:https://github.com/XingxingZhang/rnnpg。比较遗憾的是这套代码不是TensorFlow的,代码里有C++,有Java,有Python,混搭得很齐全,你会觉得前面谈了这么多RNN相关的理论概念然后突然在这里用了一个“假网络”。嗯,好吧,如果大家觉得它做得还比较LOW的话(事实上我也觉得它做得确实比较LOW),那么就试着自己把它改成一个TensorFlow版本的玩玩吧。大家请注意,这个工程是需要下载一个叫做MISC.tar.bz2的文件的,这里有所有的平仄和韵脚的相关文字,用来做过滤用的。

网上现在也有一些其他的产品可以生成类似的结果,比如稻香居作诗机,虽然笔者不确定它百分之百是使用RNN抑或其变种来制作的。当然,作诗机本来也可以不用RNN来做,就用基于统计的隐马尔可夫模型加“查字典”过滤的方式一样能够生成。

图片描述

图片描述

如果你在想给妹子写个有她名字的藏头诗而搜肠刮肚难以思考的时候,估计它……嗯,也帮不上什么忙,你需要重新写一个有藏头功能的作诗姬。反正算法的本质在基本理解之后,自由发挥的空间就有了。

图片描述

我想可能你也发现了,这些诗文虽然听起来文绉绉的,而且用词比较雅致。但是叙事的连贯性、意境这些东西跟人作的诗还是远没法比。所以,这些东西当做玩具应该还是比较称职的,真的指望它帮你搞定妹子……嗯,后果自负吧。所以我们还是撩机器人吧……

推荐图书:

白话深度学习与Tensorflow ISBN:978-7-111-57457-6 作者:高扬 定价:69.00元 技术畅销书《白话大数据与机器学习》姊妹篇。以插图、类比和大量示例趣说深度学习网络的关键理念、算法与TensoeFlow实践,涵盖BP网络、CNN、RNN、深度残差网络、受限玻尔兹曼机、强化学习、对抗学习,以及多个有趣应用。YY大数据专家撰写,李学凌、朱频频、王庆法、王海龙联袂推荐。 

图片描述

另外CSDN公众号(ID:csdnnews)还提供此本书籍的赠书,欢迎前往参与。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220454.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:26
下一篇 2026年3月17日 下午8:27


相关推荐

  • 大数据——Impala工具使用

    大数据——Impala工具使用一 Impala 概述 Impala 是 Cloudera 公司推出 提供对 HDFS Hbase 数据的高性能 低延迟的交互式 SQL 查询功能 基于 Hive 使用内存计算 兼顾数据仓库 具有实时 批处理 多并发等优点与 ApacheHive 有相同的元数据 SQL 语法 ODBC 驱动 用户界面 能直接对存储在 HDFS 和 HBase 中的数据提供快速 交互式 SQL 查询是 CDH 平台首选的 PB 级大数据实时查询分析引擎二 Impala 优点熟悉的 SQL 接口 能够在 ApacheHadoop 中查询大量数据 集群环境

    2026年3月17日
    2
  • mysql 添加索引 mysql 如何创建索引

    mysql 添加索引 mysql 如何创建索引1.添加PRIMARYKEY(主键索引)mysql>ALTERTABLE`table_name`ADDPRIMARYKEY(`column`)例:altertableyx_marketing_detailsaddindex(id);2.添加UNIQUE(唯一索引)mysql>ALTERTABLE`table_name`ADDUNIQUE(`column`)3.添加INDEX(普通索引)mysql>ALTERTABLE…

    2022年6月2日
    33
  • PHP 函数之 call_user_func & call_user_func_array[通俗易懂]

    PHP 函数之 call_user_func & call_user_func_array

    2022年2月5日
    49
  • 批处理简单教程

    批处理简单教程bat处理

    2022年8月22日
    13
  • java对象的上转型对象_0基础前端和后端哪个难学

    java对象的上转型对象_0基础前端和后端哪个难学JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON语法规则在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数…

    2026年1月18日
    6
  • 【java实现网址转换为二维码】「建议收藏」

    【java实现网址转换为二维码】「建议收藏」我们可以实现图片二维码转换为网址,或者将网址转换为伪二维码(与普通二维码有区别,因为没有定位点,转换成的二维码只包含信息)。

    2025年8月27日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号