阿里系——盒马鲜生的Embedding策略

今天的博客主要参考了2018年KDD会议的一篇paper《Learning and Transferring IDs Representation in E-commerce》。主要讲了盒马鲜生Embedding的生成策略,因为盒马鲜生是一个比较新的平台,所以新用户和新商品的冷启动问题会比较突出,同时又由于盒马生鲜主打的是卖当季的生鲜,故新商品冷启动问题会持续存在。

从整体来看,作者指出生成的商品Embedding在盒马生鲜平台中可以有一下几个用处:
1 可以方便的计算商品之间的相似性,用来推荐系统的召回(粗排)环节;
2 可以利用方法用已知商品的Embedding向量生成未知商品的Embedding向量;
3 生成的商品向量可以在不同的平台之间进行迁移;
4 可以在统一平台中的不同任务中进行迁移。

在这里插入图片描述
我认为上图就体现了这篇paper Embedding策略的核心思想,即除了参考了每一个item ID包含的信息之外,同时将这个item进行了分解,在生成Embedding的过程中同时考虑了这个item ID对应的属性信息。其实这个思想并不新鲜,之前我的博客《使用knowledge-based方法提升词向量的生成质量》就是在生成词向量的时候考虑了每个词的属性——义元。只不过这篇paper考虑属性的方式不太一样而已。

首先我要说一下整个生成item Embedding的算法框架其实就是词向量算法skip-gram,这里每一个用户对于item的交互序列就相对于nlp中的sentence,每一个item就相当于nlp中的word。关于skip-gram的细节这里就不作为重点讲了,可以参考我之前的博客。这篇博客重点讲解一下如何融合item ID和其对应的属性来一起进行联合训练。
在这里插入图片描述
可以看出target item ID和context item ID把各自对应的所有相关属性展开进行关联,具体的关联有两个方式:p(IDs(itemj)IDs(itemi))p(IDs(item_j ) | IDs(item_i))p(itemiIDs(itemi))p(item_i | IDs(item_i))
1 对于p(IDs(itemj)IDs(itemi))p(IDs(item_j ) | IDs(item_i))来说,其中IDs(itemi)=[id1(itemi),...idk(itemi),...idK(itemi)]IDs(item_i)=[id_1(item_i),...id_k(item_i),...id_K(item_i)],k代表了item被分解对应的属性个数。那么就有p(IDs(itemj)IDs(itemi))=σ(k=1K(wjkejk)(wikeik)).s=1Sσ(k=1K(wskesk)T(wikeik))p(IDs(item_j ) | IDs(item_i))= \sigma(\sum_{k=1}^K(w_{jk}e^`_{jk})(w_{ik}e_{ik})).\prod_{s=1}^S \sigma(-\sum_{k=1}^K (w_{sk}e^`_{sk})^T(w_{ik}e_{ik})),其中SS代表了负采样的样本数量,wik=1Vikw_{ik}=\frac{1}{V_{ik}},代表了属性i的权重,VikV_{ik}itemiitem_i对应的取值数量。
这一项的目的就是使用一个商品i的所有属性信息来预测某一个商品j对应的所有属性信息。

2 对于p(itemiIDs(itemi))p(item_i | IDs(item_i))来说,p(itemiIDs(itemi))=σ(k=2Kwikei1TMkeik)p(item_i | IDs(item_i))=\sigma(\sum_{k=2}^K w_{ik}e_{i1}^TM_ke_{ik}),其中参数ei1e_{i1}代表item ID向量,其他的2至k代表的是item的属性向量信息,参数MkM_k是一个为了适配不同属性维度的变换矩阵。
这一项的目的就是使用一个商品的属性信息来预测该商品的ID信息。这其实就是可以利用方法用已知商品的Embedding向量生成未知商品的Embedding向量的理论依据。

最终整个模型的损失函数如下:
L=1Nn=1N(logp(IDs(itemn+j)IDs(itemn))αlogp(itemnID(itemn))+βk=1KMk2)L=\frac{1}{N}\sum_{n=1}^N(-log p(IDs(item_{n+j})|IDs(item_n))-\alpha log p(item_n|ID(item_n))+\beta\sum_{k=1}^K ||M_k||_2)

在得到了商品的Embedding之后,用户的Embedding可以由该用户最近一段时间交互过的商品Embedding平均得到。之所以使用这么简单的方式而不是RNN等复杂的方式,是因为用户的行为会不断的方式变化,因为用户的Embedding需要频繁的更新,RNN等训练过程太过复杂,不太适合频繁更新的场景。

其实整个paper已经讲的差不多了,最后我来讲一下:可以利用方法用已知商品的Embedding向量生成未知商品的Embedding向量是如何做到的。
精髓就在一句话:虽然会有新的item产生,但是组成这些新的item的属性都是固定的,就像是世界万物都是由几百个基础元素组成的一样。那么既然这篇paper提出的方法可以联合训练item和其对应属性的Embedding,那么就可以使用这些item属性的Embedding来合成item Embedding的形式。
由于联合优化的目标有一项是maxmax p(itemiIDs(itemi))p(item_i | IDs(item_i))
=> maxmax k=2Kwikei1TMkeik=ei1T(k=2KwikMkeik)\sum_{k=2}^K w_{ik}e_{i1}^TM_ke_{ik} = e_{i1}^T(\sum_{k=2}^Kw_{ik}M_ke_{ik})

由于maxmax p(itemiIDs(itemi))p(item_i | IDs(item_i))
=> p(itemiIDs(itemi))p(item_i | IDs(item_i)) -> 1,
=> ei1T(k=2KwikMkeik)e_{i1}^T(\sum_{k=2}^Kw_{ik}M_ke_{ik})非常大
=> ei1k=2KwikMkeike_{i1} \approx \sum_{k=2}^Kw_{ik}M_ke_{ik}
(PS:其实最后这一步约等我是不太理解的,因为向量内积大,不一定能得出两个向量完全一致的结论,前提必须是在两个向量模长一致的情况下)。

整体来说论文的思想并不是非常新的,但是合理的应用在自己的业务场景中,并取得了较好的效果,还是值得我们这些致力于AI技术落地化同行的学习。

展开阅读全文

没有更多推荐了,返回首页