对于目前大规模的电子商务平台,如淘宝、ebey,其用户、商品数量都非常大。淘宝数据显示,2010年淘宝网注册用户达到3.7亿,在线商品数达到8亿,最多的时候每天6000万人访问淘宝网,平均每分钟出售4.8万件商品。假如我们要做User-Item的协同过滤算法,那么U-I矩阵大小是6000万 ×8亿。在这个数量级上面做协同过滤,即使用hadoop,计算起来也非常吃力,效果也比较差。
让我们看看为什么效果比较差。在U-I矩阵中,用户平均浏览的商品数量比较小,根据周涛【1】的估计,平均每个用户的浏览宝贝数量不超过800。实际上,平均每个用户的商品浏览数量可能不超过20.那么在U-I矩阵中,只有6000万×20的entry是有值的,稀疏的度达到 20/8亿=2.5e-08,小于百万分之一。在这个规模下,任意两个用户的浏览的商品交集都是比较小的。
在淘宝平台,不同于amazon或者豆瓣,同样的物品(商品)有很多卖家都可以出售。如果用户浏览了同种商品的一个,其实我们可以认为他浏览了所有类似的商品。也就是说我们想通过商品的聚类,为了减少数据量,扩大用户的共同浏览量。商品聚类有很多方法,在比较规范的手机数码聚类简单一些,然后在女装男装等类目聚类更复杂。因为女装可能从风格等角度去聚类更简单一些。
还有一个角度是减少用户量,那么对于相似的用户可以聚类。不管用什么聚类方法,当面对数千万用户和数亿商品的时候,计算量是一个比较大的挑战。如何减少不必要的技术,在尽可能短的时间内得到计算结果是非常重要。
现在比较流行的是把item id 做hash之后降维。例如:阿里巴巴的文章中介绍把商品ID做six hot编码。
参考:
【1】http://blog.sciencenet.cn/home.php?mod=space&uid=3075&do=blog&id=554630