原文首发在wx公众号上:

附庸风雅,不如train个模型和古人对诗

生成模型一直是我认为的非常有意思的东西,记得以前同事搞过一个生成藏头诗的模型,可以根据输入的名字来生成藏头诗,当时就感觉非常有趣。

前两天又和朋友聊起来生成模型,朋友说他做了个诗词生成的实验,效果还蛮不错的,于是自己也想实验一下试试。

先来看下生成效果,感觉还不错:

1. 训练语料准备

github上有很多整理好的开源的诗词资源,这里选择了 chinese-poetry 这个开源的库,里面的诗词非常多,足以用作生成模型的训练语料了。

json格式的语料,解析起来很方便。其中部分诗词的内容截图如下:

2. 模型设计

模型就使用经典的 sequence to sequence 模型Bi-LSTM+attention。
模型的结构图如下:

3. 模型训练

loss 可视化展示:

从下降的loss可以看出来模型有在逐渐收敛。

loss降到 31~32之间的时候模型基本收敛了,生成的诗句看起来也比较通顺。

loss之所以会偏高,我理解主要是诗词的自由度比较高,模型生成的句子很难与原句一模一样。另外,我们也并不需要生成和原句一样的模型,更需要的是模型通过对诗词的学习,来进行它自己的创作。

4. 效果展示和分析

训练好模型之后,我们从对仗、平仄、情感三个角度来看看这个AI生成的诗句效果如何。

(1)对仗分析:

对仗又称队仗、排偶。它是把同类或对立概念的词语放在相对应的位置上使之出现相互映衬的状态,使语句更具韵味,增加词语表现力。

比如我们小学的时候就背过的 “天对地,雨对风。大陆对长空”,正是经典的对仗思想。

对仗是诗词的一种常见结构,我们就先来分析一下生成诗句的对仗是否工整:


可以看出,模型可以生成一些对仗工整的下句,有些句子甚至可以说是比较优美的。

(2)平仄分析:

平仄是中国诗词中用字的声调。“平”指平直,“仄”指曲折。
对应到普通话的四声中,我们可以简单理解成,第一声、第二声是平声;第三声、第四声是仄声。
那么我们姑且按照这个规律,简单分析一下生成诗句的平仄是否对应。


可以看出从平仄的角度来说,模型获得的下句有一部分诗句是基本符合平仄规整的,读起来可以也算是朗朗上口。
(平仄分析纯属我百度之后的个人理解,如有不当,欢迎指出)

(3)情感分析:

很多诗词通常都是作者表情达意的工具,因此如果只符合对仗和平仄这两个规律,诗句难免显得没有灵魂,所以我们来看看生成诗句里会不会有一些升华的情感表达。
比如下面几句看起来就照猫画虎地学到了一些神奇的情感:

看起来模型最喜欢回答的就是 “不知道”了。。。

当然啦,也有奇奇怪怪狗屁不通的,比如这些——



所以模型还需要更多的先验知识来帮助学习。

5. 总结

从生成的结果可以看出来,模型可以成功地学习到词语结构上的对仗,甚至可以学习到一些平仄特点,有些生成的下句,细读来甚至有点引人深思的味道。

其实这特点都包含在诗词的文字使用的规律中,只要有规律,模型就可以学习到。

另外,一般像是叙事类的诗词,一整首诗才是一个完整的故事,只看其中上句来对下句,很显然无法生成情节完整情感连贯的故事。

但是仍然可以看到,生成的诗句还是可以给出一些惊喜的,甚至有些句子还能读出一些莫名其妙的哲理来,也是非常有意思。

