打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
机器是如何作出诗的?作诗机算法剖析。

前言:


我们先看四首诗,这里面,两首是唐诗人元稹的作品,两首是作诗机的作品。你能看得出来吗?


七绝《清明》

对镜空嗟白发新,微吟还唤梦中人。

登楼入望青山旧,隔断红尘二十春。


五律《清明》

清明来向晚,山渌正光华。

杨柳先飞絮,梧桐续放花。

鴽声知化鼠,虹影指天涯。

已识风云意,宁愁雨谷赊。


七绝《寒食》

今年寒食好风流,此日一家同出游。

碧水青山无限思,莫将心道是涪州。


五律《寒食》

伤心曾失所,君子欲何归?

瑶草诚难补,黄花孰可依。

愁侵灯自照,老去叶初飞。

世事同为客,青山对拂衣。


  • 笔者在17年前(2000年)在自己的个人网站上用“稻香老农”的网名发布了第一代算法的作诗机产品,是国内第一款机器合成诗词的软件,至今已经被使用超过2亿次。

  • 2017年初,采用第二代算法的作诗机发布在公众号“作诗机”上。上面四首中的其中两首,就是采用第二代算法机器直接输入题目进行机器合成的。

  • 公众号“作诗机”有两个功能板块:

        1、超级词汇:提供字、词汇的各种属性、关联查询。

        2、智能创作:自动作诗,填词。

  • 使用第三代算法的软件正在调试,预计年内发布。


我这里尽可能用最通俗的语言剖析一下作诗机的第二代算法。网上时常见到一些大学、科研机构研究的机器合成算法,遗传算法、精英策略、轮盘赌算法等等……写得很深奥,其实说白了,都差不多一个意思。


机器作诗的三个步骤

总的来说,二代算法的作诗机写一首诗,经历了三个步骤:

  • 第一步、事先让机器学习约50万首律诗和绝句,形成几个能表现“题目”,“句子”和“词汇”三者关系的数据库。

  • 第二步、根据题目,用和题目相关的词汇形成每个句子的第一个词汇,然后再形成每个句子,然后机器先合成出一首原型诗。

  • 第三步、即时根据格律要求、词汇间关系的紧密程度,优化原型诗,直到符合格律或达到设定的优化次数,最后输出。


壹、步骤一:机器学习了什么?


举个例子,机器学习李白的《望庐山瀑布》:


日照香炉生紫烟,遥看瀑布挂前川。

飞流直下三千尺,疑是银河落九天。


1、首先是分词(把句子分割成词汇),一个是题目需要分词,一个内容需要分词。


(1)题目通过算法可以分为:望/庐山/瀑布。其中庐山和瀑布都是专用名词。机器会认为这首的主题有可能是“庐山”或者“瀑布”。

但到底是“庐山”还是“瀑布”呢?这又是另外一个预先就要先计算好的课题:

我们可以把这首诗里的词汇取出来,再去匹配其他诗词,如果发现在一定的适配度下,以哪个词为题的诗词更多,我们就会认为这首诗的主题哪个词。(当然,通过计算,我们的结果是:这首诗的主题是“瀑布”而不是“庐山”)。


(2)然后就是内容分词,诗内容很容易,就2-2-2-1或2-2-1-2不外乎这两种。


Tips:词如何分词?词的分词则麻烦一些,词有几十个词牌有领字(也叫一字逗、一字领),可以先根据词谱来分词。然后再用常规的分词技术,常见有领字的词牌有《沁园春》等三十几个词牌(见文末的附录)。


例诗内容分词后的效果:


日照/香炉/生/紫烟,遥看/瀑布/挂/前川。

飞流/直下/三千/尺,疑是/银河/落/九天。


2、分词完,我们要形成三种数据:

  • 推荐词数据库:词汇之间前后关系的数据库。

  • 共现词库:能表现题目和词汇关系的数据库。

  • 对词库:对仗词数据库。


(1)推荐词数据库:把几十万首诗过一遍,去掉重复的,我们会得到大约120万组“前后推荐词”,什么叫“推荐词”?

这一首里:“日照”是“香炉”的前推荐词。“香炉”则是“日照”的后推荐词。推荐词数据库不只预示词汇间的前后关系,更重要的是,预示词汇间“有没有关系”。如果有很多诗词句子里都有日照和香炉,不管先后,我们可以理解为日照和香炉“很有关系”,由于古诗词的特殊性,大多数词汇前后关系不重要,可以互为推荐词。


