在不同长度的文本源上创建 RNN

数据挖掘 神经网络 rnn 生成模型 文本生成
2022-03-09 18:57:26

我想创建一个 RNN 来根据训练数据中某种格式的现有文本的许多示例生成新文本。训练数据中的文本类型由 3 个部分组成,如下所示:

示例文本 1:

[第 0 段,~20 个字符]

[第 1 段,~200 个字符]

[第 2 段,~400 个字符]

值得一提的是,这些段仍然是字母数字,但结构不同。第 1 段包含更多数字,第 2 段包含更多引用第 1 段中出现的字母。

我有许多此类示例文本实例的训练数据,但每个片段的长度不同。

在大多数 RNN 文本生成示例中,我在训练集之前看到的大多数 RNN 文本生成示例都包含一个长文本,该长文本被分成固定长度的段以进行训练,我想在我的情况下也可以通过简单地连接所有不同的示例成一个长字符串。然后将该长字符串分成固定长度的“输入”和“目标”字符串的序列对,例如 100 个字符,并将它们用于训练。

我的问题是,如果我不能利用我已经将文本分成类似于我想要生成的片段的事实,并将每个示例用作训练批次。

在我看来,如果 RNN 一次获得属于一个示例的数据(输入 + 目标字符串),而不是数据(输入 + 目标) 跨越整个训练集。

是否有任何我忽略的方面倾向于将所有训练数据简单地连接成一个大字符串?

提前谢谢了!

1个回答

我认为,如果你<EOS>在合并时在每个句子的末尾附加一个标记(句尾),这不会有问题,因为如果你打乱你的数据并训练,RNN 将学会切割句子并独立生成几次洗牌。

但是,正如您所说的数据是异构的,您可能会考虑首先运行一些聚类算法,然后训练您的 RNN 以有条件地生成集群。要构建训练数据集,您可以合并每个集群的所有数据。这比简单的“自动生成”要复杂一些,但这取决于您的目标是什么。