0

我正在设计一个应用程序,它包含基于用户交互(协同过滤)的推荐系统。在他的主页上向用户展示了一组 6 个要与之交互的项目。将有 50 到 300 个项目。可以执行以下操作:

  1. 点击一个项目(强烈的兴趣)
  2. 刷新一个项目(一些兴趣)
  3. 打开一个阅读更多对话框(一些兴趣)
  4. 不要做任何事情(没有兴趣)

这些数据被收集和存储。系统应该向用户推荐感兴趣的项目。我正在考虑将这些数据转化为评级系统。

选项 A)如果用户点击一个项目,这将被转换为 5 的隐含生命周期评级。将项目刷新为 4,依此类推。所以我的 user->item 矩阵看起来像这样:

       item 1 | item 2 | item 3
john   5                 4
jane   4

在这个例子中,john 点击了第 1 项并刷新了第 3 项。评级只能真正上升,即如果用户之前刷新过一个项目,我写一个 4,如果稍后单击该项目,则只更新为 5。

选项 B) 每次用户执行上述操作之一时,我都会为项目增加一个标量值,这意味着它可以无限增长。

       item 1 | item 2 | item 3
john   55       1        30
jane   41       9

也许这是个问题,因为现在这些数字更难转化为从 1 到 10 的等级量表

选项 C)我分别计算每次交互

       item 1 click | item 1 refresh | item 1 read
john   3              1                       
jane   1                               1

这里的问题是“阅读”一个项目可能只完成一次。

与我选择的任何选项无关,我的想法是首先使用余弦相似度或皮尔逊相关性等方法找到相似的用户。然后从该列表中挑选前 10 到 30 名用户,并编制一份他们最喜欢的项目的顶级列表。然后,我将从该列表中推荐当前用户过去几乎没有互动过的项目。

这是可行的吗?我担心找到相似的用户会消除为当前用户找到有趣(新)项目的机会。

4

1 回答 1

0

你的建议听起来很合理。您对找不到新项目的担忧反映了基于元数据的协同过滤方法。要找到新项目,您无疑必须进行一些内容分析,这将是一个单独的阶段。例如,如果您的项目是新闻文章,您可能会尝试为每个用户识别重要的关键字。

于 2014-10-15T18:44:02.507 回答