(2)共现词库:什么叫共现词?

在一种主题的中,共同出现的词汇。

李白这首《望庐山瀑布》,题目我们通过机器分词,然后用词性筛选,我们得到主题:“瀑布”。

我们已经事先通过另一个机器学习程序,把数十万首诗词做了分类,比如瀑布,我们得到大约有三四百首以瀑布为主题的诗词。这几百首诗里经常共同出现的词汇,我把他它们叫共现词。

比如经常在瀑布这个主题里出现的词汇(共现词)大致是:峰前、银河、飞泉、清谷、壁山、烟霞……

体会下,这些词汇是不是和“瀑布”关系密切?

 

(3)对仗词库:我们知道律诗中间两联需要对仗,所以,机器在学习形成前两个库的同时,从中间两联同时获得了对词,大约得到100万组不重复的对词。

对词哪个对子重复最多,猜猜?居然是“天上”对“人间”,北京那家夜总会起名字人莫非研究过?


Tips:对仗词只是诗里有吗?不是,不少词里也有。有些词牌某两句会推荐使用对仗句(如《浣溪沙》),或者某个一字逗后面推荐使用几组对仗句(如《满江红》)。

词里的对仗句也出了很多名句,如“无可奈何花落去,似曾相识燕归来。”,又如“自在飞花轻似梦,无边丝雨细如愁。”

推荐使用对仗的词牌有十几个,见文后附录。我不知道这里用“词牌推荐使用”是否合适,也可能是某人用对仗出了名句,大家就跟着学了,而后就成了惯例。


有一点提醒,从词里获得的对仗词,往往无法用在诗里面。因为律诗里获得的对仗词,平仄也是相对的,而词里则未必,因为词诗根据词谱填的。


3、这三个数据库都可以使用超级词汇工具查询:

以瀑布为例:

这里,“走得近”的词就是我上面说的共现词。


贰、步骤二:根据题目机器合成出一首原型诗。


这个里有三个问题要解决:

  • 怎么根据题目获取和题目相关的词汇。

  • 怎么根据词汇形成句子。

  • 律诗怎么处理。


1、从用户的题目获取词汇:从上面的共现词库获取。

如上面说到的“瀑布”,我们已经从三四百首瀑布里获得了瀑布的共现词:

瀑布:飞流、银河、飞泉、清谷、壁山、烟霞……

仔细看看,是否这些词汇放在写“瀑布”的诗里意思还是合适的?


  • 这里我们选四个分配给四个句子。每个句子就有了一个共现词。


2、如何让词汇形成句子:从前后推荐词库里获得,我还还是以瀑布为例:

 

在公众号超级词汇里,查找瀑布,我们看到:

荷花的前推荐词为:千寻、奔腾、倒悬、飞来、窗前……

荷花的后推荐词为:半空落、出空微、穿危石、挂峰头、飞晴雨……


这个时候,哪怕闭上眼睛,随便把“前推荐词” “瀑布” “后推荐词”,一组合,都是连贯的句子:


  • 千寻瀑布半空落

  • 飞来瀑布出空微

  • 倒悬瀑布挂峰头

  • 窗前瀑布飞晴雨


3、律诗的合成。绝句中间加上两联,就是律诗,分别用对词库。


Tips:其实,在我的软件里,不管你选择什么体裁,软件都是写一首七言律诗,然后裁剪成你要体裁。


  • 五律:七律砍掉前两字,就是五律。

  • 七绝:“绝”本来就是“截”的意思,七律砍掉任意连续的两联就是七绝。

  • 五绝:七绝砍掉前两字,就是五绝。


4、到了这一步结束,我们已经把词汇都填进去了:


  • 通过用户的题目,为每一句分配了一个共现词。(这也确定了整首诗的大致意思)

  • 把每一句的共现词,用“前推荐词” 共现词 “后推荐词”已经写好了句子。(这里确保了每个句子的连贯性)


只是:平仄还没有考虑,押韵还没有考虑。后面第三步会说明如何交叉、优化和收敛到符合格律、符合押韵。


Tips:诗的平仄还好,就平仄。词就麻烦很多,不少地方不止是要求仄,还要求是仄里的去声或者入声。

正如李清照在《词论》中提出“盖诗文分平侧,而歌词分五音,又分五声,又分六律,又分清浊轻重。”

