可以使用哪些方法来检测时间文本数据中的异常?

数据挖掘 文本挖掘 数据清理 无监督学习 异常检测
2021-09-15 20:08:45

我一直在寻找可以帮助找出存储在数据库中的文本数据异常的方法。主要目标是使用无监督学习方法来检测异常。进一步如何在数据集中找到上下文并找出上下文异常?

2个回答

这假设您对神经网络感到满意。如果你不是,这个答案可能对你没有多大用处。

首先,关于通过自动编码器进行异常检测。抱歉,如果您已经对此很熟悉。

自动编码器是一种神经网络,当通过“瓶颈”层压缩时,它会学习重现自己的输入。例如,您可能希望找到一组 100 x 100 图像的低维特征表示。你的神经网络架构有一个包含 10,000 个元素的输入层,一个包含 10,000 个元素的输出层,其中一个隐藏层与输入空间相比会相对狭窄:比如 100 个节点。

目标是训练网络产生尽可能接近输入的输出,同时丢弃除 100 个节点以外的所有激活值。您正在尝试对输入进行尽可能无损的压缩,因此这 100 个节点应该是您训练它的数据类型的信息非常丰富的表示。

“这对异常检测有什么影响?” 我听到你问。好吧,如果你在非异常数据上训练你的自动编码器,它将学习非异常的低维特征表示。这将意味着通过自动编码器推动某些东西的重构误差对于类似于它所训练的数据的数据将低于对其他任意数据的重构误差。如果它接收到的输入与它所接受的训练有本质的不同,那么重建误差会更高。因此,给定一组新的输入,那些具有最高重构误差的输入是最异常的,因为它们从非异常特征表示中重构得不好。

如果您的数据具有时间结构,并且您有大量训练样本,您可能需要考虑构建一个自动编码 LSTM。LSTM 是一种用于编码和解码顺序相关数据的神经网络架构,对其工作原理的完整描述超出了本文的范围和我自己的能力。网上有很多很棒的资源可以用来掌握这一点。

是一篇关于使用 LSTM 在时间序列中进行异常检测的相关论文。如果数据不是强顺序相关的,则可能不需要 LSTM。

这是“异常检测文本”在谷歌上的第一次点击。

它有点旧,但它可能是一个很好的起点。似乎作者使用启发式算法(几种距离度量)来定义异常。

另一种选择可能是查看语料库中给定标记(单词)随时间推移的移动平均值,并查看其 t-stat 是否大于某个阈值。可能有很多很多更好的方法可以做到这一点,但这可能取决于您的目标。