【问题标题】:BERT for time series classificationBERT 用于时间序列分类
【发布时间】:2021-02-22 18:05:57
【问题描述】:

我想针对可以建模为分类的任务训练时间序列数据的 Transformer 编码器(例如 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])。一个简单的类比是将每一秒视为一个 word,而我可以访问的 100 个值作为相应的word embedding。然后目标是在这些 100 维嵌入序列(所有序列长度相同:90)上训练 BERT(从头开始)。

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

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

有什么想法吗?

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

【问题讨论】:

  • 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅介绍和 注意machine-learningtag info.

标签: python deep-learning time-series bert-language-model huggingface-transformers


【解决方案1】:

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

的论文

如果您正在寻找包含转换器的时间序列库,请查看 Flow Forecasttransformer time series prediction 以获取将转换器用于时间序列数据的实际示例。

【讨论】:

  • 太棒了,感谢您的详细回答和参考!我同意你的观点,我真正想要/需要的是一个自注意力编码器(如果我想尝试将这个任务建模为序列预测任务,可能是一个自注意力解码器)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 2021-11-16
  • 2020-05-26
  • 2021-08-18
  • 2012-12-05
  • 2018-03-29
  • 1970-01-01
相关资源
最近更新 更多