我有大约7M个字符的大型文本语料库,我正在训练LSTM网络。然而,我一直看到,在大约第五个时代之后,而不是生成的句子改进,他们变得完全垃圾。我在下面粘贴了一个例子:
Generating with seed: "n who is in possession of the biggest ro"
n who is in possession of the biggest ro to tato ton ant an to o
ona toon t o o taon an s to ao t tan t tout att tj ton an o t an $
我也尝试过不同的温度。上面粘贴的例子是最保守的。这是另一代人:
Generating with seed: 'to sin, and most of the known world is n'
to sin, and most of the known world is na ararea t tarre a araa arae
tor tae a a aaa aaata ater tje aea arare ar araererrt tmaear araae
为了调试,我最终复制粘贴LSTM example from keras并在我的语料库上训练它。再次,在迭代5周围,它开始生成垃圾。
有关如何调试此内容的任何想法或可能会签名的内容?它从更加连贯的预测开始,但突然下降。
答案 0 :(得分:1)
通常,5个时代通常为时尚早,无法得出结论。 RNN可以生成看起来不像垃圾的文本,尽管它还没有学到任何东西。因此,如果采样文本在每次迭代时明显降低,您应该开始担心,否则只需让它学习。
当发生这种情况时,首先要检查的是概率分布如何随时间演变。例如,此示例
a ararea t tarre a araa arae
tor tae a a aaa aaata ater tje aea arare ar araererrt tmaear araae
...清楚地表明a
概率太高。我不认为你的训练数据中有很多aa
次重复,所以后续aaata
应该是非常不可能的。要检查这一点,请打印最大概率分数以及它对应的字符(分发摘要也会这样做)。如果你看到这种可能性提高,那几乎肯定是问题。
这可能有多种原因,从数据处理或输入管道错误开始,到网络布线错误结束。例如,我看到的一个特定错误与索引0
有关,它对应于未知的字符或填充,但实际上LSTM将其视为有效字符。由于它们很多,网络才知道这一点,因此其概率上升了。