接下来,我们希望看看该模型的表现如何为此,我们将查看一个名为\"recall at K.\"的指标.Recall @ K表示,对于普通用户来说,他们的测试项目中有多少百分比进入预测排名的前K名换句话说,如果我们得到recall@ 10值为.06,那么我喜欢的特定电影将有6%的可能性进入我的前10个推荐recall@K对于许多推荐系统来说是一个不错的指标,因为它模仿了推荐产品的行为:如果一个电影网站只向我展示我的十大推荐,那么他们的算法将能够有效地将我喜欢的电影放入前十条推荐中在计算recall之前,我们要确定哪些交互应该算作\"喜欢\"在这种情况下,我选择使用至少4.0的所有评级作为\"喜欢\"而忽略其余的评分我们来看看结果:不是很好这些结果告诉我们,在测试集电影中,只有0.1%的机会让喜欢的电影进入前10名这个推荐系统是无效的损失图我们可以配置TensorRec系统的一种方法是更改损失图损失图接受预测和交互,并计算系统在学习过程中试图减少的惩罚(损失)默认情况下,TensorRec使用RMSE(均方根误差)作为损失图这意味着TensorRec正试图准确估计交互的值:如果我给电影打4.5分,TensorRec试图得到的分数正好是4.5分这很直观,但它并不符合推荐系统在许多产品中的工作方式:电影网站不需要准确预测我的评级,它只需要能够对我喜欢的电影进行排名出于这个原因,许多系统通过\"学习排名\"来运行我们可以通过使用名为WMRB的损失图来使我们的TensorRec系统以这种方式工作WMRB(https://arxiv.org/abs/1711.04015),它通过随机抽取用户未与之交互的项目并将其预测与用户喜欢的项目进行比较来工作我们可以令TensorRec在构造模型时指定WMRB,在拟合模型时指定样本批量的大小在这种情况下,我们只想在正评级(≥4.0)上训练模型,以便WMRB将这些评级推到排名的首位我们来看看结果:好多了
已经达到了7.76%TensorRec允许你指定和自定义自己的损失图,你可以在此处查看更多示例损失图(https://github.com/jfkirk/tensorrec/blob/master/tensorrec/loss_graphs.py)添加元数据特性为了继续试验,我们应该尝试使用我们可用的其他数据在MovieLens示例中,我们可以使用电影元数据(例如电影的类型)来丰富推荐在原始格式中,电影元数据文件如下所示:首先,我们需要阅读这些数据,将电影映射到我们的内部ID,并跟踪每部电影的类型然后我们将使用Scikit的MultiLabelBinarizer对类型标签进行二值化二值化输出将是我们新推荐系统的特性运行此命令将打印出原始元数据和二值化类型的示例:基于内容的推荐现在我们有关于我们项目的元数据,我们可以尝试的一件事是仅基于项目元数据进行推荐为此,我们将配置TensorRec模型以使用项目特性的传递表示图对我们而言,这意味着项目表示将与传入的项目特性(仅仅是电影类型)相同,并且用户表示将反映用户对该特定类型的喜爱程度我们来看看结果:它不如协同过滤那么好,但是,当recall@ 10为1.3%时,它比我们的第一个协同过滤更有效这个系统存在一个主要的缺点:单独的类型不是非常具有描述性,也不足以提供明智的推荐信息如果我们有更多的描述性元数据(更多标签、演员、子类型等),我们可以通过这个基于内容的推荐系统获得更大的成功另一方面,该系统有一个主要优势:仅依靠元数据特性,而不使用指示特性,我们可以推荐在训练模型时不存在的电影同样,如果我们拥有有价值的用户元数据,我们可以避免使用用户指标特性,并为之前从未与电影进行过交互的用户进行预测这被称为\"冷启动\"推荐混合模型我们知道我们的排名协同过滤给了我们最好的结果,但似乎使用电影元数据也有一些价值让我们结合这两个:我们将使用指标特性来获得协同过滤的优势,我们还将使用内容特性来利用元数据这种将协同过滤和基于内容的推荐相结合的系统称为\"混合\"模型我们通过将两组特性叠加在一起来实现此目的:我们来看看结果:recall@ 10的推荐率为7.94%,这是我们目前为止最强大的推荐系统与纯协同过滤的7.76%的结果相比,差异并不明显,但仍然是一种改进如果我们使用更多元数据而不仅仅是类型,我们可能会看到更大的改进变化提出建议我们有一个经过训练的模型,现在我们可以使用这个模型为我们的用户提出建议我们通过将用户的特性向量和所有项目特性传递给predict_rank()并检查结果的排名:此代码段将得出用户432的前10个推荐我选择了用户432,因为我熟悉他们评价过的电影,所以我觉得我可以站在他们的角度判断他们的建议让我们看看用户432的训练数据,看看他们喜欢什么类型的电影:一些犯罪片,一些黑暗喜剧,以及对Tarantino的热爱让我们看看用户432的混合模型建议:更多带有黑暗喜剧倾向的犯罪电影
这看起来相当不错,但让我们检查一下用户432的测试电影:Fargo和Fight Club都在用户432的推荐中——这是一个很好的结果
对于这个特定的用户,我们实现了50%的召回率展望未来为了继续优化我们的推荐系统,我们应该尝试更多的表示、预测和损失图,为系统提供更多元数据,以不同方式设计这些元数据特性,以不同方式管理交互/反馈数据,以及优化系统的各种超参数
(图片来源网络,侵删)
0 评论