GifExplorer 搜索召回率测试报告¶
召回率¶
根据搜索的不同模式,分为 perfect/partial/regex/related/filter
五种模式进行测试,由于 filter
可以与前面四种不同模式组合使用,简洁起见将 filter
单独测试。
为避免给 secoder 带来压力,我们基于 elastic search
内的索引数据库进行测试,召回率(即检出率)计算方式如下:根据 id
通过遍历 es 数据库获得所有 应被检出的目标(total
条),根据搜索 API 逻辑获得 搜索结果(hit
条),其中属于应被检出的目标有(valid hit
条),召回率定义为 valid hit
与 total
的比值。
理想状态下,搜索召回率应该接近 "1"。
Perfect
¶
测试方式¶
遍历数据库,如果 title/uploader == keyword
认为应该被检出,与搜索 API 逻辑相同,召回率测试结果理论上应为 "1" 。
测试结果¶
title/uploader | total | hit | valid hit | recall | |
---|---|---|---|---|---|
title | Trump |
37 | 37 | 37 | 1.00 |
title | gif with tags: anime |
188 | 188 | 188 | 1.00 |
uploader | Chengsx21 |
17 | 17 | 17 | 1.00 |
Partial
¶
测试方式¶
设搜索输入为 keyword
,根据 whitespace/comma
对结果分词,结果为 tokens
,遍历数据库,如果 title/uploader
包含 tokens
中所有元素,则认为应该被检出。
在本测试中,搜索模块给出的结果与测试脚本(遍历数据库的每一条目进行检查)完全相同,召回率为 100%。
但是,由于测试脚本在分词时没有进行谓词的省略、也没有规定 tokens
元素的顺序关系,实际可能会检出一些不合逻辑的结果,而搜索 API 则进行了更准确的分词以及更合理的匹配,出于对比我们将前者作为检出条件,测试搜索的召回率,可能部分结果比 1 偏低。但本次测试时,数据库中大约有 7000-8000 张图,尚未扩展到数万张图的规模;当图片数据库规模更大、标题等信息更丰富时,可能出现上述情况。
测试结果¶
keyword | total | hit | valid hit | recall | |
---|---|---|---|---|---|
title | Trump |
183 | 183 | 183 | 1.00 |
title | food, lunch |
20 | 20 | 20 | 1.00 |
uploader | Chengsx21 |
17 | 17 | 17 | 1.00 |
Regex
¶
在本项目的实现中,正则表达式搜索在 Django 后端直接采用数据库中的正则表达式搜索,没有借助 ElasticSearch 搜索模块,因此本部分不再进行重复的测试。
Related
¶
测试方式¶
设搜索输入为 keyword
,使用外部库进行词义关联,可以比较 keyword
和指定句子的关联度,设置关联度阈值,根据 id 遍历数据库,所有 title/uploader
与 keyword
关联度 超过阈值的目标被认为应当检出,搜索 API 使用另一套关联词表进行语义关联根据召回率测试结果对搜索的关联程度进行评估。
因为“关联”没有明确的标准,所以关联搜索的召回率测试结果仅供参考。关联搜索的召回率会因所使用的关联词表的不同而不同。
测试结果¶
keyword | total | hit | valid hit | recall | |
---|---|---|---|---|---|
title | food |
2838 | 1468 | 1468 | 0.517 |
title | delicious |
5029 | 1468 | 858 | 0.170 |
Filter
¶
测试方式¶
与 perfect
完全类似,不过增加了搜索限制范围,注意对于 tag
检出的要求,针对用户输入的 tags
,遍历图库时,只有 完全包含 用户输入的所有 tags
的图片才应被检出,也即用户输入 tags
应是检出图片真实 tag
的子集,理论上由于判断标准完全固定,搜索 API 采用相同逻辑, 召回率测试结果理论为 "1" 。
测试结果¶
width | height | duration | tags | total | hit | valid hit | recall |
---|---|---|---|---|---|---|---|
[0, 400] | [0, 400] | [1, 2] | - | 1539 | 1539 | 1539 | 1.00 |
[300, 1000] | [300, 1000] | [0, 2] | - | 1429 | 1429 | 1429 | 1.00 |
- | - | - | ['dog', 'pet'] |
4 | 4 | 4 | 1.00 |