Python 时间序列分类的BERT方法

Python 时间序列分类的BERT方法,python,deep-learning,time-series,bert-language-model,huggingface-transformers,Python,Deep Learning,Time Series,Bert Language Model,Huggingface Transformers,我想培训一个基于时间序列数据的transformer编码器(例如,BERT),以完成一项可以建模为分类的任务。在讨论我面临的问题之前,让我们先简要描述一下我使用的数据 我使用的是90秒窗口,每秒可以访问100个值(即大小为100的90个向量)。我的目标是预测每秒的二进制标签(0或1)(即生成长度为90的0和1的最终向量) 我的第一个想法是将其建模为一个多标签分类问题,其中我将使用BERT生成一个大小为90的向量,填充0到1之间的数字,并使用nn.BCELoss和groundtruth标签进行回归

我想培训一个基于时间序列数据的transformer编码器(例如,BERT),以完成一项可以建模为分类的任务。在讨论我面临的问题之前,让我们先简要描述一下我使用的数据

我使用的是90秒窗口,每秒可以访问100个值(即大小为100的90个向量)。我的目标是预测每秒的二进制标签(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维嵌入序列(所有序列长度相同:90)进行训练(从头开始)

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

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

有什么想法吗


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

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


如果您正在寻找包含transformer check out的时间序列库,或者寻找将transformer用于时间序列数据的实际示例。

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


如果您正在寻找包含transformer check out的时间序列库,或者寻找将transformer用于时间序列数据的实际示例。

我投票结束这个问题,因为它不是关于中定义的编程,而是关于ML理论和/或方法-请参阅
机器学习
。我投票结束这个问题,因为它不是关于中定义的编程,而是关于ML理论和/或方法-请参阅
机器学习
中的简介和说明。太棒了,感谢您提供详细的答案和参考资料!我同意你的看法,我真正想要/需要的是一个自我关注编码器(+如果我想尝试将此任务建模为序列预测任务,可能需要一个自我关注解码器)。太棒了,谢谢你的详细答案和参考资料!我同意你的看法,我真正想要/需要的是一个自我关注编码器(+如果我想尝试将此任务建模为序列预测任务,可能需要一个自我关注解码器)。