dot Redis 8 已发布——并且是开源的

了解更多

什么是模糊匹配?

模糊匹配(FM),也称为模糊逻辑、近似字符串匹配、模糊名称匹配或模糊字符串匹配,是一种人工智能和机器学习技术,用于识别数据表集中相似但不完全相同的元素。FM 使用算法在绝对规则之间导航,以查找不立即共享相同特征的重复字符串、单词/条目。典型的搜索逻辑在二进制模式上运行(即:0:1、是/否、真/假等)——模糊字符串匹配而是查找数据集中落在这些明确参数之间的字符串、条目和/或文本,并导航中间程度的真实性。

近似字符串匹配有助于查找近似匹配项,即使某些单词拼写错误、缩写或省略,此功能广泛用于搜索引擎。最后,近似字符串匹配提供匹配分数,并且由于它用于识别不是完美模糊匹配的单词、短语和字符串,因此匹配分数不会是 100%。

了解如何通过搜索和查询丰富搜索体验

模糊匹配如何工作?

找到正确的模糊匹配算法来帮助确定一个字符串与另一个字符串之间的相似性非常重要。在一种情况下,您可能有一个字符距离,例如从“trial”到“trail”,或者在现有字符串显示“passaport”(拼写错误)时搜索“passport”。当然,并非每个模糊逻辑案例都是单个字符距离问题。“Martin Luther Junior”与“Martin Luther King, Jr.”非常相似。距离各不相同,并且有各种模糊名称匹配算法来帮助弥合这些差距。

使用定义松散的规则进行匹配字符串来进行模糊逻辑搜索存在一些缺点。使用弱系统会增加误报的可能性。为了将这些误报保持在最低限度,或者理想情况下不存在,您的近似字符串匹配系统应该相当全面。它需要考虑拼写错误、缩写、名称变体、某些名称的地理拼写、缩短的昵称、首字母缩写词和许多其他变量。

模糊名称匹配算法

虽然在协调数据集时有很多字符串匹配算法可供选择,但并非所有用例都有一种万能的解决方案。以下是数据科学中用于查找近似匹配的一些最可靠和最常用的字符串匹配技术。

莱文斯坦距离

莱文斯坦距离 (LD) 是衡量两个字符串之间的模糊匹配技术之一,给定的数字表示两个字符串与完全匹配之间的距离有多远。莱文斯坦编辑距离的数字越高,两个术语就越不相同。

例如,如果您正在测量“Cristian”和“Christian”之间的距离,则距离为 1,因为您距离完全匹配仅差一个“h”。该术语通常与术语“编辑距离”互换使用。

莱文斯坦编辑距离示例

  1. Power -> Powder(插入“w”)– 距离:1
  2. Lovin -> Loving(插入“g”)– 距离:1
  3. Porpoise -> Purpose(用“o”替换“u”,插入“i”)– 距离:2

汉明距离

汉明距离 (HD) 以美国数学家 Richard Hamming 的名字命名,与 Levenshtein 非常相似,只是它主要用于信号处理,而前者通常用于计算文本字符串中的距离。此算法使用 ASCII(美国信息交换标准代码)表来确定分配给每个字符串中每个字母的二进制代码,以计算距离分数。

汉明距离示例

采用文本字符串“Corn”和“Cork”。如果尝试查找这两个字符串之间的 HD,您的答案将是距离 2,而不是 1,就像您使用 Levenshtein 算法得到的那样。要获得该分数,您必须查看每个字母的二进制分配,一个接一个。由于ASCII 二进制字符表为 N 分配代码 (01101110),为 K 分配代码 (01101011),您会注意到每个字母的代码之间的差异发生在两个位置,因此 HD 为 2。

达梅劳-莱文斯坦

此 LD 变体还查找使两个字符串直接匹配所需的最少操作数,使用单字符距离操作,如插入、删除和替换,但是,Damerau-Levenshtein 通过集成第四个可能的操作来进一步推进一步——两个字符的换位以找到近似匹配。

达梅劳-莱文斯坦示例

