京东个性化向量召回算法DPSR

1. 概述

对于一个搜索系统来说,通常采用的召回都是基于倒排索引的召回,简单来说就是需要对item侧建立倒排索引,在检索的过程中,对query分词,根据分词结果去倒排索引中查找词匹配的item,简单的流程如下图所示:

在这里插入图片描述

在传统的检索过程中,通常存在语义上的问题,比如Query为“连衣裙”,此时根据词匹配就检索不到核心词为“长裙”的item,为了解决这样的问题,需要对Query进行扩展,将其扩展成相似的query,以此来实现语义匹配的问题。当然,词匹配的方式的一大优势就是相关性解决的比较好。为了能从算法上解决语义的gap,双塔的召回结构是现如今较多采用的一种方法。

双塔的召回有如下的一些优势:

  • item侧可离线计算,线上可采用基于ANN的向量匹配方式较快的查找到向量空间与Query相匹配的item
  • 基于模型的方法,可以融入更多的特征

基于这样的优势,京东也提出了自己的向量召回算法DPSR(Deep Personalized and Semantic Retrieval)[1],着重解决两个方面的问题,第一是语义相关而并非严格的词匹配;第二是提供更多的个性化。

2. DPSR的算法原理

2.1. DPSR的模型结构

DPSR的模型结构如下图所示:

在这里插入图片描述

从上面的DSPR模型结构来看,与传统的双塔结构并没有太多的不一致,只是在Query和User侧设计了多向量的结构,这一点与MIND[2]算法倒是有点类似,只是方法上略有区别,其主要的目的就是用户刻画用户的多兴趣表示。

假设用 Q ( q ) ∈ R d × m Q\left ( q \right )\in \mathbb{R}^{d\times m} Q(q)Rd×m表示query侧的塔输出的 m m m d d d维的向量, S ( s ) ∈ R d × n S\left ( s \right )\in \mathbb{R}^{d\times n} S(s)Rd×n表示的是item侧的塔输出的 n n n d d d维的向量,基于上图中,其中 n = 1 n=1 n=1。最终相似度的计算方法为:

f ( q , s ) = G ( Q ( q ) , S ( s ) ) = Q ( q ) T S ( s ) f\left ( q,s \right )=G\left ( Q\left ( q \right ),S\left ( s \right ) \right )=Q\left ( q \right )^TS\left ( s \right ) f(q,s)=G(Q(q),S(s))=Q(q)TS(s)

为了实现 k k k个向量的输出,这里采用了Projection层(实际上可以理解成 k k k个投影矩阵),与MIND[3]中使用动态路由的方式有点不同。

2.2. 模型的训练

假设query塔的输出 Q ( q ) Q\left ( q \right ) Q(q) { e 1 , e 2 , ⋯   , e m } \left\{e_1,e_2,\cdots ,e_m \right\} { e1,e2,,em},其中 e i ∈ R d e_i\in \mathbb{R}^d eiRd,item侧塔的输出 S ( s ) S\left ( s \right ) S(s) g ∈ R d g\in \mathbb{R}^d gRd,两个塔之间的相似性计算为:

G ( Q ( q ) , S ( s ) ) = ∑ i = 1 m w i e i T g G\left ( Q\left ( q \right ),S\left ( s \right ) \right )=\sum_{i=1}^{m}w_ie_i^Tg G(Q(q),S(s))=i=1mwieiTg

其中 w i w_i wi是一个权重的表示,其具体计算方法为:

w i = e x p ( e i T g / β ) ∑ j = 1 m e x p ( e j T g / β ) w_i=\frac{exp\left ( e_i^Tg/\beta \right )}{\sum_{j=1}^{m}exp\left ( e_j^Tg/\beta \right )} wi=j=1mexp(ejTg/β)exp(eiTg/β)

其中 β \beta β是一个温度参数。

温度参数 β \beta β在较多计算softmax的场景下有涉及,如知识蒸馏[3]中,其主要作用是控制softmax的输出的“平滑程度”。简单对其分析可以发现,当 β \beta β越大,结果就越平滑;反之,得到的概率分布就越尖锐。

这里的做法与Label-aware Attention的做法相似。除了上述的相似性的计算外,在DPSR中选择的样本为正负样本对的形式,即:

D = { ( q i , s i + , N i ) ∣ i , r ( q i , s i + ) = 1 , r ( q i , s j − ) = 0    ∀ s j − ∈ N i } D=\left\{\left ( q_i,s_i^+,N_i \right )\mid i, r\left ( q_i,s_i^+ \right )=1, r\left ( q_i,s_j^- \right )=0\; \forall s_j^-\in N_i \right\} D={ (qi,si+,Ni)i,r(qi,si+)=1,r(qi,sj)=0sjNi}

