协同过滤是一种推荐系统技术,它通过分析用户-物品交互模式来预测用户偏好。它基于这样的原则:过去有相似偏好的用户将来会继续如此。 主要有两种方法:**基于用户**的和**基于物品**的过滤。 基于用户的方法通过识别与目标用户有相似品味的用户,并推荐这些相似用户喜欢的物品来推荐物品。 例如,如果用户 A 和用户 B 都对几部科幻电影评价很高,并且用户 B 也喜欢一部用户 A 尚未看过的新科幻电影,则系统可能会向用户 A 推荐该电影。 另一方面,基于物品的方法侧重于物品之间的相似性。 如果许多喜欢物品 X 的用户也喜欢物品 Y,则系统会认为这些物品是相关的,并向喜欢 X 的用户推荐 Y。 这在像亚马逊这样的电子商务平台上很常见,其中“购买此商品的顾客也购买了……”的推荐是使用基于物品的过滤生成的。
实施通常涉及计算用户或物品之间的相似度得分。 对于基于用户的过滤,诸如**余弦相似度**或**皮尔逊相关性**之类的相似度指标应用于用户评分向量,以找到具有重叠偏好的邻居。 例如,如果两个用户以 1-5 的等级对电影进行评分,则他们的相似度得分是根据他们在共享电影中的评分对齐程度来计算的。 基于物品的过滤使用类似的指标,但比较的是物品。 一旦计算出相似度,系统就会通过聚合其最近邻居(对于基于用户)的评分或相似物品的评分(对于基于物品)来预测用户对未评分物品的评分。 为了有效处理大型数据集,通常使用诸如降维(例如,矩阵分解)或近似最近邻算法(例如,k-d 树)之类的技术。 像 Surprise 这样的库或像 Apache Mahout 这样的框架提供了简化这些计算的工具。
挑战包括**冷启动问题**(难以向没有互动历史的新用户或物品进行推荐)和**数据稀疏性**(用户-物品互动中的重叠有限)。 例如,在用户开始与新电影互动之前,不会推荐没有评分的新电影。 混合方法,例如将协同过滤与基于内容的方法(例如,使用物品元数据)相结合,可以缓解这些问题。 可伸缩性是另一个问题:基于用户的方法难以处理大型用户群,而基于物品的方法则需要预先计算和存储物品相似度。 尽管存在这些挑战,但由于协同过滤在流媒体服务(例如,Netflix 的“因为您观看了……”推荐)和电子商务等领域的简单性和有效性,它仍然被广泛使用。 开发人员可以使用开源工具和数据集(例如,MovieLens)来原型设计和改进他们的系统。