【Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba】
昨天看高达看晕了所以忘记更新Paper了,那么今天补两篇,再加上今天的一篇就是三篇。呜呜,太难了。
这篇Paper是阿里在电商之中使用的推荐算法的文章。推荐算法毫无疑问是阿里所能够活在今天的一个重要的因素,所以阿里也放了很多的精力在提高算法的效果上面,那么阿里所面对的挑战有哪些呢?
- Scalability:数据太多,很多的推荐算法在小数据集上面比如几百万用户和Items还是可以,一旦在更大的数据上就会显得力不从心。
- Sparsity:由于用户所接触的Items永远只是一小块的品类,不可能是什么都看,什么都感兴趣,这就导致了网络之中存在着极大的稀疏性。
- Cold Start:在淘宝上有数以百万的新品上架,对于他们并没有User Behavior的信息,所以如何处理这些商品被称为Cold Start的信息。
为了解决这里的问题,淘宝设计了一个Two-Stage的推荐框架,第一个阶段称之为Matching而第二个阶段称之为Ranking,在第一个阶段之中,生成一个Candidate Set of similar items for each users have interacted with,然后在第二个Stage之中对于上面的Candidate进行Ranking。
Framework
文章解决问题的思路是用Graph Embedding的方法将每一个Item进行Embedding,然后计算Similarity。那么怎么进行Graph Embedding呢?假设有一个图$G = (V,E)$其中的$V,E$分别代表了Node以及Edges,通过Embedding就可以对于每一个Node得到一个低维度的表示。
受到了Word2Vec的影响,有一种称为是DeepWalk的算法采用了Word2Vec的思想来做这个Embedding,但是由于这个并非是Sequence而是Graph,所以其通过在Graph之中Random Walk得到训练数据,什么意思呢,就是从一个节点叭叭叭走到另外的一个节点,那么其走过的Path则被认为是一个训练的Sequence,然后在使用SkipGram进行处理就好了。
那么我们知道怎么处理Graph的Embedding了,可是该怎么得到图呢?文中认为在淘宝上的用户的行为可以看成是一系列的序列,之前的方法往往忽略了序列的特征,而只是使用共现矩阵。而由于对于用户的所有的观看历史进行建模也并不实际,所以在实际之中,其选择了长度为一小时的窗口。
一旦获得了用户的浏览记录之后,如果两个Item在这个窗口之中共同出现了,他们就通过一条边进行连接了。而这两个Item的边是有Weight的,其Weight就是在多少个Session之中共现了。通过这种方法,就可以得到不同的节点之间的共现的频率,也就可以得到了他们相似度。(看论文学到一个冷知识,淘宝之中定义一个用户是无效的用户,当他们在三个月之内买了1000个商品或者是在三个月之中点击了超过3500次。)
通过上图的方法就可以实现Graph Embedding了,文中采用的也是Negative Sampling的方式而不是Huffman树的方式啊。
但是上面的仅仅是一个Basic的方法,阿里的大佬们还有其他的信息可以使用,怎么会仅仅限于用户的操作,所以接下来就是融入一些Side Information 而通过Side Information也可以解决Cold Start的问题。什么类型的Side Information呢?比如说Category还有Shop还有Price这些Information,文中说喜欢佳能的可能也会喜欢尼康(索尼罪大恶极.jpg),这些Side Information可以被对于Item进行建模,也就是说Features越接近,那么他们在Features Space之中就越接近。
那么对于Features使用一个矩阵$W$进行表示,其中的$W_{v}^{s}$表示了第$v$个Item的第$s$个Information,那么对于这个矩阵再扩充一下,加一个向量$W_{v}^{0}$表示的是上面算出来的Behavior的Feature,
这里的$SI 0 $表示的就是上面的$W_{v}^{0}$,然后经过了Embedding之后可以得到一个Dense Embedding,然后再相加就好了。但是细心的同学可能发现了,也会提出问题这个不同的Features肯定是有所区别的啊,又该怎么分配权重呢?每当分配权重的时候大家就要想到Attention,而在本文之中自然也是使用了Attention的。
那么这里的Attention怎么计算呢?给定一个矩阵$A$,其中的元素$A_{ij}$表示了第$i$个Item的$j$个Side Information.而对于第$v$个Item,其向量就可以写成是
$$H_{v} = \frac{(\sum_{j=1}^{n}e^{a_{v}^{j}} W_{v}^{j})}{\sum_{j=1}^{n}e^{a_{v}^{j}}}$$
而对于那些Cold Start的商品来说,他们并没有$SI 0$即User Behavior Information,所以在这时候,对于那些Cold Start的商品则是使用Average 作为他们的User Behavior Information,自此就可以对于所有的商品都找到一个属于他的特征矩阵了。
Comments
这篇文章之中的利用Side Information并且结合Attention来处理Embedding确实是蛮有效的方法,整个的概念还是蛮直接的,不过由于自己也确实没接触过真实的业务也是自己第一次接触推荐系统的文章吧,所以看起来还是有一些晕的吧。希望之后可以习惯。
这里的Graph Embedding的方法不知道在后续看Jure的Course会不会有其他的方法。
Reference
Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
Comments
Leave a Comment