Title
Zhang Y, Pan P, Zheng Y, et al. Visual search at alibaba[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 993-1001.
Summary
这是alibaba拍立淘团队的一篇论文,介绍了拍立淘的实现方法。 总的来说,提供了大的实现方向,但是很多细节都没有介绍。
- 当图片类别多且细的场景下,往往应该先进行类别分类,会大大提高后面的出来性能(模型和搜索的融合,提高了精度)
- 图片的特征学习,往往图片背景复杂的时候,并且query与gallery之间有较大的gap,我们希望将query的图片复杂背景进行消除,就涉及到了关键物体检测,而分段的检测在特征提取会耗费大量时间,并且需要标注样本,故论文中提出了检测和特征学习结合的网络框架。
- 二进制倒排索引+汉明距离是一种快速的粗粒度检索方式
- 在re-ranking的时候要考虑到特定的业务场景,来制定re-ranking的标准
- 大规模的系统,单机无法支撑大量的数据存储以及高并发的请求。这时候就涉及到了分布式架构,自然就会有多片,多备份等技术。
Research Objective
建立一个健壮地大型商业视觉搜索引擎
Problem Statement
Alibaba拍立淘搜索系统的实现
Challenges
- Heterogeneous images matching (query与gallery之间存在语义和视觉的gap)
- Billions of data with fne-grained categories (大量且不断增长的细粒度类别图像数据)
- Huge expense for maintaining training data (模型所需训练数据的收集)
- Improving the user engagement (商业应用的必要)
Methods
-
模型和搜索融合的分类方法
- GoogleNet V1 + softmax loss 分类模型得到类别标签 [模型]
- 网络输出的feature在2亿图片集中进行搜索,取top30的图片类别进行加权 [搜索]
最终结果是模型得出的标签与搜索得出的标签进行加权
-
检测和特征学习联合的深度模型(通过挖掘用户点击行为)
- 整体结构
通过整体结构图,可以看出此部分模型涉及到一下关键知识点:检测 特征学习 三元组 难样本挖掘
- 结构细分支
检测分支和特征学习分支相结合,在检测分支涉及到一个问题就是图像掩码即M是不可微的,无法进行反向学习求导。进而使用sigmoid函数来近似代替。
- 三元组样本挖掘(用户点击数据)
original triplet loss :
[ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ ] + [L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma]_+ [L2(f(q),f(q+))−L2(f(q),f(q−))+σ]+
selected hard positive and negative :
positive:
q + ∈ { d c l i c k ∣ d i s t ( d c l i c k , q ) ≤ ε } q^+\in \begin{Bmatrix}d^{click}|dist(d^{click},q)\leq \varepsilon \end{Bmatrix} q+∈{dclick∣dist(dclick,q)≤ε}
negative:
q − ∈ { d n o n c l i c k ∣ m i n ( d i s t ( d n o n c l i c k , q ) , d i s t ( d n o n c l i c k , d c l i c k ) ) ≥ γ } q^-\in \begin{Bmatrix}d^{nonclick}|min(dist(d^{nonclick},q),dist(d^{nonclick},d^{click}))\geq \gamma \end{Bmatrix} q−∈{dnonclick∣min(dist(dnonclick,q),dist(dnonclick,dclick))≥γ}
improved triplet loss :
l o s s = 1 ∣ Q ∣ ∑ q ∈ Q 1 ∣ N q ∣ ∑ q − ∈ N q [ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ ] + loss = \frac{1}{|Q|}\sum_{q \in Q} \frac{1}{|N_q|}\sum_{q^-\in N_q}[L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma]_+ loss=∣Q∣1q∈Q∑∣Nq∣1q−∈Nq∑[L2(f(q),f(q+))−L2(f(q),f(q−))+σ]+
Q = { q ∣ ∃ q − , L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ > 0 } Q = \begin{Bmatrix}q|\exist q^-,L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma > 0\end{Bmatrix} Q={q∣∃q−,L2(f(q),f(q+))−L2(f(q),f(q−))+σ>0}
N q = { q − ∣ L 2 ( f ( q ) , f ( q + ) ) − L 2 ( f ( q ) , f ( q − ) ) + σ > 0 } N_q = \begin{Bmatrix}q^-|L_2(f(q),f(q^+))-L_2(f(q),f(q^-))+\sigma > 0\end{Bmatrix} Nq={q−∣L2(f(q),f(q+))−L2(f(q),f(q−))+σ>0}triplet level -> query level (减少噪声query的影响,并且平衡数据,克服用户和商家图片直接的gap)
- 整体结构
-
设计了在扩大索引不影响recall和precision的二进制索引
图像ID作为key,二值化的CNN特征作为value,建立了改进地二值倒排索引。
-
高效可扩展的end to end系统架构
系统结构图:
Multi-shards:多台多片的策略,每片上存储的都是一个子集。当一个query请求的时候,每片的node都会在自己的子集上查找,并返回top k的结果,最后将每片的结果merge在排序。[保证了性能和召回]
Multi-replications:
多复制机制,如果Q个请求,会将其分为R个part,每个part有Q/R个请求,降低了压力。[保证了QPS]
coarse flter
二进制倒排索引 + hamming distance
re-ranking
在粗粒度搜索后进行进一步重排序
大量的特征信息,通过GDBT和Logisic regression来得到一个[0,1]的分数。 [用户的CTR和CVR]
Evaluation
精度:
- 模型和搜索融合的类别分类方法比单一模型方法有效
- 添加了检测分支的网络模型提取的特征,在搜索下得到更好的结果
- 结果图
时间:
分类 30ms / 特征提取 40ms /粗粒度搜索结果 10-20ms (1200items) / re-ranking 5ms (top60)
Conclusion
在alibaba这种商业场景下,提供了一个整体图片搜索方案,高效且实用。
Supplement
- 分类标签加权的权重确定方式
- mask函数被sigmoid近似的实现
- 二值化网络特征的方式