在用户之间分配协同投票算法

时间:2011-12-22 07:59:22

标签: algorithm distribution collaborative-filtering

我的应用程序的用户(实际上是游戏)回答问题以获得积分。问题由其他用户提供。由于音量,我无法自己查看所有内容,所以我决定将过滤过程挤出给用户(玩家)。规则很简单:

  • 每个用户都会显示一个评分为好/坏/不确定的问题
  • 当问题被评为“坏”5次时,将其从池中删除
  • 当问题被评为5次“好”时,它会被从投票中移除并被标记为由其他没有看过它的玩家播放

如果每个人都能看到一切,那就很容易了。但是,在游戏阶段的后期,用户不应该得到他们已经看过的问题。这意味着用户不应该看到所有问题,而且他们没有看到的问题会在游戏后期播放(回答)。

问题总数远远大于玩家数量,每天都会添加新问题,新玩家会一直来,所以我不能提前分发。

我正在寻找一种算法,可以最大化所有玩家的评级可玩(即看不见)问题的数量。

我试图谷歌,但我甚至不确定在搜索框中放入哪些条款,并使用“分发”,“投票”,“协作过滤”之类的内容会给出非常有趣但无法使用的结果。

好问题与坏问题的比例是1:3,即。 25%的问题评为良好。已提交的未评级问题数量超过10000个。具有投票权限的活跃用户数量约为150个。

我目前正在考虑将问题池和用户群分成两部分。用户群的一部分将检查另一部分的问题,反之亦然。拆分问题很容易(甚至比较奇怪)。但是,我仍然不确定如何划分用户群。我考虑过在“热门问题检查器”列表中使用奇数/偶数位置,但是在检查新问题时,列表上的位置每天都会发生变化。

更新:我刚刚问过sequel to this question - 我需要定期从游泳池中删除一定数量的问题。

1 个答案:

答案 0 :(得分:4)

我不知道是否有一个特定的,众所周知的算法。然而,这将是我的思路:

  1. “最大化所有玩家的评分可播放(即看不见)问题的数量”表示最大化+5 的问题数量和未看到的数量来自每个球员的问题。
  2. 无论算法是什么,其效果都与贡献者提交的质量问题和其他玩家的评价意愿有关(除非你< em>强制他们评价问题。)
  3. 你的系统的目标不应该是让所有玩家拥有相同数量的“看不见的问题”[这实际上是不相关的],而是总是为每个玩家提供“保留”看不见的问题,让他/她以正常的游戏速度玩游戏。例如:假设您有两个用户A和B经常在您的网站上玩游戏。 A通常每天回答80次测验,而B只有40次。如果你的系统平均每天获得100个新批准的问题,原则上你希望玩家A每天看不到超过20个,而玩家B可以安全地看到60个他们。
  4. 提交的问题与已批准的问题之间的比例也很重要:如果提交的每一秒问题都不好,那么上面的用户A和B每天可以评分40和120个问题。
  5. 所以我对最终算法的处理方法是:

    1. 跟踪以下内容:
      • 每天提交的新问题数量(F =流量)
      • 提交的好/总问题之间的比率(Q =质量)
      • 每位玩家每天使用(玩游戏而不是评级)的问题数量(GR =游戏费率)
      • 每个玩家在某一天评定的问题数量(RC =审核柜台)​​
    2. 建立要评分的优先级问题队列。这里的目标是尽快获得批准的问题。优先考虑两者:
      • 已收集upvotes的问题
      • 已经接受其他问题历史记录的用户提交的问题。
    3. 当玩家参与评级时,向他/她显示队列中的第一个问题。
    4. 根据需要重复步骤3以确保永远不会满足此条件:Q *(F - RC)&lt; GR
    5. [以上内容可以进一步调整,考虑到当用户首次注册时,网站上已经有一批已批准但看不见的问题]

      当然,你可以通过奖励有价值的活动来严重影响用户的行为(SO上的徽章和声誉点是一个不言自明的例子)。


      EDIT / ADDENDUM:评论中的讨论澄清了GR是固定的,每天只有一个问题。此外,OP表示系统每24小时至少会有一个新的批准问题。这意味着可以用以下两种形式之一简化上述算法:

      如果用户只能在他回答每日问题后投票:

        

      如果系统中至少有一个已批准但未见过的问题,请让用户随意投票。

      如果用户甚至可以在回答他的每日问题之前投票:

        

      如果系统中至少有两个已批准但未见的问题,请让用户随意投票。

      如果用户在系统上投票所有可投票的问题并且然后在23:59回答他的每日问题,那么仍然会有一个问题可以在00:00回答,加上24小时的时间让系统获取第二天的新问题。

      HTH!