LSTM 如何训练文本生成?

人工智能 训练 长短期记忆
2021-11-16 12:47:10

我看过一些关于使用 LSTM(或 GRU)进行文本生成的文章。

基本上,您似乎通过将它们折叠起来并在每个输入中输入一个字母来训练它们。但是假设您使用包含字符串的文本对其进行了训练:

“狗追猫”

并且还包括字符串:

“狮子追着ca”

两者都应该可以接受。但是,尽管它们非常相似,但在第 4 个字符之后却完全不同。所以它们会产生两个非常不同的向量。此外,您推出的时间越长,它们的差异就越大。那么 LSTM 怎么可能知道“The [something]chass the cat”是一个可以接受的短语?

同样,如果您训练它尝试并学习配对括号。我可以看到您如何手动设计它来执行此操作,但是如何仅通过输入诸如“(das asdasdas)axd”之类的字符串来训练它来执行此操作呢?

我要说的是,我不明白它如何能学习比马尔可夫模型更多的结构。

有任何想法吗?

(另外,我只看过一篇文章展示了可以配对括号的 LSTM。那么这项研究是否被复制过?)我知道 LSTM 可以做到这一点,但我不明白它是如何做到的学会这样做!

我要说的是,您通常使用输入短语进行训练,然后将其与预期的短语进行比较以获得错误。但是在文本生成中,可能有数百万个可能的可接受的预期短语!那么如何计算误差呢?

1个回答

您以与正常相同的方式计算错误 - 即使其他选项是可能的,也将实际输出视为“基本事实”。LSTM 将输出下一个字符的概率,它不会学习关联单个“真实”输出,除非是极少数情况(例如根据训练数据完成只能以一种方式完成的单词)。在实践中,这意味着在 NLP 训练中理解可接受的损失值与在其他监督学习环境中理解它们是不同的,通常高于从数据中更容易预测基本事实的数据集。

这样,它很像马尔可夫或 n-gram 模型,除了它学习自己的内部状态表示(它们不是由模型规定的,而是受到结构和可用数据的限制)。门控 RNN 记忆模型(如 LSTM 和 GRU)包含一种处理长期记忆的机制,因此可以相对轻松地学习诸如引用、括号对等内容。

我要说的是,我不明白它如何能学习比马尔可夫模型更多的结构。

理论上,马尔可夫模型可以表示 LSTM 可以表示的任何序列知识。区别在于效率。RNN 具有比 HMM 中的显式状态表示更紧凑的内部表示。这使得它们在某些方面更难使用(很难看出 RNN 状态向量代表什么),但这意味着它们可以在更少的内存中存储更复杂的关于状态转换的知识。这也意味着 RNN 可以更容易地泛化(尽管不能保证正确),在没有任何训练历史的全新状态下,它们不会退回到随机行为。