我对神经网络的了解非常基础,但我的目标是:给定一组简短的输入(单词和数字),我希望训练后的网络能够生成与输入数据相关的文字段落。
我之前尝试过使用RNN来进行基本的自然语言生成,但从未基于给定的输入进行过。(例如,我玩过https://github.com/karpathy/char-rnn)
网络上有太多信息,我不确定应该使用哪种模型,或者从哪里开始。
回答:
这个问题太宽泛,无法在单一回答中完全解答,但我尝试提及一些有助于您继续研究这个领域的事项。
什么是文本生成?
您提到的问题在文献中主要被称为文本生成。给定一段文本(例如,字符、单词或段落的序列)给模型,模型尝试完成剩余的文本。您的模型越好,生成文本的语义和语法结构就越好。
文本生成本身是一种语言模型问题。语言模型是许多自然语言处理(NLP)的核心问题。训练好的语言模型会根据文本中之前使用的单词序列学习单词出现的可能性。这意味着什么呢?例如,在句子:A cat sits on the ...
中,下一个单词是mat
的概率比water
大。这是一个简单的想法,是语言建模背后的主要直觉。请参阅这本书的第4章,了解这个主题的详细解释。
不同类型的语言建模:
提出了不同种类的语言建模方法,主要分为统计和神经语言模型。要比较这两种方法,请查看这篇博客文章。
最近,在语言模型开发中使用神经网络已成为主流方式,因为:
非线性神经网络模型解决了一些传统语言模型的缺点:它们允许在参数数量仅线性增加的情况下,条件依赖于越来越大的上下文大小,它们减轻了手动设计回退顺序的需要,并且它们支持跨不同上下文的泛化。
第109页,《自然语言处理中的神经网络方法》,2017年。
用于语言建模的不同类型的神经网络:
提出了一系列用于语言建模的神经网络架构:循环神经网络、前馈神经网络、卷积神经网络等,每种都有其优缺点。根据这里的说法,RNN模型实现了最先进的基准。
RNN被称为循环,因为它们对序列的每个元素执行相同的任务,输出依赖于之前的计算。另一种思考RNN的方式是它们有一个“记忆”,它捕捉了到目前为止计算的信息。请访问这里了解RNN的更多细节。
如何实现RNN用于文本生成?
请查看TensorFlow的官方示例这里。