如何使用 LSTM 生成段落

人工智能 深度学习 长短期记忆 序列建模 文本分类 文本生成
2021-11-17 16:06:17

可以训练 LSTM 模型通过输入第一个单词来生成文本序列。在输入第一个单词后,模型会生成一个单词序列(一个句子)。输入第一个词得到第二个词,输入第一个词+第二个词得到第三个词,依此类推。

但是,关于下一句,下一个单词应该是什么事情是生成一个包含多个句子的段落。

2个回答

将 LSTM 生成的句子作为输入反馈给 LSTM。然后 LSTM 将生成下一个句子。所以 LSTM 使用它之前的输出作为输入。这就是使它递归的原因。最初的词只是你的基本情况。此外,您应该考虑通过 Open AI 使用 GPT2 来执行此操作。这是相当令人印象深刻的。https://openai.com/blog/better-language-models/

如您所知,LSTM 语言模型接收过去的单词并尝试预测新单词并继续循环。一个句子被划分为token,根据不同的方法,token的划分也不同。一些模型可能是基于字符的模型,它简单地将每个字符用作输入和输出。在这种情况下,您可以将标点符号视为一个字符并正常运行模型。对于许多系统中常用的基于词的模型,我们将标点符号视为它自己的标记。它通常被称为句尾标记。输出结束还有一个特定的标记。这使系统知道何时完成和停止预测。

此外,正如您所知道的,语言模型试图生成原始文本,它们将输出作为下一个数据点的输入,但他们选择的输出不一定是准确度最高的输出。他们设定了一个门槛并以此为基础进行选择。它可以为语言模型引入多样性,因此即使凝视词相同,句子/段落也会一次又一次地不同而不相同。

对于一些最先进的模型,您可以尝试@jdleoj23 提到的 GPT-2。这是一个基于字符(实际上是基于字节但基本相同,它单独处理每个 unicode 符号)的模型,它使用了注意力和转换器。基于字符的系统的优点是即使有拼写错误的输入也可以输入到模型中,并且可以引入字典中没有的新词。

但是,如果您想更多地了解语言模型的工作原理,而不仅仅是争取最佳性能,您应该尝试自己实现一个简单的模型。您可以尝试阅读这篇使用 keras 制作语言模型的文章。 https://machinelearningmastery.com/develop-word-based-neural-language-models-python-keras/

做一个简单的好处是你可以真正了解编码过程,标记化过程,底层模型等,而不是依赖别人的代码。本文使用 keras Tokenizer,但您可以尝试使用正则表达式和简单的字符串处理来编写自己的。

希望我的帮助对你有用。