



如果分配的唯一标识符各不相同且不匹配,如何判定两条记录指向的是同一实体呢?最好的方法是比较实体的各个属性,比如名称。如果名称具有足够高的相似性,就可以判断它们是匹配的。原理听起来很简单。接下来,我们将一探究竟,探讨为什么匹配过程不像听起来那么容易。
首先是识别名称或标签之间唯一性的挑战。真实世界的不同实体被分配相同的名称,显然为我们区分各个实体带来了挑战。也许你在互联网上搜索过自己的姓名,除非你的姓名特别少见,否则大概率会发现许多与自己同名的人。
以多种方式和数据结构记录名称,也给我们带来了挑战。人们有时候用完整的姓名,但经常使用姓名的缩写,或忽略姓名中不太重要的部分。例如,我的姓名可能会以表1-1中的一种形式表示,但这些变体都是正确的。
表1-1:姓名的变体
这些姓名虽不完全相同,但都指向同一个人,即现实世界中的同一个实体。在精确匹配名称的过程中,头衔、昵称、缩写或重音字符都会提升匹配难度。复合姓氏或以连字符连接的姓氏,进一步增加了姓氏组合的多样性。
在国际背景下,取名习俗差异巨大。个人的名字可能出现在姓名的开头或结尾,而家族姓氏可能存在,也可能不存在。家族姓氏也可能根据个人的性别和婚姻状况而有所不同。姓名可能以多种字母表/字符集书写,或在不同语言之间翻译时有所差异 [1] 。
获取和记录名称或标签的过程,通常能够反映出获取者的数据标准。在最基本的层面上,有些数据获取过程仅使用大写字母,有些则使用小写字母,更多的则是混合使用大小写字母,即首字母大写。
姓名可能仅在对话中被听到,人们没有机会澄清它的正确拼写,也可能在匆忙中被错误地转录。在手动重新输入的过程中,姓名或标签经常被误输入或遗漏。有时使用不同的约定,如果失去了原始上下文,这些约定很容易被误解。例如,即使是简单的姓名,也可能被记录为“名,姓”,或者可能是“姓,名”,甚至被填入错误的字段。
获取跨语言数据时可能会由于音译不同而导致姓名不一致,或者在口头获取时出现转录错误。
为了更具体地说明实体消解的挑战,考虑一个简单的示例。首先,假设姓名是我们拥有的唯一信息,如表1-2所示。
表1-2:示例记录1
“Michael Shearer”和“Micheal William Shearer”指向同一个人的可能性大吗?如果没有其他信息,两者指向同一人的概率相当大。第二个姓名多了中间名,提供了额外信息,除此之外,两者有相同的姓和名。第二个姓名中的“Micheal”有一个常见的拼写错误,你注意到了吗?
如果增加另一个属性,是否有助于提高匹配精度?如果你记不住自己的会员编号,服务提供商通常会要求提供出生日期以协助识别(出于安全原因,他们也会这样做)。出生日期是一个特别有用的属性,因为它不会改变,并且潜在价值高(高基数)。此外,在无法确定完全匹配的情况下,日、月和年组合而成的复合结构或许能提供匹配线索。例如,参见表1-3中的示例记录。
表1-3:示例记录2
乍一看,两条记录中的出生日期不一致,因此可能会倾向于判断二者不匹配。如果两人的出生日期相差10天,二者不太可能是同一个人。然而,两个生日之间只有一位存在差异,前者缺少了日字段中的首位数字1,这可能是因为输入错误导致的。这很难说。如果记录来自不同的来源,我们还必须考虑数据格式是否一致,即采用的是英国的DD/MM/YYYY格式还是美国的MM/DD/YYYY格式。
如果再添加出生地,会怎么样?出生地属性也是恒定的,但地点信息的粒度可能不同,使用的标点符号可能不同。表1-4中添加了出生地信息。
表1-4:示例记录3
两条记录中的出生地没有完全对应,尽管两者可能都是对的。
因此,出生地可能被记录到不同的粒度,并没有想象中那么有帮助。那么,更个人化的信息(比如电话号码)有帮助吗?当然,很多人会更换电话号码,但现在即使更换电信服务商,也能保留同一个长久使用且被人熟知的号码,这个号码就成了人们更具黏性的属性。然而,即便如此,也还是存在挑战。一个人可能拥有多个号码(例如,一个工作号码和一个私人号码),或者号码存在多种格式,包括空格或连字符。号码还可能有或没有国际拨号前缀。
表1-5展示了完整的记录。
表1-5:示例记录4
可以看到,实体消解的挑战变得越来越艰巨。
数据的不一致性令匹配过程变得困难,这种不一致性大多是源于粗心但出于好意的数据获取过程。然而,为了掩盖实体的真实身份,以防暴露个人信息,被不怀好意的坏人盯上,有时数据可能被故意模糊处理。
如果将你的姓名与一个大约包含30个姓名的简单表格进行匹配,可能几秒钟内就能完成。更长的列表可能需要几分钟,但仍然不难完成。然而,如果是将包含100个姓名的列表与另一个同样有100个姓名的列表进行比较,任务就困难多了,并且很容易出错。
不仅比较次数增加到了10000(100×100),而且如果想一次性完成对第二个表格的比较,你必须记住第一个表格中的所有姓名。这并不容易!
同样地,如果对包含100个姓名的列表进行去重,其实也是进行比较:
1.将第一个姓名与剩下的99个姓名进行比较。
2.然后将第二个姓名与剩下的98个姓名进行比较,以此类推。
总共需要进行4950次比较。以每秒比较一次的速度计算,比较单个短列表就需要大约80分钟。对于更大的数据集,要比较的组合数量会非常大,即便是性能最强的计算机也难以应对。
假设待匹配的数据集是完全透明的,即属性值完全可用,不以任何方式隐藏或被遮蔽。然而在某些情况下,由于隐私保护要求或地缘政治因素会阻止数据跨境传输,因此这种理想状态是不可能实现的。看不到数据,该如何找到匹配项呢?这听起来像魔法,但正如在第10章中我们将看到的,存在一些加密技术,使得我们即使看不到数据,仍然能完成匹配,而无须完全暴露要匹配的列表。