Fork me on GitHub

详解 Embeddings at Alibaba(KDD 2018)

文章转载自知乎: https://zhuanlan.zhihu.com/p/56119617

论文发表在KDD 2018上,链接为Learning and Transferring IDs Representation in E-commerce,文章属于实际应用,有些insight,值得读下。

一、Introduction

以电商网站数据为例,其数据不管是从维度还是量级来说都是巨大的,包括商品信息、店铺信息、品类信息、评论信息等等。这里面ID类的特征是一种比较特殊的数据,可能只是一个长整型数。表面上来看并不带任何信息,但实际上通过行为的汇总其承载了丰富的信息。ID类最初的处理方法是使用one-hot编码,这种方式有两个缺点:一个是高维带来的稀疏问题,模型具有足够置信度的话需要的样本量指数级增加;另一个是无法表示ID之间的关系,比如通过one-hot编码无法度量两个ID对应item的相似性。

Item ID和其他类型ID的结构关系

从交互式会话中可以得到ID的序列,从而可以用类似Word2Vec或者Item2Vec的方法对ID的共现关系进行建模,将ID映射到低维连续的向量。基于此,这篇文章提出一个学习Embedding的框架,产生使用所有类型ID的低维表示(映射到统一空间),并在多个任务上测试其效果。

二、所提模型

item是电商类网站的核心交互单元。从用户交互会话中可以得到海量的item ID序列。

  • 用户交互序列上的Skip-Gram

如果将item ID序列看做document,可使用skip-gram模型来产生item的表示。其思想就是给定target item来预测周围的context item,形式化表达如下:

其中C是窗口大小,实验设置中C=4。这里用户行为序列随机性相对语言要高,用户浏览意图可能短期内发生明显变化,个人感觉噪声会偏多。在基本的skip-gram模型中,  。其中 ,  和  分别表示context和target的表示,m是embedding向量长度,D是所有item ID构成字典的大小。

  • Log-uniform Negative-sampling

对  的计算开销和字典大小D相关,如果字典非常大,则其计算并不现实。这里引入负采样来对  的计算进行改进:

其中,  ,S是从噪声分布  中抽取的负样本的个数,实验设置中S=2。  最简单的形式就是均匀分布,但是均匀分布对稀少或热门的item的平衡处理并不好。这里作者提出使用log-uniform negative-sampling的方式进行修正,负样本的选择通过Zipfian分布产生。

  • Joint Embedding Attribute IDs

ID类型的特征可分成两种:item ID and its attribute IDs。Item是核心的交互单元,同时它包含很多attribute ID,比如产品ID、商铺ID、品牌ID和类别ID等;user ID。user ID用来标识一个用户,可代表cookie、IMEI或者登录账号。通过引入item ID和其attribute ID的结构联系,作者提出层级Embedding模型来联合训练得到item ID和attribute ID的低维表示。

首先,item ID的共现关系也暗示了其对应attribute ID的共现关系。假设有K种类型的ID,设  ,分别是Item ID,Product ID,Store ID等。可得下式:

其中,  。

其次,item ID和attribute ID间存在着结构联系,这意味着可对模型增加限制。前面提到,比如两个item ID由于共现两者的Embedding相似,而且如果product ID、restore ID等特征相同则两者的Embedding也应该相似,所以可通过attribute ID来预测item ID。形式化表达如下:

这里需要乘以一个矩阵  的原因是不同类型attribute ID的Embedding长度可能不一样,无法直接相乘。综合刚才提到的两点,可以得到最终的损失函数L,我们需要最大化L,如下式。通过一起训练,使得item ID和attribute ID可以映射到同一个语义空间,这便于在真实应用中使用或迁移这些representation。

  • Embedding Users IDs

用户的偏爱可通过其交互过的item ID序列来表示,那该如何通过这些item ID对应的Embedding向量处理得到用户的Embedding呢?直接做平均还是使用RNN结构?作者提到盒马鲜生的场景用户兴趣变化非常快,采用RNN结构训练会明显耗时,所以采用了直接对近期交互的T个item ID平均的方式来快速更新用户的Embedding。这里并未提到T的取值如何确定,个人感觉是个比较trick的点,因为如果T的取值比较大,则某一个item ID对平均之后的结果影响不大,而如果T的取值比较小,则平均后的结果携带的信息量不足。

另外值得一提的是,文中提到item ID和attribute ID的Embedding是周级更新,这也是符合实际情况的,毕竟item信息相对稳定。但是用户的Embedding是要尽量实时更新的,因为用户兴趣变化要更快。

三、实验任务

  • 计算item相似度

物品间的相似性在推荐系统中使用广泛,比如给用户推荐和用户感兴趣的物品相似的物品。物品相似性可以通过两者对应的Embedding向量的余弦距离来度量。item-based CF方法需要明确的user-item关系,但很大比例的交互数据并没有用户识别信息。而skip-gram模型基于会话的,可以利用全量的数据。因此基于Embedding的方法比基于item-based的CF方法要更好一些,实验结果也说明其有更高的召回。

  • 迁移到新的item

推荐系统中冷启动是个很大的问题,新物品由于没有交互信息,此时item-based的CF方法失效。一般可通过基于image或者text的辅助信息来进行推荐。这里解决冷启动的方法出发点是和新物品连接的attribute ID通常有历史记录,因此可以通过这些attribute ID的Embedding来预测得到新物品的Embedding。通过一些推导和近似,使用  来拟合新物品的Embedding。最后的近似步骤并没有看得很懂,有明白的小伙伴可以评论讲解下。这个直接推导新物品Embedding的思路比较自然清奇,有点像优化问题直接求出闭式解。

  • 迁移到新的领域

盒马鲜生作为一个新平台,很大比例的用户是新的,因此做个性化的推荐较为困难。文章提出了一种将淘宝(source domain)用户的兴趣迁移到盒马(target domain)上的方法。首先,设  和  分别表示淘宝和盒马的用户,其交集 。首先获得  中用户的Embedding。然后通过K-means算法将  中的用户划分成1000个簇,对每个簇的选择最热门的item集合作为候选集合。对于新来的用户  ,根据用户的Embedding和簇中心的距离分配一个最相近的簇,然后将这个簇对应的候选集合推荐给新用户。

  • 迁移到不同任务

作者在预测店铺销量的任务上进行了测试,使用历史销售数据和store Embedding作为输入,baseline是只用历史销售数据或者使用store one-hot编码来作为输入。

四、总结

深度学习中设计离散特征的话一般都处理成Embedding的形式,作为网络的底部,一般对整体网络效果有着重要的作用。和Airbnb那篇文章类似,这篇文章也是根据自己的业务特征对Embedding的模型进行了改进。对于常见模型不仅要知其然也要知其所以然,能根据真实的业务特点对模型做适配来提升模型效果。这是作为算法工程师的核心竞争力之一。


本文地址:https://www.6aiq.com/article/1551541931954
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出