但从技术的角度来说,由于作诗机诗按平水韵,平水韵有106个韵部(特别是有些窄韵、险韵和哑韵,可选词汇很少);词按词林正韵,有19个韵部。就从这点来说,诗可选的词汇限制多很多。


叁、最后一个步骤:优化和输出。

  • 这个时候,只要从四个共现词(绝句为例)中,以格律为约束条件,通过交叉和迭代,收敛到同一个韵部就可以了。

  • 交叉、迭代技术性比较强,这里就不详细解释了,总之,目的就是优化。

  • 二代算法为了保证趣味性,比如每次都要形成不同的诗词,不能优化到最佳值,否则最佳值只有一个,那就没有趣味性了。二代算法只优化到符合格律(平仄、押韵)为止,把更多的选择用候选句的形式提供给使用者。

  • 理论上,给机器足够的时间进行足够的交叉迭代,机器是可以写出很中规中矩的诗词来的。


Tips:词的自动生成:

词除了平仄押韵外,还有一些特殊的格式。仅叠句就很多,举一些名句:

叠一字的如:陆游《钗头凤》“一怀愁绪,几年离索。错!错!错!”

叠两字的如:李清照《如梦令》“争渡,争渡,惊奇一滩鸥鹭。”

叠三字的如:李白《忆秦娥》“秦娥梦断秦楼月。秦楼月,”

叠四字的如:辛弃疾《丑奴儿》:“爱上层楼。爱上层楼,”

叠五字的如:辛弃疾《东坡引》:“罗衣宽一半,罗衣宽一半”

叠六字的如:贺铸《琴调相思引》“动管色,催行色;动管色,催行色;”


最为特殊的,当属《调笑令》(也叫古调笑、宫中调笑、调啸词、转应曲)。


我们看一个唐诗人戴叔伦的《转应曲》:


边草,边草,(仄韵一)

边草尽来兵老。(仄韵一)

山南山北雪晴。(转平韵)

千里万里月明。(平韵)

明月,明月,(前句最后两个字反转)(反转后转仄韵二)

胡笳一声愁绝(仄韵二)


说明:“明月”处是将上句的最后两个字“月明”翻转二来。最后一句则和翻转后的“月“押韵。所以,这首词短短几句,有三个韵。


肆、效果测试:

只需输入标题,比如我们输入“天涯”:

 


七绝《天涯》作诗机

千里迢迢返故庐,平生寂寞故人疏。

江山不见莺花老,落日相逢岁又除。


Tips:作诗机的作品,点击其中一句,候选句会提供无穷无尽的同一个格律的候选句。每次点击出10句,总可以挑选到合适的。


伍、三代算法和二代算法:


可以简单这么理解:

  • 二代算法:使用了唐宋诗人数千人大众的基因。

  • 三代算法:让李白娶李清照,取两个“精英”结婚后的基因。


希望届时能给大家带来更大的惊喜。


  • 附录一:含有领字格的词牌:


|沁园春|寿星明|

|水龙吟|龙吟曲|庄椿岁|小楼连苑|

|摸鱼儿|摸鱼子|买陂塘|迈陂塘|双蕖怨|

|齐天乐|台城路|五福降中天|如此江山|

|洞仙歌|

|行香子|

|八声甘州|

|醉太平|

|忆旧游|

|兰陵王|

|二郎神|

|法曲献仙音|

|长亭怨慢|

|绛都春|

|莺啼序|

|金人捧露盘|铜人捧露盘引|上西平|西平曲|

|暗香|红情|

|双双燕|

|望远行|

|酷相思|

|黄莺儿|

|翠楼吟|

|八六子|

|忆少年|十二时|

|眉妩|百宜娇|

|六丑|


  • 附录二:词谱里有推荐使用对仗句子的词牌有


|浣溪沙|摊破浣溪沙|山花子|

|鹧鸪天|思佳客|

|水调歌头|

|沁园春|寿星明|

|西江月|步虚词|江月令|

|踏莎行|转调踏莎行|

|南歌子|南柯子|风蝶令|

|忆江南|望江南|梦江南|江南好|

|望海潮|

|渔歌子|

|金人捧露盘|铜人捧露盘引|上西平|西平曲|

|八六子|


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《怎样才能写好诗》(下)
归来:是拯救,还是颠覆? 作诗机2017微信版公开测试!
诗词格律术语
对仗词汇——对仗查询、创新对语推荐、对语链、对语树、替换词
诗词曲名词术语释
张轩湖:诗的生动表述
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服