MIT最新力作:用GPT-3.5解决时间序列异常检测问题 精华
今天给大家介绍一篇MIT上周发表的文章,使用GPT-3.5-turbo解决时间序列异常检测问题,初步验证了LLM在时间序列异常检测中的有效性。整个过程没有进行finetune,直接使用GPT-3.5-turbo进行异常检测,文中的核心是如何将时间序列转换成GPT-3.5-turbo可识别的输入,以及如何设计prompt或者pipeline让LLM解决异常检测任务。下面给大家详细介绍一下这篇工作。
论文标题: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;另一种是基于预测的方法,让大模型进行时间序列预测,根据预测值和真实值的差距进行异常定位。
2.时序数据处理
为了让时间序列适配LLM输入,文中将时间序列转换成数字,由数字作为LLM的输入。这里的核心是如何用最短的长度来保留尽量多原始的时间序列信息。
首先,将原始时间序列统一减去最小值,防止负值的出现,负值的-号会占用一个token。同时,将数值的小数点统一后移,并且每个数值都保留到固定位数(如小数点后3位)。由于GPT对输入的最长长度有限制,因此文中采用了一种动态窗口的策略,将原始序列分成有重叠的子序列,以此输入大模型中。
此外,由于不同LLM的tokenizer不同,为了防止数字没有被完全切分开,文中在每个数字中间都加一个空格进行强行区分。后续的效果验证中,也表明加空格的方法要优于不加空格的。下面例子为处理结果:
不同的数据处理方式,用于不同的大模型,会产生不同的结果,如下图所示。
3.异常检测Pipeline
文中提出了两种基于LLM的异常检测pipeline,第一种是PROMPTER,将异常检测问题转换成prompt输入大模型,让模型直接给出答案;另一种是DETECTOR,让大模型进行时间序列预测,然后通过预测结果和真实值的差异判断异常点。
PROMPTER:下表是文中进行prompt迭代的过程,从最简单的prompt开始,不断发现LLM给出结果的问题,并完善prompt,经过5个版本的迭代形成了最终的prompt。使用这个prompt,可以让模型直接输出异常位置的索引信息。
DETECTOR:之前已经有很多工作用大模型进行时间序列预测。文中经过处理的时间序列,可以直接让大模型生成预测结果。将不同窗口生成的多个结果,取中位数,然后根据预测结果和真实结果的差距,作为异常检测的判别依据。
4.实验结果
文中通过实验对比发现,基于大模型的异常检测方法,可以由于基于Transformer的异常检测模型,效果提升12.5%。AER(AER: Auto-Encoder with Regression for Time Series Anomaly Detection)是效果最好的基于深度学习的异常检测方法目前仍然比基于LLM的方法效果好30%。此外,基于DIRECTOR这种pipeline的方法要优于基于PROMTER的方法。
此外,文中也可视化了大模型的异常检测过程,如下图。
本文转载自 圆圆的算法笔记,作者: Fareise