1、环境部署
本例依赖Windows 7 x64位系统,基于循环神经网络,使用tensorflow实现。具体环境是python3.6,NUMPY1.13,CUDA9.1,相关安装流程参见实验一以及相关资料。
2、数据准备
训练数据为四万多首古诗,但古诗文件不能够直接使用,需要生成词汇表(有6272个字),并将古诗文件转换成向量。
例如将诗词:
赋得临池柳:岸曲丝阴聚,波移带影疏。还将眉里翠,来就镜中舒。
转化为对应的词向量为:
其中,3表示开始符,4表示终止符,1,表示逗号,2表示句号,其它数字对应汉子或字符。
具体代码如下:
3、定义模型
定义RNN循环神经网络结构。定义了一个RNN深度为2,LSTM隐藏节点个数128的循环神经网络:
HIDDEN_SIZE= 128 # LSTM隐藏节点个数
NUM_LAYERS= 2 # RNN深度
这里使用了自带的函数进行词嵌入进一步缩小输入维度。
另外还定义了对应的交叉熵、前向传播以及后向传播过程
4、设置模型参数
设置训练参数(可调)
VOCAB_SIZE= 6272 #词汇表大小
SHARE_EMD_WITH_SOFTMAX= True #是否在embedding层和softmax层之间共享参数
MAX_GRAD= 5.0 #最大梯度,防止梯度爆炸
LEARN_RATE= 0.0005 #初始学习率
LR_DECAY= 0.92 #学习率衰减
LR_DECAY_STEP= 600 #衰减步数
BATCH_SIZE= 64 # batch大小
CKPT_PATH= 'ckpt/model_ckpt' #模型保存路径
VOCAB_PATH= 'vocab/poetry.vocab' #词表路径
EMB_KEEP= 0.5 # embedding层dropout保留率
RNN_KEEP= 0.5 # lstm层dropout保留率
5、训练模型
使用数据预处理中生成的数据文件训练神经网络。
6、测试生成古诗代码
7、结果演示
7.1生成古诗
当模型训练完成之后,可以尝试生成古诗。输入以下命令可以进行生成,至于质量嘛,凑合吧。
结果示例1:
树阴飞尽水三依,谩自为能厚景奇。
莫怪仙舟欲西望,楚人今此惜春风。
结果示例2:
秦重人陇振西池,笑知将阎酌国相。
衣耿水时忆共云,蜀灵行惊夜子吟。
偶是为能观斗县,得堪宁可是能尘。
得黑杂吹花池雁,可日知人更亦山。
鸡飞相足府难弃,要怜轻鬓远南公。
结果示例3:
岩外前苗点有泉,紫崖烟霭碧芊芊。
似僧月明秋更好,一踪颜事欲犹伤?
7.2生成藏头诗
模型做的比较小,训练数据也不足,在生成藏头诗上的表现不是很好,平仄可能控制的不是太好,可能娱乐性更多一些。
只要将
if__name__ == '__main__':
generate_poem()
改成
if__name__ == '__main__':
generate_acrostic(u'好好学习',7)
然后运行即可。
结果示例:
好古客萧舟,好徐山水巴。学家中北行,习隋林花悲。
好洞阶颜竹,好恋遥霜欹。学稚方军敕,习袅楼檐窗。
好饿丰知月枕上,好波愁遇一阳契。学尘突分习沾树,习清郊定看僧鸾。
好忘月高烟客乡,好来鹤在仍禅江。学高园老下山青,习丑当傍披溪有。
参考资料:
杨森,陆工大软件工程专业硕士研究生,研究方向移动应用测试,希望能将人工智能算法应用到移动应用的自动化测试中,对于软件可靠性分析,深度学习、云计算、建模方法、算法设计等方向都有极大的学习兴趣,曾获得全国大学生数学建模大赛一等奖,云计算大赛二等奖,蓝桥杯程序设计大赛二等奖等。
领取专属 10元无门槛券
私享最新 技术干货