当前位置: 编码机 >> 编码机介绍 >> 变分自编码器如何淘汰经典的推荐系统
随着信息过载的增加,我们不可能通过观看海量的内容来获取我们想要的项目。推荐系统可以来拯救我们。推荐系统是一种模型,通过向用户展示他们可能感兴趣的内容,帮助他们探索音乐和新闻等新内容。
在Snipfeed,我们每天处理成千上万的内容,用户群的要求很高:GenZ.通过利用最先进的深度学习推荐系统,我们帮助用户浏览他们最喜欢的视频、新闻、和博客。
麦肯锡估计,
“已经有35%的消费者在亚马逊上购买的东西和75%在Netflix上观看的东西来自基于这种算法的产品推荐。”
随着推荐系统的日益普及,出现了这样的问题:哪些新的模型和算法可以将推荐提升到一个新的水平?与矩阵分解等更经典的方法相比,它们的性能如何?
为了回答这些问题,我决定比较九种方法,并专注于两个指标:NDCG和个性化指数,使用MovieLens数据集进行实验。我使用TensorFlow和Keras来实现这些模型,并使用GoogleColab的GPU对它们进行训练。
数据集:MovieLens20M
初始数据集
为了进行分析,我们将使用著名的数据集MovieLens20M。
这个数据集包含了来自电影推荐服务MovieLens的多万个评分。下面是dataframe的示例:
该数据集列出了个用户和多部电影。经过清洗和过滤(我们只接受正面评价),我们有:
13.6万用户2万部电影万次互动99.64%稀疏度我们还可以从下面的直方图中看到,大多数电影的收视率都在以下…
而且大多数用户评价不超过部电影。
这与大多数推荐系统问题是一致的:很少有用户对很多电影进行评分,很少有电影有很多评分。
训练数据集
我们可以根据这些数据建立一个点击矩阵。点击矩阵的格式如下所示。如果用户u与项i交互,则行u和列i上的单元格包含1,否则包含0。
我们还将点击向量x定义为点击矩阵的第u行向量。
训练验证测试数据集
为了评估模型的质量,我们将数据集分成3个子集,一个子集用于训练,一个子集用于验证,一个子集用于测试。我们将使用第一个子集训练模型,第二个子集在训练期间选择最佳模型,最后一个子集获得度量。
指标:NDCG和Personalization
NDCG
如前所述,我们将使用两个指标来评估我们的模型。第一个将是NDCG,它衡量质量和我们的推荐项目的顺序。我们首先需要定义DCG。DCG越高越好。DCG
p定义为:I是指示函数,elem_i代表推荐列表的第i个元素。为了说明这个抽象公式,这里有一个简短的例子:
需要建议:{A,B,C}
建议1:[C、A、D]-DCG
3=1.63建议2:[D、B、A]-DCG
3=1.13注意,这些建议是有顺序的。因此,我们有:DCGDCG,因为预测1中的前两个项目是我们的目标项目,而这些项目位于预测2的列表末尾。
NDCG是DCG的近亲,将分数投影在0到1之间,以便它们在模型之间转换。
Personalization(个性化指数)
Personalization=计算每对推荐之间的距离,然后计算平均值。为了比较不同的个性化指数,我们将其标准化(就像我们对NDCG所做的那样,我们将分数投影在0到1之间)。为了说明这个指标,让我们看看下面的示例:
建议1:
用户1:[A,B,C]/用户2:[D,E,F]个性化=1
建议2:
用户1:[A,B,C]/用户2:[A,B,C]个性化=0
协同与基于内容的过滤
推荐系统可以分为两类:协同过滤和基于内容的过滤。
协同过滤
协同过滤是基于用户相似度的RS子族。它通过分析与用户u关系密切的其他用户的口味来预测用户u的兴趣。它基于关系密切的用户喜欢的东西是类似的。
基于内容的过滤
基于内容的过滤是基于用户偏好和内容相似性的另一类RS,这意味着它基于这样一种想法:如果你喜欢itemi,那么你更可能喜欢类似于i的项,而不是不同于它的项。
基于内容
定义
如上所述,基于内容的方法使用项目描述来查找与用户看到的最接近的项目。我尽可能详尽地实现了这个方法,但是一个几乎没有特征的数据集是这个方法的一个限制。MovieLens数据集只提供电影的类型。
但是,我们开发了一个简单的方法,如下面的伪代码所述:
reco=zero-vectorofsizenumberofitemsforiinitemsofuseru:forjinthekclosestitemstoi:reco[j]=max(reco[j],1-dist(i,j))outputre
转载请注明:http://www.aideyishus.com/lkyy/1021.html