You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于KNN的企业名称匹配中距离度量及Ratio指标计算问题咨询

企业名称模糊匹配代码相关问题解答

1. Ratio指标的计算逻辑与认知验证

你的认知完全正确:

  • Ratio指标来自fuzz.token_sort_ratio,确实是fuzzywuzzy包的方法,底层默认基于Levenshtein距离(编辑距离,统计两个字符串互相转换需要的最少增/删/替换字符数)计算。
  • 它和原始编辑距离的区别是多了两步预处理:先把两个待匹配字符串按空格拆分为独立token,再把token按字典序排序后拼接成新字符串,最终计算两个新字符串的归一化编辑距离,转换成0-100的整数就是Ratio值。
    这个特性非常适配企业名称匹配场景:比如「阿里巴巴科技有限公司」和「科技有限公司阿里巴巴」词序颠倒但内容完全一致,用这个方法计算可以直接拿到100分,不会受词序混乱影响。

2. 不直接用KNN输出距离,额外选用fuzzy评分的原因

这套代码用的是「粗筛+精排」的两步匹配逻辑,两个工具的定位完全不同:

  • KNN+TF-IDF的作用是粗筛:如果直接给每个待匹配名称和全量标准名称池跑fuzzy匹配,数据量稍大就会出现性能问题。先用TF-IDF把字符串转成向量、用KNN先筛选出Top N最可能的候选,能把匹配范围从全量缩小到极小的候选池,大幅提升运算效率。但TF-IDF向量距离是基于字符n-gram重合度计算的,对企业名称的局部差异、词序调整的匹配准确度远低于直接的字符串相似度计算,不能作为最终匹配评分。
  • token_sort_ratio的作用是精排:在KNN筛出的小候选池里做精准的相似度打分,它的评分结果更贴合人对两个企业名称是否一致的判断,所以会作为最终输出的Ratio指标。

3. 修改NearestNeighbors的metric参数无明显变化的原因

NearestNeighbors的度量指标会影响最终匹配结果,你没看到变化大概率是以下两个原因:

  • 你提供的代码里,fuzzy_tf_idf函数调用fuzzy_nn_match时,固定传参n_neighbors = 1,相当于KNN粗筛阶段直接只返回1个候选,后续fuzzy匹配只能给这唯一的候选打分。只要不同度量指标筛选出的Top1候选一致,最终结果自然不会有变化。你可以把n_neighbors调整到5~10之后再修改metric参数,就能看到结果差异。
  • 如果你的数据集本身比较简单,待匹配的非标准化名称和标准名称差异很小,不同度量指标粗筛出来的候选重合度极高,也会出现改参数后结果无明显变化的情况。

内容的提问来源于stack exchange,提问作者JSC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:54:04