MinHashLSH索引中的MinHash值关系[Python3/datasketch lib]

2024-09-21 05:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个项目,该项目旨在比较日志中发现的错误,并确定它们是否相互关联(例如,如果以前未发现具有给定相似性级别的错误堆栈,则将错误堆栈作为“父级”写入数据库)。 目前,我对整个错误堆栈跟踪使用一个MinHash,可能是3行、10行或任意数量的行

  1. 找到新日志文件时,将执行重复数据消除步骤: -找到堆栈跟踪->;提取的最小哈希->;MinHashLSH.query->;如果其相似性级别不高于阈值,则MinHashLSH.insert。否则,我们假设它足够相似,并从处理中跳过它

  2. 然后在数据库中查找现有的父/子对象,并在需要时保存新对象。LSH索引保存在Redis中

目前项目的实施效果足够好;但是,它不包括某些短堆栈跟踪是长堆栈跟踪的前几行的100%副本的情况。可以想象,这两个堆栈记录道的相似性远低于所需的0.8阈值水平

长堆栈跟踪的示例:

无法连接到服务(ConnectionFailedException)

ModuleName1.ClassName1.MethodName(ErrorText1)

ModuleName2.ClassName2.MethodName(ErrorText2)

ModuleName3.ClassName3.MethodName(ErrorText3)

ModuleName4.ClassName4.MethodName(ErrorText4)

ModuleName5.ClassName5.MethodName(ErrorText5)

短堆栈跟踪的示例:

无法连接到服务(ConnectionFailedException)

ModuleName1.ClassName1.MethodName(ErrorText1)

ModuleName2.ClassName2.MethodName(ErrorText2)

我想到的第一件事是为每个堆栈跟踪行提取MinHash并单独存储它。然后我可以检查短堆栈跟踪的n行是否与长堆栈跟踪的前n行具有1.0的相似性。从那里,我们可以确定短堆栈跟踪是否是长堆栈跟踪的100%副本,并将其保存为子堆栈。 然而,我无法理解我应该如何在MinHashLSH中存储几个相关的索引,以及在这种情况下我应该如何找到已经存在的n个散列和新堆栈跟踪的m个散列之间的所有关系。我可能能够分配一些相关的索引名,但是MinHashLSH只使用对象的MinHash来查找键,反之亦然

我的问题是:

  • 这甚至可以实现我正在考虑的东西吗
  • 有更好/更简单的解决方案吗

Tags: 项目对象gt数据库示例堆栈错误副本

热门问题