前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >相似度实践问题小记

相似度实践问题小记

作者头像
用户5521279
发布2020-02-24 16:45:23
6210
发布2020-02-24 16:45:23
举报
文章被收录于专栏:搜狗测试

前段时间做了一个表情搜索的评测,用到了相似度评测,在实践过程中遇到了一个问题,在这里和大家分享下。

问题背景:

表情搜索做了一次重构,在做结果质量评测时,会对比新的服务器和现有线上服务器的返回结果数,返回结果重合率,返回结果相似度这三个维度。进而评估新服务器的质量。

为什么做相似度:

以上3个维度是递进的关系,结果重合率是对比前N个结果经过相同排序后,重合的比例,但是这种情况下,即使相同,也不能说完全一样,比如:ABCDE和AEBDC。所以鉴于这种情况,就增加了距离相似度评测。

相似度算法介绍:

对比不同的距离算法,最后通过结果对比,选择莱文斯坦(Levenshtein)距离算法。git地址为:https://github.com/miohtama/python-Levenshtein。python可以直接通过pip安装,是业界成熟的相似度距离算法,调用方法如下:

代码语言:javascript
复制
#! /usr/bin/python

问题:

本次使用的是setratio(),在使用的过程中,遇到了一个问题:由于表情搜索返回的唯一标识为md5.这样对测试和线上的结果会形成两个list形如:[‘abc’,’dae’]和[‘cbf’,’efc’]。

代码语言:javascript
复制
print (Levenshtein.seqratio(['abc','dae'],['cbf','efc']))

调用后,发现有相似度分值,而实际场景两个list是完全不一样的,这是不符合预期的,但是对比[‘a’,’b’]和[‘c’,’d’]两个list的结果是0。这说明对比算法还是按照单个字符逐个对比,且对大小写敏感

解决方案:

以上说明,直接比两个md5的list的相似度,肯定是不准确的。需要将两个md5list的每个元素变为单个字符,具体做法如下: 1、由0~9,a~z,A~Z组成62个单字符集(由于测试和线上服务器最多需要对比前30张图,所以最多需要60个单字符)。 2、对线上服务器的前30个结果,分别替换成单字符list:[‘0’,’1’…’s’,’t’]。 3、对测试服务器的前30个结果,逐个查找是否存在于线上服务器列表中。 4、如果存在,则替换成已分配的字符。 5、如果不存在,则从剩余未分配的单字符集中获取。 这样操作后,将原有的md5的list换成了单字符list。再调用seqratio()方法,就没问题了。

齐心抗疫

搜狗与你同在

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景:
  • 为什么做相似度:
  • 问题:
  • 解决方案:
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档