推荐系统的问题/任务描述有两种方式,一是预测,也就是对于用户-条目对预测出用户的(喜好)评分值(比如上一篇提到的隐语义模型)。对于这种问题描述,通常假设训练数据是可得的,对于 个用户和 个条目的数据,也就是存在一个不完整的 矩阵,其已知部分(已有观测)用作训练,以预测未知部分(空白观测)。这样就把推荐问题转化为Matrix Completion Problem(矩阵补全问题). 第二个是排序,在实际推荐系统中,我们做推荐没有必要得到用户对所推荐条目的准确喜好值,而只是需要推荐特定用户最可能喜好的top-k条目。而且对用户的top-k条目问题比对条目的top-k用户问题更常见,虽然这两个子问题是完全等价的。
做排序的方法中,可解释性最好的通常是基于前篇提到的邻域方法。因为它们都基于一个共同的强假设:在观测到用户消费过条目A之后,我们有很高的可能性观测到用户会喜欢与A相似的条目B以及相似的用户可能喜欢同一个条目。既然是描述相似性,我们可以认为物品A与物品B的相似性等价于物品B与物品A的相似性,也就是说,由包含物品A和B等组成的节点之间的相似性,构成无向图。按照定义[1], , 其中 是介于0到1之间的常量, 和 分别表示 和 的直接相连节点(in-link nodes)组成的集合, , . 当 时, ,否则 . 这个定义是递归定义,其对应的计算过程也是递归的,而且一定收敛。其计算复杂度为 . 直观上, 可以理解为在网络中从节点 和 出发进行随机游走直至碰到所需要的预期时间损耗。
有一些bad case. 如果节点 到 之间的路径的边数是奇数的话,从上面的递归过程可以看出 . 比如下图中的节点A和B,它们之间的所有路径边数都是3,所以 , 而A到C之间路径边为偶数,所以 . 但从图中可见,A和B的相似性远高于A和C之间。
在条目-用户构成的二相图中,条目到用户的边数如果存在的话,总是奇数。所以条目跟用户的相似性总是0,虽然这是符合实际意义的。
由于计算复杂度高,即便是对于离线计算,一般由上千个节点组成的条目-用户二相图,其对应的 矩阵计算耗时和内存需求也是难以接受的。因此通常使用并行、MapReduce等进行计算,甚至并不计算真实值,而是用Monte Carlo等方法进行近似计算[2][3].
参考
- ^Jeh, G. , & Widom, J. . (2002). SimRank: a measure of structural-context similarity. the eighth ACM SIGKDD international conference. ACM.
- ^Yu, W. , Lin, X. , Zhang, W. , Pei, J. , & Mccann, J. A. . (2019). Simrank*: effective and scalable pairwise similarity search based on graph topology. Vldb Journal, 28(3), 401-426.
- ^Weiren Yu, Wenjie Zhang, Xuemin Lin, & Qing ZhangJiajin Le. (2012). A space and time efficient algorithm for simrank computation. World Wide Web.
来源:oschina
链接:https://my.oschina.net/u/4344191/blog/4331076