少数人的智慧:基于专家意见的协同过滤
0x00 摘要
基于最近邻算法的协同过滤(nearest-neighbor collaborative filtering)是一种十分成功的推荐方法。然而,这种方法存在一些缺点,比如数据稀疏性、脏数据、冷启动问题以及可扩展性。
本文将介绍一种基于专家意见向用户推荐内容的新方法,该方法是传统协同过滤的一种变体,它的不同之处在于:该方法不再将最邻近算法用于用户评级数据,而是使用一组独立的专家数据集来计算预测专家意见和用户之间相似性。该方法能在解决传统协同过滤问题的同时保持相近的准确性。
0x01 简介
CF(collaborative filtering)是目前构建推荐系统的主流算法。CF 算法假设为了向用户推荐 Items,可以从过去其他类似用户的喜好中提取信息。 例如,最近邻算法通过为每个用户找到许多类似用户来实现这一目的,这些用户的画像随后可用于预测建议。然而,定义用户之间的相似性并不是一件容易的事:它受到数据中的稀疏性和噪声的限制,并且计算量很大。
本文将探讨特定领域的专业评估者(即专家)如何预测一般人群的行为。 在最近的工作中,我们发现传统 CF 算法中的很大一部分误差是来自于用户反馈中的噪声。 因此,本文的目标是使用噪声较小的来源(即专家)的反馈来建立推荐系统。
关于专家的定义,我们认为专家是能对特定领域物品给出经过深思熟虑的、一致且可靠评级的人。
0x02 专家协同过滤
传统 CF 方法
传统 CF 方法使用 KNN 算法来预测用户的评级,该算法基于最近的 k 个邻居来计算 user-item 对的预测结果,计算过程既可以是 item-based 也可以是 user-based,本文选择 user-based (基于用户的 CF )方法。整个计算流程可以拆解为下面几个阶段:
- 构造 user-item评分矩阵
- 通过预定义的相似度计算方法,计算所有 user-item 对的相似性
- 排序,生成推荐结果
关于相似度的计算方式,我们可以使用余弦相似度的变体:在余弦相似度的基础上加入调整因子,用以调整两个用户共同评定的物品数量。计算公式如下图:
公式中各部分的含义:
- 用户:a,b
- 物品:i
- user-item 打分:rai,rbi
- 用户打分的 item 的数量:Na,Nb
- 用户共同打分的数量:Naub
专家 CF 方法
基于专家意见的协同过滤(后文简称专家 CF)的不同之处在于,它不需要构造 user-item 评分矩阵,而是构建了一个每个用户和专家集之间的相似性矩阵。
专家 CF 的核心思想是这样的:为了预测用户对特定物品的评级,我们需要找到和给定用户的相似度大于 δ 的专家。
整个算法可以分下面几块来理解:
一、给定用户和专家的空间 V 和相似性度量 sim:V×V→R,我们定义一组专家 E = {e1,…,ek}⊆V 和一组用户 U = {u1 ,…,uN} ⊆ V。 给定一个特定的用户 u⊆U 和一个值 δ,我们找到专家组 E’⊆E,使得:∀e⊆E’⇒sim(u,e)≥ δ。
二、使用固定阈值 δ 的一个缺点是存在找到很少邻居的风险;此外,找到的那些可能没有评定当前项目。 为了解决这个问题,我们将置信度阈值 τ 定义为必须对项目进行评级以信任其预测的最小专家邻居数量。
三、假设上一步中发现的专家组 E’ 和 物品 i,我们发现 E’ 的子集 E′′ 存在这种关系:∀e ⊆ E′′⇒ rei,其中 rei 专家 e ⊆E’ 对 物品 i 的评级 。
四、经过前面的计算,我们得到了专家组 E′′ = e1e2…en,如果 n 的数量小于 τ,再不返回预测结果,如果 n 的数量大于 τ ,则使用如下计算公式算得用户和物品的相似度:
0x03 优点
这里列举几个专家CF的优点:
- 数据稀疏性:推荐数据集固有的数据稀疏问题会因为信息量不足而带来一些额外的问题,专家收藏的数据稀疏度要比全体用户收藏的稀疏程度要低,即有更多的可参考的信息。
- 噪声评分:无论用户是有意的还是无意的,数据集里面难免会存在一些噪声评分。而专家在这方面则可靠得多,而且个人意见也比较容易保持一致。
- 冷启动问题:这是专家CF的一大优势。对于用户冷启动,由于数据稀疏性与噪声问题而造成的问题,在专家CF里得到了不错的解决。对于新物品的冷启动问题,由于专家更具有前瞻性,所以新物品更容易通过专家而进入到推荐池中。
- 可扩展性:如果直接使用基于用户相似度的CF算法进行推荐,在实际系统中难度是相当大的,因为构造一个用户相似度矩阵是如此地庞大。而使用量要少得多的专家作为相似度矩阵的一个维度,矩阵的规模则现实得多。
- 隐私:这里还考虑了这样的一种可能性,即不需要你把数据传递到服务器,只需要把专家喜好传递到客户端,与你本地的收藏相匹配,然后服务器给你返回相应的推荐,避免了服务器记录你的收藏。
0xFF 总结
本文是论文《The Wisdom of the Few》的阅读笔记,算是论文一个简短的总结。
另外,本文略去了论文中关于数据集的介绍以及算法最终效果评估这两部分内容,对该部分内容感兴趣或者想深入研究原文的可以下载论文阅读。
原文发布于微信公众号 - 木东居士(Data_Engineering)