用于时间序列分类的BERT

问题描述 投票:0回答:2

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

我正在使用 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 维嵌入序列上(从头开始)训练 BERT(所有序列长度相同:90)。

问题:在处理文本输入时,我们只需将 CLS 和 SEP 标记添加到输入序列中,然后让标记生成器和模型完成其余的工作。当直接训练嵌入时,我们应该如何考虑 CLS 和 SEP 代币?

我的一个想法是在代表 CLS 代币的位置 0 添加 100 维的嵌入,以及代表 SEP 代币的位置 90+1=91 的 100 维嵌入。但我不知道应该对这两个标记使用什么嵌入。我也不确定这是否是一个好的解决方案。

有什么想法吗?

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

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

如果您正在寻找包含转换器的时间序列库,请查看

Flow Forecast

transformer时间序列预测,了解使用转换器处理时间序列数据的实际示例。


0
投票
https://arxiv.org/pdf/2103.07162.pdf

.

© www.soinside.com 2019 - 2024. All rights reserved.