Gorse推荐系统实现了很多类型的推荐算法,既包括了非个性化推荐算法,也包括了个性化推荐算法。实际上,没有一个推荐算法是万能的,只有将它们组合利用才能实现最好的推荐效果。
首先,本文介绍一下Gorse中的各类推荐算法,每一类推荐算法都有各种的优缺点。
某些场景下,用户会喜欢特定类型的物品,例子某游戏平台用户钟爱解谜类游戏、某视频平台用户喜欢看小姐姐跳舞。根据用户的历史记录和物品之间的相似度,就可以完成相似物品推荐。所以,相似物品推荐的关键在于计算物品之间的相似度。
Gorse计算物品相似度由三种模式,可以在配置文件中设置:
相似的用户之间也通常存在共同的喜好,例如计算机专业的学生一般会购买计算机类书籍、长辈喜欢购买保健品。
Gorse计算用户之间相似度同样有三种模式,同样在配置文件中制定:
基于相似物品和相似用户的推荐算法要求被推荐的物品需要通过其他用户或者其他物品和被推荐用户之间建立联系,这就局限了筛选推荐内容的范围。Gorse中的协同过滤推荐使用矩阵分解算法来推荐物品,训练算法将用户和物品映射为一个高维空间中的向量,用户对物品的喜好程度就是用户向量和物品向量的乘积。然而,协同过滤推荐的缺点就是无法利用用户和物品的标签信息,也无法处理新用户和新物品。
是否有一种算法可以结合相似推荐和协同过滤推荐各自的有点?那么就是Gorse推荐系统中的点击率预测模型。Gorse中的点击率预测模型为因子分解机,除了为每个用户和物品生成向量之外,还会给每个用户标签和物品标签生成向量,虽然因子分解机的效果不错,但是一般不会把它作为粗排的推荐算法。和协同过滤推荐、相似推荐相比,因子分解机预测时的计算复杂度非常高。Gorse的点击率预测模型的功能就是对上述推荐算法的结果进行融合排序。
单独的推荐算法无法很好地完成推荐任务,需要将多个推荐算法进行组合。Gorse提供了一个生成推荐结果的流程,我们可以在流程下制定适合于具体场景的推荐策略。推荐流程由两大部分构成:离线推荐和在线推荐。离线推荐主要从全体物品中为每个用户挑选推荐物品,缓存到Redis中。而在线推荐主要从拉取缓存的推荐结果,接着从推荐结果中删除已读内容,如果缓存的推荐结果已经用完,那么使用备用推荐算法实时生成推荐内容。
离线推荐由三阶段构成:
由于目前Gorse还未提供A/B测试功能,因此需要通过预览功能感性地制定推荐策略。
在线推荐有两个任务:
#Thefallbackrecommendationmethodforcold-startusers:#item_based:Recommendsimilaritemstocold-startusers.#popular:Recommendpopularitemstocold-startusers.#latest:Recommendlatestitemstocold-startusers.#Thedefaultvaluesis["latest"].fallback_recommend=["item_based","latest"]通过简单的配置,就可以得到一个支持多路召回、兼顾探索利用、能够服务降级的推荐系统了。