序列建模:多序列到一个或序列到序列

数据挖掘 机器学习 训练 rnn
2022-03-09 00:03:27

假设我有一个序列x1,x2,...,xn和相应的标签y1,y2,...,yn.

一个例子是一个人进行网站访问xi和标签yi告诉我们之前的访问中是否有购买。

将多个序列训练为一个序列或将单个序列训练为序列之间有区别吗?

多序列合一

这种方法给了我们n数据点。此外,模型似乎会看到x1n次,而xn只会喂一次。

[x1],[y1]

[x1,x2],[y2]

...

[x1,x2,...,xn],[yn]

单序列到序列

这种方法只给了我们 1 个数据点。

[x1,x2,...,xn],[y1,y2,...,yn],数据中没有重复。


这些在 RNN(例如 LSTM)训练中产生相同的结果吗?似乎当您的数据不平衡时,您将从第一种方法中受益匪浅,因为您可以获得更多观察结果。

我的理解是,由于在我的情况下,即使是单个数据点在技术上也是有效的数据点,我应该使用多序列到一种方法。但是在 NLP 的情况下(其中第一个单词没有上下文),显然我们需要整个序列。

1个回答

当您谈论 RNN 时,我将稍微更改您问题的参数。

多序列为一将是:

[x1],[y1]

[x1,x2,y1],[y2]

...

[x1,x2,...,xn,y(n1)],[yn]

因为将始终使用先前的状态。

这通常是一个马尔科夫过程,其状态包含一个n输入向量。它具有已知的属性,这就是 RNN 用来能够逐个元素地创建序列的特性。

在一个序列对一个序列的情况下,没有这样的状态,我们没有一个词跟随另一个词的概念。它基本上n是输入中的n值和输出中的值。但是在这种伪序列中不再有“一个接一个”的限制,所以输出可以被加扰,它仍然是一个序列到序列输出。

现在,对于 NLP,您在时间 0 之前没有状态这一事实不是问题。您甚至可以丢弃第一个n-1元素并保留系统的马尔可夫属性。

这正是我在使用 Python 构建机器学习的第 8 章中所做的事情,如果您在系统处于正确状态时开始检索单词,它会很好地工作。