BERT用于时间序列分类

我想在时间序列数据上训练一个转换器编码器(例如 BERT),用于可以建模为分类的任务。在谈论我面临的问题之前,让我们先简要描述一下我正在使用的数据。

我正在使用 90 秒的窗口,并且每秒可以访问 100 个值(即 90 个大小为 100 的向量)。我的目标是每秒预测一个二进制标签(0 或 1)(即产生一个长度为 90 的 0 和 1 的最终向量)。

我的第一个想法是将其建模为一个多标签分类问题,我将使用 BERT 生成一个大小为 90 的向量,其中填充了 0 到 1 之间的数字,然后使用 nn.BCELoss 和 groundtruth 标签(y_true 看起来像 [0 ,0,0,1,1,1,0,0,1,1,1,0...,0])。一个简单的类比是将每一秒视为一个,我可以访问的 100 个值作为相应的词嵌入。然后目标是在这些 100-dim 嵌入序列(所有序列长度相同:90)上训练 BERT(从头开始)。

问题:在处理文本输入时,我们只需将 CLS 和 SEP 标记添加到输入序列中,然后让标记生成器和模型完成剩下的工作。当直接对嵌入进行训练时,我们应该怎么做来考虑 CLS 和 SEP 令牌?

我的一个想法是在代表 CLS 令牌的位置 0 处添加一个 100-dim 嵌入,并在代表 SEP 令牌的位置 90+1=91 上添加一个 100-dim 嵌入。但我不知道我应该为这两个令牌使用什么嵌入。而且我也不确定这是否是一个好的解决方案。

有任何想法吗?

(我试着在 Huggingface 论坛上问这个问题,但没有得到任何回应。)

回答

虽然 HuggingFace 对 NLP 非常有用,但我不建议将它用于任何时间序列问题。对于令牌,没有理由使用 CLS 或 SEP 您不需要它们。最简单的方法是以 (batch_size, seq_len, n_features) 格式提供模型数据,然后让它预测 (batch_size, seq_len) 在这种情况下它看起来像 (batch_size, 90, 100) 并返回一个形状张量 (批量大小,90)。除非您认为窗口之间存在时间依赖性。在这种情况下,您可以使用滚动历史窗口。其次,我建议您查看一些讨论时间序列转换器的论文。

如果您正在寻找包含转换器的时间序列库,请查看Flow Forecast或转换器时间序列预测以获取使用转换器处理时间序列数据的实际示例。


以上是BERT用于时间序列分类的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>