dot 快速的未来即将降临您的城市。

加入我们参加 Redis 发布会

什么是模糊匹配?

模糊匹配 (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) 以美国数学家理查德·汉明命名,它与莱文斯坦距离非常相似,不同的是,它主要用于信号处理,而莱文斯坦距离通常用于计算文本字符串中的距离。该算法使用 ASCII(美国信息交换标准代码)表来确定分配给每个字符串中每个字母的二进制代码,以计算距离分数。

汉明距离示例

以文本字符串“Corn”和“Cork”为例。如果您尝试找到它们之间的 HD,您的答案将是距离 2,而不是莱文斯坦算法中的 1。要获得该分数,您必须逐个查看每个字母的二进制分配。由于ASCII 二进制字符表为 N 分配代码 (01101110) 和 K 分配代码 (01101011),您会注意到每个字母代码之间的差异出现在两个位置,因此 HD 为 2。

Damerau-Levenshtein

这种 LD 变体还会找到使两个字符串直接匹配所需的最小操作次数,使用单字符距离操作,例如插入、删除和替换,但 Damerau-Levenshtein 更进一步,通过集成第四种可能的运算 - 两个字符的转置来找到近似匹配。

Damerau-Levenshtein 示例

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

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

距离 = 2

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

模糊匹配用例

FM 的用例非常广泛,有许多现实世界的应用,重复数据删除是其中最流行的用例之一。想象一下,不断向同一个用户提供相同的数字广告,而该用户之前对该广告的反应是负面的,而对另一则广告的反应是正面的。如果金融机构对用户每周重复进行的交易实施了欺诈检测,用户体验会受到怎样的影响?正是近似字符串匹配的使用让重复数据删除能够简化我们许多现代数据系统中的记录。

当我们在 2016 年推出搜索和查询时,其关键功能之一是带有 FM 的自动建议引擎。任何使用过网络的人都会在搜索引擎上看到自动建议的实际应用。说到搜索引擎,您是否曾经在进行谷歌搜索时拼写错误,但仍然获得了您要查找的结果?谷歌实际上会提供您认为要输入的主要查询,并在下方提供一个选项,用于搜索您键入的词语。这样,模糊匹配帮助塑造了 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 作为其核心规则之一。