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

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

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

基于TF-IDF和KNN的模糊字符串匹配优化的实际应用
  • 使用背景
    • 基于TF-IDF和KNN的模糊字符串匹配
    • 关于FuzzyWuzzy的使用
    • 总结

使用背景

由于最近公司数据清理的需求,需要对两组中文名称数据进行匹配,在使用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-1000.200.180.230.600.79

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

90-9292-9494-9696-9898-1000.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%的准确率,但还是需要人手工比对,因为数据清洗这部分就是这样,不能出错。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存