您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    我们剖析了超过50万首诗歌,教你用代码写诗(附代码)
    时间:2018-03-09 12:04 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    沙龙活动 | 3月31日 京东、微博实战专家与你共同讨论容器技术实际!

    代码即诗歌。这是WordPress软件的哲学。

    作为一位顺序员和诗人,我不断很喜欢这句话。我决议换种方式思索这句话。

    我想问,我能用代码写诗吗?我可不可以做一个可以写出原创诗歌的机器人?为了找出办法,我做了一个实验。

    首先,我知道假设我的机器人想写诗,首先要让它读诗。2017年,许多作者用WordPress宣布了超过50万个标签为诗歌的帖子。我联络了一些写了许多诗的诗人,并问他们能否情愿和我一同停止一个幽默的实验:他们能否允许我的机器人读他们的作品,让它可以从中学习出诗歌的方式和结构,从而能够学会本人写诗?特别感谢这些为了迷信而协作的很棒的作家们!

    边缘之O - Robert Okaji

    沃尔夫的诗 - Linda J. Wolff

    诗歌,散文与散步 - Frank Hubeny

    生命的视角,宇宙和万物 - Aurangzeb Bozdar

    什么是LSTM,它如何生成文本?

    我运用一种名为LSTM的神经网络创立我的机器人,它也叫作长短期记忆网络。神经网络运用“层”将成绩分解为许多小成绩。

    举个例子,假定你正在训练一个可以辨认正方形的神经网络。能够一个层担任辨认直角,另一个层担任辨认平行边。它们同时存在时图像才是正方形。神经网络经过训练数百万张正方形图像,从中学习到这些层。它可以学习到图像中的哪些方面关于辨认正方形是重要的,哪些是不重要的。

    如今假定你用一个神经网络预测这个序列的下一个字母:

    th_

    作为一个普通人,这个义务真是太复杂了。你会猜e,我打赌,假设你会说英文,你一定不会猜q。由于你知道在英文中th前面不会接q。前面的字母和预测的接上去的字母关联性十分强。LSTM可以“记住”以前的形状并以此作出以后的决议。假设想深化了解LSTM是如何任务的,可以查看这个很赞的帖子,作者是谷歌大脑的Chris Olah。

    与许多用LSTM生成文本的例子相反,机器人生成文本时每一时辰生成一个字符。想要把单词聚集成有意义的诗句,首先它要学会如何产生单词。为了到达这个目的,它需求数百万个包含有效单词的序列例子。有一件坏事就是:WordPress有很多诗歌!

    预备数据集

    我从下面的链接中取得了一切的诗歌。我运用一个很复杂的规则,经过判别每个字符\n对应多少个单词判别文天分否是诗歌。假设文本有许多单词但字符\n很少,它能够是一段或多段文字的集合。相反地,假设异样的文本有许多行,那么它是诗歌的能够性更大。

    当然,这是一个很复杂的办法,我能想出来很多好诗并不契合这样的测试办法!但为了这个实验的目的,我特别感兴味的是LSTM能否可以学习出如断行和节拍等结构特点,以及诗歌中包含的押韵、谐音、头韵等特点。所以,把训练数据限制在有结构的诗歌中是有道理的。

    假设一段文本被判别为一首诗,我把它写到一个文件中,用++++\n作为前缀,表示一首古诗歌的末尾。最终取得了500KB的训练数据。通常,我尝试训练LSTM时都要用至少1MB的数据集,因此我需求寻觅更多的诗歌!我在去年宣布的标签为诗歌的公共帖子中随机选择样本作为特征诗人的补充。假设你在WordPress中点击过诗歌这一标签,你能够会发现你对它们很熟习。我在每一个作者中选择一个帖子作为诗歌。

    训练LSTM网络

    当我取得1MB的诗歌时,我末尾树立LSTM网络。我运用Python中的keras工具树立神经网络,keras的GitHub中有许多例子,可以协助你学习运用几种不同类型的神经网络,其中有一个例子就是运用LSTM生成文本。我在这个例子后贴出了我的代码,并末尾尝试不同的模型配置。模型的目的是生成原始的诗歌。在这个例子中,过拟合--将训练数据学习得太好以致于模型无法概括数据的特点--会使生成的文本和输入文本十分相似。(这就像抄袭一样,没有诗人喜欢这样!)避免过拟合的一种方式是在网络中添加dropout。它迫使在每一步骤中有随机权重下降到0。这有点像强迫网络“遗忘”一些它刚刚学到的东西。(为了避免诗人的作品没有被机器人复制,我添加了额外的前期反省。)

    我运用FloydHub的GPU完成训练我的网络这一繁重任务。这使我可以用比我的笔记本电脑快10倍的速度训练我的网络。我的第一个网络运用一个LSTM层,前面接入一个dropout层。这真的产生了像诗歌的文本!它有断行和阕,简直一切的字符组合都是真正的单词。有时整句话稍微分歧,理想上,第一个迭代后产生了这句如宝石般精彩的话:

    我们剖析了超过50万首诗歌,教你用代码写诗(附代码)

    添加LSTM层,在每一层中实验dropout的参数,直到最终取得了下面的模型。最终选择运用3个LSTM层,由于再添加层数会让训练时间变得不合理,而且3层的结果曾经很不错了。

    model = Sequential()  

    model.add(LSTM(300, input_shape=(maxlen, len(chars)), return_sequences=True, dropout=  

    20, recurrent_dropout=.20))  

    model.add(LSTM(300, return_sequences=True, dropout=.20, recurrent_dropout=.20))  

    model.add(LSTM(300, dropout=.20, recurrent_dropout=.20))  

    model.add(Dropout(.20))  

    model.add(Dense(len(chars)))  

    model.add(Activation('softmax'))  

    model.compile(loss='categorical_crossentropy', optimizer='adam'

    (责任编辑:admin)