假设以下一维序列:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
这里的字母A, B, C, ..
代表“普通”事件。
这里的符号#, $, %, ...
代表“特殊”事件
所有事件之间的时间间隔是不均匀的(从几秒到几天),尽管事件在过去越远,它影响未来事件的可能性就越小。理想情况下,我可以明确考虑这些时间延迟。
普通事件类型大约有 10000 种,特殊事件类型大约有 100 种。特殊事件之前的普通事件数量各不相同,但不太可能超过 100-300。
从根本上说,我感兴趣的是在普通事件序列中寻找最终预测特殊事件的模式。
现在你可以用不同的方式来解决这个问题:创建特征向量 + 标准分类、关联规则学习、HMM 等。
在这种情况下,我很好奇基于 LSTM 的网络如何最适合。直截了当的做法是做类似Karparthy 的 char-rnn并根据历史预测下一个事件。然后对于一个新的序列
C, Z, Q, V, V, ... , V, W
您可以通过模型运行它,看看接下来最有可能发生什么特殊事件。但感觉不太合适。
由于这是一个时间分类问题,但似乎正确的做法是使用Alex Graves所描述的 Connectionist Temporal Classification 。
然而,在目前投入过多之前,我正在寻找更容易和更快的实验来感受 LSTM 在这里的适用性。Tensorflow 会在某个时候看到一个CTC 示例,但还没有。
所以我的(子)问题是:
- 鉴于上述问题,我想尝试 LSTM,是否值得尝试 char-rnn 类型的方法,我应该硬着头皮掌握 CTC,还是有更好的起点。
- 您将如何明确合并事件间时间信息。使用带有无操作事件的固定时钟显然有效,但看起来很难看。
- 假设我设法训练了 LSTM,有没有办法检查模型以查看它拾取了什么样的事件“主题”?(即,类似于卷积网络中的过滤器)
任何示例代码(首选 python)总是有帮助的。
编辑:只是补充一点,序列中有一些噪音。有些事件可以安全地忽略,但哪些事件并不总是可以预先说清楚。因此,理想情况下,模型(以及从中派生的图案)对此具有鲁棒性。