【问题标题】:Apache Mahout Distributed Recommender Recommends already rated itemsApache Mahout Distributed Recommender 推荐已评分的项目
【发布时间】:2012-11-29 03:15:28
【问题描述】:

我已经尝试过使用 10M 电影镜头数据集的基于项目的分布式推荐作业。一切正常。我的问题是,在查看针对用户的推荐时,我发现在推荐项目列表中,有些项目已经被用户评分。具体来说:

假设用户 ID:4 的用户观看了以下 ID 的电影:[123,543,234,567,324],然后在推荐列表中再次出现 543 和 234。我只是查看 Mahout in Action 以了解该算法,我找不到在生成 TopK 列表之前消除已评级项目的代码段。我错过了什么,还是它推荐已经评分的项目是正常的?

如果正常,是否可以从候选项目中剔除这些项目?

P.S:在产生推荐后过滤掉推荐对我的情况来说效率不高,因为我想要的推荐数量是 100,在过滤某些用户后,这个数字会减少到 30 等等。

提前致谢。

【问题讨论】:

    标签: mahout recommendation-engine mahout-recommender


    【解决方案1】:

    在recommenderjob的源码中:

    addOption("filterFile", "f", "包含逗号分隔的用户ID、项目ID对的文件。用于将项目排除在" + "针对该用户的推荐(可选)", null);

    我认为通过将此文件提供给推荐作业可以解决您的问题。

    【讨论】:

    • 是的,它可以解决我的问题。但是,由于数据太大,这意味着给过滤器提供相同的输入文件,比如说所有的用户历史。通常,它不应该需要过滤器。我猜过滤器是为了消除推荐系统中用户不喜欢的项目。
    【解决方案2】:

    我是 RecommenderJob 的作者之一。我们有单元测试来明确检查用户是否不是他们已经知道的推荐项目。如果真的发生这种情况,那将是一个严重的错误。你能举一个你看到发生这种情况的输入数据的例子吗?

    最好将此讨论移至 mahout 邮件列表 https://cwiki.apache.org/confluence/display/MAHOUT/Mailing+Lists,+IRC+and+Archives

    【讨论】:

    • 您好,很抱歉回复晚了。在 mahout 0.7 下,我尝试使用 Movielens 10M 数据集为 3 节点 hadoop 集群上的每个用户生成 100 条推荐。 “bin/mahout org.apache.mahout.cf.taste.hadoop.item.RecommenderJob --input movieLensLogs --output outputMovie --usersFile movieUsers.txt --numRecommendations 100 -s SIMILARITY_LOGLIKELIHOOD”。只需我如上所述运行工作。正如我在测试它是否向用户推荐已经观看过的项目时所解释的那样,我遇到了一些用户推荐已经评分的项目。会不会是因为推荐的物品太多? (在我的情况下是 100)
    【解决方案3】:

    代码自从我第一次做以来变化很大,有几个RecommenderJobs,但最初有一个阶段在所有的最终向量和中添加了一个“(user,item,NaN)”元组现有的用户-项目对。这导致所有此类用户-项目对的总和为 NaN,并且可以从结果中排除。它可能不再在那里了。

    【讨论】:

    • 感谢肖恩的快速回复。我在 0.7 发行版下使用过 org.apache.mahout.cf.taste.hadoop.item.RecommenderJob。如果我能找到你提到的部分,我会看看。如果没有,我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多