MIT最新力作:用GPT-3.5解决时间序列异常检测问题 精华

发布于 2024-5-31 16:32
浏览
0收藏

今天给大家介绍一篇MIT上周发表的文章,使用GPT-3.5-turbo解决时间序列异常检测问题,初步验证了LLM在时间序列异常检测中的有效性。整个过程没有进行finetune,直接使用GPT-3.5-turbo进行异常检测,文中的核心是如何将时间序列转换成GPT-3.5-turbo可识别的输入,以及如何设计prompt或者pipeline让LLM解决异常检测任务。下面给大家详细介绍一下这篇工作。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

论文标题:Large language models can be zero-shot anomaly detectors for time series?

下载地址:​​https://arxiv.org/pdf/2405.14755v1​

1.整体介绍

MIT的这篇文章,基于LLM(如GPT-3.5-turbo、MISTRAL等)进行时间序列异常检测。核心在于pipeline的设计,主要分为两个部分。

时序数据处理:通过离散化等方法,将原始的时间序列转换成LLM可理解的输入;

异常检测Pipeline:设计了两种基于LLM的异常检测pipeline,一种是基于prompt的方法,问大模型异常位置,大模型给出异常位置的index;另一种是基于预测的方法,让大模型进行时间序列预测,根据预测值和真实值的差距进行异常定位。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

2.时序数据处理

为了让时间序列适配LLM输入,文中将时间序列转换成数字,由数字作为LLM的输入。这里的核心是如何用最短的长度来保留尽量多原始的时间序列信息。

首先,将原始时间序列统一减去最小值,防止负值的出现,负值的-号会占用一个token。同时,将数值的小数点统一后移,并且每个数值都保留到固定位数(如小数点后3位)。由于GPT对输入的最长长度有限制,因此文中采用了一种动态窗口的策略,将原始序列分成有重叠的子序列,以此输入大模型中。

此外,由于不同LLM的tokenizer不同,为了防止数字没有被完全切分开,文中在每个数字中间都加一个空格进行强行区分。后续的效果验证中,也表明加空格的方法要优于不加空格的。下面例子为处理结果:

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

不同的数据处理方式,用于不同的大模型,会产生不同的结果,如下图所示。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

3.异常检测Pipeline

文中提出了两种基于LLM的异常检测pipeline,第一种是PROMPTER,将异常检测问题转换成prompt输入大模型,让模型直接给出答案;另一种是DETECTOR,让大模型进行时间序列预测,然后通过预测结果和真实值的差异判断异常点。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

PROMPTER:下表是文中进行prompt迭代的过程,从最简单的prompt开始,不断发现LLM给出结果的问题,并完善prompt,经过5个版本的迭代形成了最终的prompt。使用这个prompt,可以让模型直接输出异常位置的索引信息。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

DETECTOR:之前已经有很多工作用大模型进行时间序列预测。文中经过处理的时间序列,可以直接让大模型生成预测结果。将不同窗口生成的多个结果,取中位数,然后根据预测结果和真实结果的差距,作为异常检测的判别依据。

4.实验结果

文中通过实验对比发现,基于大模型的异常检测方法,可以由于基于Transformer的异常检测模型,效果提升12.5%。AER(AER: Auto-Encoder with Regression for Time Series Anomaly Detection)是效果最好的基于深度学习的异常检测方法目前仍然比基于LLM的方法效果好30%。此外,基于DIRECTOR这种pipeline的方法要优于基于PROMTER的方法。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

此外,文中也可视化了大模型的异常检测过程,如下图。

MIT最新力作:用GPT-3.5解决时间序列异常检测问题-AI.x社区

本文转载自 圆圆的算法笔记​,作者: Fareise

收藏
回复
举报
回复
相关推荐