Tamr(以前是Data Tamer)大规模地进行数据库重复数据删除。涉及朴素贝叶斯和图聚类。
我认为算法主要是在SQL中实现的,这有点奇怪,但是其白皮书的主要作者是Michael Stonebraker,他帮助领导了PostgreSQL的创建。
在这里查看白皮书。
编辑:我在下面总结了他们的论文采取的步骤。我的某些话与他们的论文几乎相同。
Tamr的重复数据删除系统具有处理新数据源的两个主要步骤:(1)属性标识和(2)实体合并。这些大致相当于列重复数据删除和行重复数据删除。
1)将新数据源与现有数据源进行比较,第一步是属性标识。
使用以下四种算法将新源的属性(列)映射到现有源的属性:
- 使用模糊字符串比较(三元组余弦相似度)比较属性名称
- 将整列视为文档,标记化,测量该列与其他列之间的总频率/文档反向频率(TF-IDF)余弦相似度。
- 最小描述长度:根据两列的交点和并集的大小进行精确匹配,以进行比较。
- 对于数字列,请在新列和现有数字列之间执行t检验,以确定它们是否来自同一分布。
2)实体合并(行重复数据删除)
执行属性标识后,我们想对行(记录)进行重复数据删除。
通过聚类进行分类
首先根据相似性将记录分为几类,然后在类别级别学习重复数据删除规则。他们给出的分类示例针对的是滑雪胜地的数据库,其中西方滑雪胜地应该与东部滑雪胜地不同,因为诸如海拔高度之类的特征都取决于滑雪胜地是东方还是西方。使用聚类算法进行分类,以k-means为例。
使用朴素贝叶斯进行重复数据删除
一旦确定了属性并将记录分为几类,我们就会根据一组重复和非重复的训练来学习每个类别的重复数据删除规则。
重复数据删除规则有两种类型:
- 关于对属性有意义的距离函数的属性相似性阈值。(本文尚不清楚如何学习这些阈值。)
- 每个属性中的重复和非重复的概率分布。例如
P("Title" values similar | duplicate) ~ 1
和
Pr("State" values are different | duplicate) ~ 0
对于每对记录,我们使用适当的距离度量来计算它们每个属性的相似性。如果任何属性具有高于其阈值的相似性,那么将通过Naive Bayes分类器将记录对分类为重复或非重复。
我的假设是,对于record X1 = (a1,b1,c1,d1)
,X2 = (a2,b2,c2,d2)
它们计算一个相似度矢量S = (s_a, s_b, s_c, s_d)
,其中s_i
该属性与正确的距离度量相似。
我假设他们的朴素贝叶斯分类器具有以下结构:
P(dupe|S) = P(dupe)P(s_a|dupe)(s_b|dupe)(s_c|dupe)P(s_d|dupe) / P(S)
图聚类的实体解析
在分类步骤之后,我们拥有给定类别的记录的子集,这些记录被认为是成对重复的。现在需要将这些分解为不同的实体。这就解决了传递性问题:如果记录t1是t2的重复,而t2是t3的重复,那么t1也必须是t3的重复。也就是说,t1,t2和t3 代表同一实体。
甲图结构被用于此步骤。在类别中,每个可能是重复的记录都是一个节点。怀疑彼此为重复的节点之间有边缘。然后在图中发现群集,然后根据有关一个群集与另一群集的连接强度的阈值将它们合并在一起。以下是三个群集对示例,这些群集对可以根据它们的连通性进行合并,也可以不进行合并:
c1 c2
x-x-x-----y-y-y
|\|/| |\|/|
x-x-x-----y-y-y Meets similiarity threshold
|/|\| |/|\|
x-x-x-----y-y-y
x-x-x y-y-y
|\|/| |\|/|
x-x-x-----y-y-y Does not meet similarity threshold
|/|\| |/|\|
x-x-x y-y-y
x y
| |
x-----y Meets similarity threshold
| |
x y
当算法终止时,每个群集应该代表一个独特的实体的内类别。要完成此过程,必须根据实体中记录的属性来确定该实体的属性。首先丢弃零,然后使用包括频率,平均值,中位数和最长的方法。
本文还开发了一些方法,可以在不确定算法时使用领域专家来提供帮助,以及如何使用具有不同专业知识水平的多个专家。