尝试用char-RNN生成古诗,本来是想要尝试用来生成广告文案的,测试一波生成古诗的效果。嘛,虽然我对业务兴趣不大,不过这个模型居然把我硬盘跑挂了,也是醉。
其实Char-RNN来生成文本的逻辑非常简单,就是一个字一个字放进去,让RNN开始学,按照前面的字预测下面的字。所以就要想办法把文本揉成我们需要的格式。
比如说,我们现在有一句诗“床前明月光,疑是地上霜”。那么我们的输入就是“床前明月光”,那么我们的预测就是“前明月光,”,其实就是错位一位。
然后我们要考虑的是如何批量的把数据喂进去,这里参考了gluon的教程上面的一个操作,因为诗歌是有上下文联系的,如果我们用随机选取的话,很可能就会丢掉很多有用的信息,所以我们还要想办法将诗歌的这种连续性保留下来。
mxnet教程的方法是先将所有的文本串成一行。所有的换行符替换为空格,所以空格在这里起到了分段的作用,空格也就有了意义。然后我们因为我们要批量训练,所以先按照我们每批打算训练多少行文本,将这一个超长的文本截断成这样,然后按照我们一次想看多少个字的窗口扫描过去。代码实现上如下: 1
2
3
4
5
6
7
8
9
10
11
12def data_iter_consecutive(corpus_indices, batch_size, num_steps):
corpus_indices = torch.tensor(corpus_indices)
data_len = len(corpus_indic