字符串 1:Micheal
字符串 2:Michaela

操作 1:转置:交换字符“a”和“e”
操作 2:插入“a”(字符串 2 的末尾)

距离 = 2

每个操作的计数均为“1”,因此每个插入、删除、转置等都以相同的权重计算。

模糊匹配用例

FM 的用例非常广泛,有很多实际应用,重复数据删除是其中最受欢迎的应用之一。想象一下,不断向已经对该广告产生负面反应并对另一个广告产生积极反应的用户投放相同的数字广告。如果金融机构对用户每周重复的交易实施欺诈检测,会对用户体验产生什么影响?正是近似字符串匹配的使用使得重复数据删除能够简化我们现代数据系统中的许多记录。

当我们在 2016 年推出搜索和查询时,其主要功能之一是具有 FM 的自动建议引擎。任何在网上冲浪过的人都已经在搜索引擎上看到了自动建议在起作用。说到搜索引擎,您是否曾经在进行 Google 搜索时拼错了一个单词,但仍然得到了您想要的结果?Google 实际上会提供它认为您要输入的内容作为主要查询,同时提供一个选项,用于搜索您键入的单词,如下所示。通过这种方式,模糊匹配帮助塑造了 AI/ML 如何帮助改进我们最信任的搜索引擎。

https://www.youtube.com/embed/ZP2j7bmWfmU

模糊匹配的好处

研究发现,人为错误是记录保存和数据管理中发生的大量重复的原因。在线研究期刊研究关于健康信息管理视角的研究发现,重复的医疗记录不仅很常见,而且具有危险且代价高昂。由 Beth Haenke Just, MBA, RHIA, FAHIMA 领导的这项研究使用了一个包含 398,939 条患者记录的多站点数据集,发现大多数姓名字段不匹配是由于拼写错误造成的(名字字段中为 54.14%,姓氏字段中为 33.62%,中间名中为 58.3%)。人为错误通常是数据管理和记录链接中最大的障碍。FM 已成为在医疗领域、金融服务领域、识别社会保障欺诈等方面连接不精确数据集不可或缺的工具。最终,FM 帮助现代企业节省了无数人力,避免了通常繁重而艰苦的手动重复数据删除工作。

FM 的其他好处包括

  • 准确性:FM 比确定性匹配更加精细,能够使用不精确的数据搜索匹配项,比经典二进制字符串更深入
  • 灵活性:各种可用的模糊逻辑算法使解决大多数复杂问题成为可能
  • 易于构建:将模糊逻辑集成到您的系统中是一个简单的过程
  • 可配置:可以轻松修改逻辑以满足您的特定需求

在不同的编程语言中实施模糊匹配

模糊匹配算法可以在各种编程语言中实现,例如

  • Python – 许多人在尝试执行近似字符串匹配时选择使用 Fuzzywuzzy Python 库。此库默认使用 LD 算法
  • R – 主要用于统计计算和图形
  • Java – 在 Java 中实现 FM 有点棘手,但并非不可能!这个 GitHub 存储库包含同一 Fuzzywuzzy 库的 Java 实现
  • Excel – 通过诸如 Fuzzy Lookup、Exis Echo 之类的加载项,甚至使用 VLOOKUP 函数

这些实现是相似的,所有语言都比较集合、匹配模式并确定与完美匹配的统计距离。

如何最大限度地减少模糊搜索中的错误

对于 FM,可靠性不是万无一失的保证。有时会出现误报,这需要手动检查错误。重要的是要问:少量误报是否会超过正确匹配指数级更多数据的好处?如果可以忽略不计,那么花时间手动检查错误可能并不值得。将正确的算法和编程语言与正确的使用案例相匹配是应用模糊逻辑进行数据匹配时防止错误的最佳方法。

使用 Redis 进行模糊匹配

Redis Stack v1.2.0 版本起已支持 Redis 的模糊匹配。它使用 LD 算法。 了解更多关于查询语法的信息,该语法用于复杂查询,以及 Redis 如何将 FM 用作其核心规则之一。