NLP第11课:动手实战基于 LSTM 轻松生成各种古诗 | 您所在的位置:网站首页 › 如何用c语言输出一首诗 › NLP第11课:动手实战基于 LSTM 轻松生成各种古诗 |
目前循环神经网络(RNN)已经广泛用于自然语言处理中,可以处理大量的序列数据,可以说是最强大的神经网络模型之一。人们已经给 RNN 找到了越来越多的事情做,比如画画和写诗,微软的小冰都已经出版了一本诗集了。 而其实训练一个能写诗的神经网络并不难,下面我们就介绍如何简单快捷地建立一个会写诗的网络模型。 本次开发环境如下: Python 3.6Keras 环境Jupyter Notebook整个过程分为以下步骤完成: 语料准备语料预处理模型参数配置构建模型训练模型模型作诗绘制模型网络结构图下面一步步来构建和训练一个会写诗的模型。 第一,语料准备。一共四万多首古诗,每行一首诗,标题在预处理的时候已经去掉了。 第二,文件预处理。首先,机器并不懂每个中文汉字代表的是什么,所以要将文字转换为机器能理解的形式,这里我们采用 One-Hot 的形式,这样诗句中的每个字都能用向量来表示,下面定义函数 preprocess_file() 来处理。 puncs = [']', '[', '(', ')', '{', '}', ':', '《', '》'] def preprocess_file(Config): # 语料文本内容 files_content = '' with open(Config.poetry_file, 'r', encoding='utf-8') as f: for line in f: # 每行的末尾加上"]"符号代表一首诗结束 for char in puncs: line = line.replace(char, "") files_content += line.strip() + "]" words = sorted(list(files_content)) words.remove(']') counted_words = {} for word in words: if word in counted_words: counted_words[word] += 1 else: counted_words[word] = 1 # 去掉低频的字 erase = [] for key in counted_words: if counted_words[key]训练过程中的第9-10轮迭代: 虽然训练过程写出的诗句不怎么能看得懂,但是可以看到模型从一开始标点符号都不会用 ,到最后写出了有一点点模样的诗句,能看到模型变得越来越聪明了。 第六,模型作诗,模型迭代10次之后的测试,首先输入几个字,模型根据输入的提示,做出诗句。 text = input("text:") sentence = model.predict(text) print(sentence)比如输入:小雨,模型做出的诗句为: 输入:text:小雨 结果:小妃侯里守。雨封即客寥。俘剪舟过槽。傲老槟冬绛。 第七,绘制网络结构图。 模型结构绘图,采用 Keras自带的功能实现: plot_model(model.model, to_file='model.png')得到的模型结构图如下: 本节使用 LSTM 的变形 GRU 训练出一个能作诗的模型,当然大家可以替换训练语料为歌词或者小说,让机器人自动创作不同风格的歌曲或者小说。 参考文献以及推荐阅读: 基于 Keras 和 LSTM 的文本生成如果你有疑问欢迎加微信咨询: https://u.wechat.com/MDHWBbNbJRv36gtFwfExkEo (二维码自动识别) 也可以关注我的公众号想我提问: http://weixin.qq.com/r/EEzl-dLE5Y_arZae9xkC (二维码自动识别) |
CopyRight 2018-2019 实验室设备网 版权所有 |