simrank在推荐系统中,应用的比较广泛,原理互联网上很多。实践中,使用spark进行计算时,当【用户】+【物料】比较多的时候,矩阵相乘很慢,无法满足业务需求。
经过调研,可以使用mcmc的方式就行随机游走,进行相似度的计算。
1、抽取出【用户】+【物料】的ID。
2、对ID进行数字全局化。
3、将原始用户行为映射为全局id。
4、把行为数据当作权重图数据,对图进行随机游走,进行路径采样(步数可根据需要自行设置)
5、根据采样到的数据,两两计算相似度(crossjoin)。对于每一条路径中的每一步,如果相遇,则计数。概率为所有步数相遇的数与总路径数的比例。即为最后两节点的相似度。
6、根据相似度,采用协同过滤的思想进行召回。
对于其他图算法,如person page rank等都可以采用同样的思想。不过会牺牲准确度。