确定数据库中条目之间的相似性

我们有一个包含数亿条日志数据记录的数据库。我们试图“分组”这些日志数据,使其与日志数据库中的其他条目具有相似的性质。例如:

记录 X 可能包含如下日志条目:

变更事务 ABC123 分配给服务器 US91

记录 Y 可能包含如下日志条目:

变更事务 XYZ789 分配给服务器 GB47

对我们人类来说,很容易识别出这两个日志条目在某种程度上可能是相关的。现在,记录 X 和记录 Y 之间可能存在 1000 万行数据。并且可能存在数千个与 X 和 Y 相似的其他条目,以及一些完全不同但与其他记录相似的条目。

我试图确定将相似项分组在一起的最佳方法,并以 XX% 的确定性表示记录 X 和记录 Y 可能具有相同的性质。或者,更好的一种说法是,系统会查看记录 Y,并根据其内容,告诉你它与记录 X 最相似,而不是与其他所有记录相似。

我看到一些关于自然语言处理和其他查找字符串之间相似性的方法(例如,蛮力计算一些 Levenshtein 距离)的提及 – 但是对于我们来说,我们还有以下两个额外的挑战:

  1. 内容是机器生成的 – 而不是人类生成的
  2. 与搜索引擎方法(我们确定给定查询的结果)相反 – 我们试图对一个巨大的存储库进行分类,并根据它们彼此的相似程度对它们进行分组。

感谢您的意见!


回答:

有趣的问题。 显然,这里存在规模问题,因为您肯定不想开始将数据库中的每个记录与每个其他记录进行比较。 我认为我会考虑建立一个“已知类型”列表,并根据该列表中的类型对记录进行评分,以查看每个记录是否在该列表中有匹配项。

“评分”部分有望在这里获得一些好的答案——您针对已知类型进行评分的能力是使其能够良好工作的关键,并且我感觉您比我们更适合做好这一点。 某种 Soundex 匹配? 或者,如果您可以弄清楚如何“发现”新记录的哪些部分发生了变化,则可以将已知类型定义为正则表达式。

在这一点上,对于每条记录,您可以希望确定您已找到匹配项(具有很高的置信度)或匹配项(具有较低的置信度)或很可能根本没有匹配项。 在最后一种情况下,您可能找到了应该添加到“已知类型”列表中的新“类型”。 如果您跟踪每条匹配记录的分数,您也可以返回到低分匹配项,看看稍后在您的处理中是否出现了更好的匹配项。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注