BERT用于时间序列分类



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

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

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

问题:在处理文本输入时,我们只是将CLS和SEP标记添加到输入序列中,并让标记器和模型完成其余的工作。当直接对嵌入进行训练时,我们应该如何处理CLS和SEP令牌?

我的一个想法是在代表CLS令牌的位置0添加一个100暗淡的嵌入,以及在代表SEP令牌的位置90+1=91上添加一个100暗淡的嵌入。但我不知道这两个符号应该用什么嵌入。我也不确定这是个好办法。

任何想法?

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

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

如果您正在寻找包含变压器的时间序列库,请查看流量预测或变压器时间序列预测,以获取使用变压器进行时间序列数据的实际示例。

最新更新