ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于TF-IDF和KNN的模糊字符串匹配优化的实际应用

2022-01-01 13:34:49  阅读:315  来源: 互联网

标签:KNN 匹配 准确度 模糊 TF IDF


基于TF-IDF和KNN的模糊字符串匹配优化的实际应用

使用背景

由于最近公司数据清理的需求,需要对两组中文名称数据进行匹配,在使用Excel的基本匹配功能之后,在待匹配组大概还有900多条数据没有得到匹配,于是便想用其他方法来匹配,以期望在获得不错准确率的前提下提高效率。

基于TF-IDF和KNN的模糊字符串匹配

基于TF-IDF和KNN的模糊字符串匹配优化具体原理介绍请看这篇文档:
具体效果
在网上寻找方法的过程中,找到了这篇文章《【NLP】基于TF-IDF和KNN的模糊字符串匹配优化》文章中对“乔治·华盛顿和G·华盛顿”的匹配对比,这不就正是我需要的吗,于是便按照教程写了程序方法,实际使用下来,哟嚯,果真不错。
感觉满意的地方有两点:

  1. 速度太快了
    我的待匹配数组有900多条,但匹配组中有四万九千条,也就是从50000条中找出900条匹配上,总用时为:7.16秒,这速度比FuzzyWuzzy快了可能上万倍。

  2. 准确度还可以
    因为是数据匹配,所以对准确度要求很高,匹配错了就会影响后边的工作。所以在匹配完成后还需要手工核验,在抛去ratio50以下的数据,对ratio50以上的匹配进行区间为10的准确度统计,结果如下:

50-6060-7070-8080-9090-100
0.200.180.230.600.79

同时,又对ratio在[90,100]区间内以步长为2进行准确度统计,如下:

90-9292-9494-9696-9898-100
0.710.760.780.790.96

可以看出,当ratio在98以上时,准确度是相当高的。

关于FuzzyWuzzy的使用

其实,在找到上述方法之前就知道该库了,具体使用方法可以参考这篇文章:《GitHub 标星 7.4k!Python 魔法库之 FuzzyWuzzy》但最后没有使用该方法的主要原因是:太慢了。
在使用待匹配组100条,匹配组5000条的测试集中,耗15分钟(918秒),那如果放到真实数据上,这是不现实的。

总结

其实,即便基于TF-IDF和KNN的模糊字符匹配方法在实际应用中也有不足的地方(这就好像实验室环境与真实环境)。

  1. 首先,真实的匹配组不一定都有匹配
    就是说,虽然有50000条匹配数据,但900条里的待匹配组也不一定能从中找到匹配的,这跟文章中举的实例是不一样的。

  2. 其次,现实中对语义准确度要求更高
    看到这点你懵了,什么叫语义准确度?其实我也懵,我的理解是: 李姐跟理解,字义不一样,但语义是一样的,都是指向“理解”,但这种匹配算法是不考虑的。所以,在实际工作中,哪怕两个词汇之间ratio值高达98,但你一看还是会发现不是一回事儿。比如长沙市宾馆和长沙县宾馆,机器认为匹配度很高啊,但我们就觉得这哪跟哪啊。
    所以,即便在ratio98以上时有96%的准确率,但还是需要人手工比对,因为数据清洗这部分就是这样,不能出错。

但即便如此,我还是使用该方法缩短了大量匹配的时间,虽然不能完全信赖,但确实可以帮助我们提高速度,这或许就是机器学习最大的实际意义吧。

标签:KNN,匹配,准确度,模糊,TF,IDF
来源: https://blog.csdn.net/tcguoxing/article/details/122122148

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有