【摘要】:
图片搜索由于在搜索目标上的特殊性,往往依赖于图片所在网页的文本来判断图片的内容(我们成为图片周边文本)。而周边文本往往不能很好的表达图片的内容,并且一张图片往往在多个网页中被引用,图片周边文本也不太一致,甚至于很多图片并没有周边文本,因此给图片搜索算法提出了更高挑战。
通过“众包”的方式(百度众测平台)为图片进行信息标注,从而提高搜索引擎的准确性和召回率往往是一个比较有效的方法,并且标注的数据可以作为图片机器学习的样本数据,对于提高图片机器学习的准确率也有很大的效果;但是在图片标注的过程中也有很多问题需要解决,例如:
(1)用户作弊问题:在“众包”平台中,有因为兴趣爱好参与标注的,也有因为平台激励机制而参与标注的,因此会存在部分用户为了获取奖励而进行作弊的行为,这些作弊行为会给标注数据的准确率带来很大的影响;
(2)如何对用户的标注进行引导,使得标注的信息更为准确,让用户的标注成本更低,标注过程更为有趣味性,从而提高标注的效率;
本文所提到的就是一种带有防作弊功能的,能够对用户的标注信息进行细分引导,从而使得标注数据越来越精确的图片标注方法。
在本文所描述的图片标注游戏中,用户被区分为两种类型:
(1)描述者:对系统展现的一张图片用一段文字或者几组关键字进行描述,表达出图片的内容和特点;
(2)判断者:系统向其展现多张图片(一般情况下为4张)以及一段描述文字,这段描述文字所对应的图片也包含在所展现的图片当中,判断者根据“描述文字”挑选出对应的图片;
用户可以随时在“描述者”和“判断者”之间切换身份,但是不会出现用户自己判断自己所描述的图片的情况。系统将“描述者”描述的图片分配给“判断者”的时候有一套算法确保不会分配给“原描述者”,并且也不会分配给距离“描述者”较近或者可能认识的“判断者”。我们在文章后面会描述这个分配算法。
一、“描述者”描述图片的过程
图1: 图片标注系统
如图1,当用户点击“图片标注系统”的“描述图片”按钮之后,系统会从图片数据集(图片URL集合)中随机挑选出100个图片URL,然后逐个给用户展示图片(如图2和3)。
图2:描述图片(甲壳虫昆虫)
图3:描述图片(甲壳虫汽车)
图4:描述图片(甲壳虫乐队)
二、“判断者”判断图片的过程
图5:判断图片
当用户选择“判断图片”的时候,系统也会选择随机选择100个已经有标注(就是有用户描述)的图片,每次展示一段标注文字以及相应的4张图片(可以是更多张,系统可以配置)。如图5,最上面蓝色框里面是已有用户标注“甲壳虫汽车”,中间是系统挑选出来的4张图片,挑选的算法后面会有详细介绍。挑选的图片当中包含用户标注对应的图片,例如图5中就是对应中间的红色甲壳虫汽车。
当用户判断出图片之后,只要用鼠标点击相应的图片就会在图片周边有红色的方框将图片圈住,用户点击继续判断即可提交判断结果并进入到下一个标注文字的判断。
三、“判断者”的选取方法
为了防止作弊,系统有一套“判断者”选取方法,主要避免如下的作弊行为:
(1)“描述者”判断自己所标注的图片;
(2)“描述者”和“判断者”之间协同作弊;
系统的处理方法如下:
(1)“描述者”在标注图片的时候,系统会记录描述者的账号和IP地址;
(2)系统在挑选“判断者”的时候会选择不同的账号,并且对IP地址进行位置转换,选择一个距离“描述者”较远的“判断者”;
(3)系统会记录“标注文字”的分配历史记录,不会将同一个“标注文字”重复分配给同一个“判断者”,“描述者”和“判断者”之间的持续作弊成本很高;
四、相关图片的选取方法
系统在挑选“相关图片”给“判断者”的时候,需要解决如下问题:
(1)不能出现极度相似甚至重复的图片;
(2)图片之间要对标注文字有区分度和标注引导作用;
对于第1点不难理解,因为出现极度相似甚至重复图片的时候,那么“判断者”就没法选择图片。对于第2点我们举个例子说明一下,例如下面这张图片(甲壳虫汽车):
图6:甲壳虫汽车
“描述者”在一开始的时候很可能仅仅标注“甲壳虫”,“甲壳虫”这个信息虽然没有错,但是在应用到图片检索的时候会存在歧义,因为“甲壳虫”可能对应“甲壳虫汽车”、“甲壳虫昆虫”和“甲壳虫乐队”,为了引导“描述者”进一步标注出有区分度的标注信息,系统会根据“甲壳虫”这个关键字选取出如下三张图片:
图7、标注信息无区分度
这时候“判断者”根据“甲壳虫”无法判断“描述者”所描述的图片是哪一张,从而双方都获取不同系统奖励的积分,从而推动“描述者”进一步标注更为详细和有区分度的信息,例如“描述者”可能会进一步描述为:“甲壳虫汽车、红色、大众”,这时候“判断者”就很容易判断出图片。
系统在选择展现图片的时候,会根据标注中的关键字从图片库中进行组合选取,例如标注文字中可以提取出关键字K1、K2和K3,系统会对关键字进行组合(K1,K2)、(K2、K3)和(K1,K2,K3)等从图片库中提取相关的图片,这是一个根据关键字检索图片的过程。
选取出相关的候选图片后,我们会用“感知哈希函数”对图片进行相似度计算,我们选用基于DCT离散余弦变换的图像感知哈希,计算出两张图片的汉明距离,并且设置阈值为26(可以调整),小于26的情况下我们认为两张图片极度相似,从而不选择这张图片,例如如下两张图片的计算结果:
图8、Hamming Distance=24.000000 ( <26, 相似 )
图9、Hamming Distance=40.000000 ( >26,不相似 )
通过汉明距离的计算,我们选用图9中的黄色甲壳虫,而不选用图8中第2张红色甲壳虫,因为这张图片和标注文字对应的图片极度相似。
五、系统的数据通信流
如图10,图片标注系统划分为三层结构:表现层、逻辑层和数据层,各层的功能如下:
(1)表现层:图片标注系统包括Web前端、Android前端和IOS前端等不同终端,用户可以通过这些终端参与图片标注;
(2)逻辑层:逻辑层是整个系统比较复杂的部分,包括数据预处理、核心调度和标注管理三个不同模块,后面我们会详细介绍各个模块的功能;
(3)数据层:图片标注系统对图片URL集合等原始数据进行处理,最终产出带有用户标注信息的数据集,图中的“用户数据”就是用户信息,而“IP地域数据”是用于判断用户所在物理位置用的词典。
图10、图片标注系统结构
下面我们对系统最为复杂的“逻辑层”进行介绍,“逻辑层”包括“数据预处理”、“核心调度”和“标注管理”三部分,功能如下:
(1)数据预处理:
A、为了改善一些图片所在服务器响应慢导致终端用户等待时间过长的问题,数据预处理模块会对原始图片URL进行探测,检测响应速度,筛选出响应时间慢的URL,并且对响应时间慢的图片进行后台抓取保存,当终端请求这些图片的时候会向后台请求,而不请求原URL地址;
B、数据预处理模块还会对原始数据中的图片URL发送请求获取图片,然后计算其基于DCT的感知哈希值,哈希值用于后面核心调度模块选择图片的时候对比图片之间的汉明距离,从而决定选取哪些图片给“判断者”;
(2)核心调度:
A、核心调度模块的第一个功能是为“描述者”选择展示图片,当一个用户作为“描述者”加入系统之后,核心调度模块会为其随机挑选100张图片;
B、核心调度模块的第二个功能是为“描述者”标注的图片找到一个或者多个“判断者”,“判断者”是随机选取的,和“描述者”之间互不认识,并且选取的“判断者”的IP在物理距离上离“描述者”比较远,并且会优先选择之前未判断过该图片的“判断者”;
C、核心调度模块的第三个功能是为“判断者”提供标注文字、标注文字对应的图片以及经过组合搜索和相似度计算之后挑选出来的另外几张图片,首先核心模块会将标注文字进行切词和关键字提取,然后对关键字进行一组随机组合之后从系统中检索出相关的候选图片,根据这些图片的感知哈希值挑选出和标注文字对应图片的汉明距离超过阈值的图片,避免出现极度相似甚至相同的图片(图片的感知哈希值是之前通过“数据预处理”计算得出的)。
(3)标注管理:
标注管理负责将用户的标注数据更新到后台标注数据集中,数据是以图片的URL作为Key,一个图片可以对应多段标注文字(如表1),每段标注文字可以被多个“判断者”判断,系统会记录每个“判断者”的判断结果(如表2):
【说明】:表1和表2只列出关键的数据字段,实际系统中会包括标注时间、判断时间、标注IP、判断IP等等更多的信息,这些信息会用于系统防作弊;
【文章小结】:
通过本文所描述的标注游戏能够快速地获得大量较为准确的图片标注信息,对于提高图片搜索效果有很大的作用,体现在两个方面:
(1)图片搜索准确率:由于引入精确度较高的标注数据,使得图片的信息更为全面,搜索准确度更高;
(2)图片搜索召回率:对于没有“周边文本”的图片,原来比较难在搜索引擎中被索引,通过标注系统标注之后能够索引建库,从而提高图片的召回率。
游戏采用的标注方法具有如下特点:
(1)防标注作弊功能:由于“描述者”和“判断者”是通过系统的“核心调度”模块按照一定的算法进行选取,使得用户作弊的成本很高,从而避免了用户作弊行为,使得最终的图片标注数据准确度较高;
(2)对用户标注进行有效的引导,使得用户标注出更为精细的,有区分度的标注信息,系统通过对标注文字进行切词提取出关键字,并对关键字进行多组组合之后从图片数据库中提取出相关图片,并且通过感知哈希函数计算汉明距离,从而消除相似度极高甚至一样的图片,使得提供给“判断者”的图片具有区分度,也能够促使“描述者”进一步精确标注图片。
文章来源:百度搜索研发部 by ruanxinghua
相关阅读:
Google图片搜索的原理
Google搜索引擎的工作原理
百度解构第一季 – 理解用户搜索行为
暂无评论内容