LSTM+attention 古诗下句生成相关推荐

  1. 基于Attention的自动标题生成

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-46.html Attention原理 在自然语言处理中,最基本 ...

  2. 神经网络学习小记录40——春节到了,用LSTM写古诗不?

    神经网络学习小记录40--春节到了,用LSTM写古诗不? 学习前言 整体实现思路 github下载地址与B站连接 代码实现 1.数据处理 a.读取古诗并转化为id b.将读取到的所有古诗转化为6to1 ...

  3. 使用Tensorflow训练LSTM+Attention中文标题党分类

    这里用Tensorflow中LSTM+Attention模型训练一个中文标题党的分类模型,并最后用Java调用训练好的模型. 数据预处理 首先根据语料和实验数据训练词向量word2vec模型,这个有很 ...

  4. Pytorch+LSTM+Attention 实现 Seq2Seq

    # !/usr/bin/env Python3 # -*- coding: utf-8 -*- # @version: v1.0 # @Author : Meng Li # @contact: 925 ...

  5. 使用深度学习模型创作动漫故事,比较LSTM和GPT2的文本生成方法

    这个项目的动机是想看看在短短的几年时间里NLP领域的技术已经走了多远,特别是当它涉及到生成创造性内容的时候.通过生成动画概要,我探索了两种文本生成技术,首先是使用相对陈旧的LSTM,然后使用经过微调的 ...

  6. awstats CGI模式下动态生成页面缓慢的改进

    本文可以看做是 多server多站点情况下awstats日志分析 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直 ...

  7. Linux下如何生成core dump 文件(解决segment fault段错误的问题)

    Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...

  8. 正常情况下ffmpeg生成moov是在mdat写完成之后写入

    可以分析MP4封装格式的工具比较多除了FFmpeg之外,还有一些常用工具,例如Elecard Stream Eye.MP4BOX.mp4info等:下面简单介绍一下这几款常见工具: 8.1 Eleca ...

  9. python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...

    本文将带你了解软件测试技术之如何用python在Windows系统下,生成UNIX格式文件,希望对大家学测试技术有所帮助 如何用python在Windows系统下,生成UNIX格式文件 平时测试工作中 ...

最新文章

  1. Angular 富文本编辑之路的探索
  2. php中单引号和双引号的区别,哪个速度更快?为什么?
  3. 【Verilog HDL 训练】第 03 天
  4. vs2008安装部署软件过程
  5. hadoop集群中datanode启动几秒钟自动关闭
  6. 【报告分享】2022中国品牌出海模式洞察及趋势情况报告.pdf(附下载链接)
  7. jquery图片预加载+自动等比例缩放插件
  8. IOS: iPhone键盘通知与键盘定制
  9. SHFileOperation 文件夹COPY
  10. 武汉大学计算机网络安全学院,消息︱武汉大学计算机学院(新)与国家网络安全学院正式组建...
  11. 致远OA webmail.do任意文件下载 CNVD-2020-62422
  12. 自己动手实现简易光线追踪算法
  13. 马斯克让位?特斯拉中国一把手被曝将接任全球CEO,内部回应:您觉得是真的吗?...
  14. MacTeX新手学习笔记
  15. Android 引入高德地图 SDK
  16. mysql 5.7 ga_mysql 5.7.9(GA) 安装
  17. BeautifulSoup里“find_all“和“findAll“的区别
  18. AI量化(代码):深度强化学习DRL应用于金融量化
  19. zookeeper--将学习过的知识放置到一个文档中,总结
  20. mysql编码修改utf8_修改数据库mysql字符编码为UTF8

热门文章

  1. 初级Matlab画图经验简单记录以及错误使用plot矢量长度必须相同问题解决
  2. 网络空间安全概论 学习笔记(二)
  3. php base64转中文,汉字转化base64
  4. ubuntu系统ffmpeg录音
  5. Sir Winston Churchill 温斯顿▪丘吉尔爵士
  6. overload,override
  7. 【学习笔记】Dubbo学习_黑马程序员_随记_2023.1.26
  8. 苹果原壁纸高清_动漫头像 | 二次元高清头像
  9. Java 阶乘算法 三种简单实现
  10. 脖子也要减龄,4种颈部保养学起来