对应的损失函数就是hinge loss:

L ( D ) = ∑ ( q i , s i + , N i ) ∈ D ∑ s j − ∈ N i m a x ( 0 , δ − f ( q i , s i + ) + f ( q i , s j − ) ) L\left ( D \right )=\sum_{\left ( q_i,s_i^+,N_i \right )\in D}\sum_{s_j^-\in N_i}max\left ( 0,\delta -f\left ( q_i,s_i^+ \right )+f\left ( q_i,s_j^- \right ) \right ) L(D)=(qi,si+,Ni)DsjNimax(0,δf(qi,si+)+f(qi,sj))

2.3. 样本选择

负样本的选择一直是双塔召回模型中最重要的一块内容,对于正样本没有争议,通常选择点击样本作为正样本,而对于负样本通常有两种策略:

  • 根据频次从全库中随机采样
  • batch内的随机采样

这是随机样本的部分,通常还会增加一些困难样本,主要有人工的挖掘以及在线的困难样本挖掘。在DPSR中则是将负样本分成了两个部分,分别为随机负样本和batch负样本。

在DPSR中,随机负样本的选择就是简单的随机采样,并没有考虑到样本的频次问题。从全库的 N N N个item中得到随机的负样本 N i r a n d N_i^{rand} Nirand;Batch负样本是在Batch内通过重组得到负样本,在Batch内,本身是正样本的集合 B = { ( q i , s i + , N i ) ∣ i } B=\left\{\left ( q_i,s_i^+,N_i \right )\mid i \right\} B={ (qi,si+,Ni)i},针对第 i i i个样本,与其他样本重组得到batch负样本的集合 N i b a t c h = { s k + ∣ k ≠ i , 1 ≤ k ≤ ∣ B ∣ } N_i^{batch}=\left\{s_k^+\mid k\neq i,1\leq k\leq \left|B \right| \right\} Nibatch={ sk+k=i,1kB},其实batch内的这些负样本与根据item的频率采是等价的。

最终,在DPSR中通过一定比例混合了两部分的负样本:

N i = N i r a n d ∪ N i b a t c h N_i=N_i^{rand}\cup N_i^{batch} Ni=NirandNibatch

当然在实验中也设置了不同的混合比例,设置 0 ≤ α ≤ 1 0\leq \alpha \leq 1 0α1为取random负样本的概率,则 1 − α 1-\alpha 1α便是取Batch负样本的概率。通过下面实验的截图也能看到不同的 α \alpha α对效果的影响:

在这里插入图片描述

最终选择的 α \alpha α值为 0.5 0.5 0.5或者 0.75 0.75 0.75

除了上述的随机样本之外,DPSR中也用到了一些人工的挖掘样本,主要包括以下的几类:

  • Most skipped items
  • Human generated data
  • Human labels and bad case reports

这些样本的挖掘对于模型的效果是很重要的,综上,DSPR的训练流程如下图所示:

在这里插入图片描述

3. 总结

这篇文章的设计相对而言比较简单,有点亮点的地方就是设置了 k k k个兴趣向量,并且在计算的过程中也是考虑到了Label-aware Attention的计算,但是主要有如下的几点没有交待的清楚:

  • k k k的设置,文章并未对 k k k的设置做试验性的分析,在MIND中有对 k k k的设置的分析;
  • 相关性的分析,众所周知,在搜索系统中增加向量召回,一个很大的问题就是相关性问题,在文章中只是在 α \alpha α的设置那部分提到了相关性;

另外,基于本人在工作中的一些经验,是否上个性化,个人觉得要看业务的现状,若是召回本身就是不足的,那么上不上个性化意义不是特别大,而是要解决召回不足的问题,个性化是在进一步提高转化效率。

参考文献

[1] Zhang H, Wang S, Zhang K, et al. Towards personalized and semantic retrieval: An end-to-end solution for e-commerce search via embedding learning[C]//Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval. 2020: 2407-2416.

[2] Li C, Liu Z, Wu M, et al. Multi-interest network with dynamic routing for recommendation at Tmall[C]//Proceedings of the 28th ACM international conference on information and knowledge management. 2019: 2615-2623.

[3] 知识蒸馏基本原理

猜你喜欢

转载自blog.csdn.net/google19890102/article/details/129880413