如何使用众包排序对一百万个图像进行排名

时间:2008-10-02 22:09:07

标签: algorithm sorting crowdsourcing

我想通过制作一个游戏来对景观图像进行排名,网站访问者可以对其进行评分,以便找出人们认为最具吸引力的图像。

这样做的好方法是什么?

  • 热门风格?即显示单个图像,要求用户从1-10排名。在我看来,这可以让我平均得分,我只需要确保我在所有图像中均匀分配投票。实施相当简单。
  • 选择A-or-B ?即显示两个图像,要求用户选择更好的图像。这很有吸引力,因为没有数字排名,这只是一个比较。但是我该如何实现呢?我的第一个想法是将其作为一个快速排序,比较操作由人类提供,一旦完成,只需重复排序ad-infinitum。

怎么做?

如果您需要数字,我在一个每天访问20,000次的网站上谈论一百万张图片。我想可能会有一小部分玩这个游戏,为了争论,让我说我每天可以产生2000次人类排序操作!这是一个非营利性的网站,最终好奇的人会通过我的个人资料找到它:)

12 个答案:

答案 0 :(得分:94)

正如其他人所说,排名1-10不能很好地运作,因为人们有不同的水平。

选择A-or-B 方法的问题在于它无法保证系统具有传递性(A可以击败B,但B击败C,C击败A)。 让非传递性比较运算符破坏排序算法。使用quicksort,对于此示例,未选择作为枢轴的字母将彼此错误地排名。

在任何给定时间,您都希望对所有图片进行绝对排名(即使它们中的一些/全部被绑定)。您还希望您的排名不要更改,除非有人投票

我会使用选择A-or-B(或平局)方法,但确定类似于Elo ratings system的排名,该排名用于2个玩家游戏(原本国际象棋)中的排名:

  

Elo球员评分   系统比较球员的比赛记录   反对他们的对手的比赛记录   并确定该概率   赢得比赛的球员。这个   概率因子决定了多少   指出球员的评分上升或   根据每个人的结果下来   比赛。当一名球员击败一名球员时   具有更高评级的对手,   球员的评分比如果上升   他或她击败了一名球员   评分较低(因为球员应该   击败对手较低的对手   评级)。

Elo系统:

  1. 所有新玩家的基本评分为 1600
  2. WinProbability = 1 /(10 ^((对手的当前评级 - 玩家的当前评级)/ 400)+ 1)
  3. ScoringPt = 1分如果他们赢了比赛,0分如果他们输了,0.5分抽签。
  4. 玩家的新评级=玩家的旧评级+(K值*(ScoringPt-Player's Win Probability))
  5. 用图片替换“玩家”,您可以根据公式调整两张图片的评级。然后,您可以使用这些数字分数执行排名。 (K值这里是锦标赛的“等级”。小型本地锦标赛为8-16,大型邀请赛/区域赛为24-32。你可以使用像20这样的常数。

    使用这种方法,您只需要为每张图片保留一个数字,这比使每张图片的各个等级保持为彼此图片要少得多。

    编辑:根据评论添加更多肉类。

答案 1 :(得分:40)

对这个问题最天真的方法有一些严重的问题。最糟糕的是bash.orgqdb.us如何显示引号 - 用户可以向上投票(+1)或向下投票(-1),最佳报价列表按总净得分排序。这遭受了可怕的时间偏见 - 较旧的报价通过简单的长寿积累了大量的积极投票,即使它们只是略微幽默。如果笑话随着年龄的增长变得更有趣,这个算法可能会有意义但是 - 相信我 - 他们没有。

有各种各样的尝试来解决这个问题 - 查看每个时间段的正投票数量,加权最近的投票,实施旧投票的衰减系统,计算正投票与负投票的比率等等。大多数受其他人的影响缺陷。

最佳解决方案 - 我认为 - 是The Funniest The CutestThe FairestBest Thing使用的网站modified Condorcet voting system

  

系统为每个人提供一个数字,根据它所面对的事物,它通常会击败它们的百分比。所以每个人得到百分比得分NumberOfThingsIBeat /(NumberOfThingsIBeat + NumberOfThingsThatBeatMe)。此外,在将它们与合理的百分比进行比较之前,事物被排除在顶部列表之外。

     

如果该组中有Condorcet获胜者,此方法将找到它。因为这不太可能,鉴于统计性质,它找到了与Condorcet获胜者“最接近”的那个。

有关实施此类系统的更多信息,Ranked Pairs上的维基百科页面应该会有所帮助。

该算法要求人们比较两个对象(你的Pick-A-or-B选项),但坦率地说,这是一件好事。我相信在决策理论中,人们在比较两个对象方面比在抽象排名方面要好得多。数百万年的进化使我们擅长从树上采摘最好的苹果,但在决定我们采摘的苹果与真正的柏拉图形式的苹果有多接近时,我感觉很糟糕。 (顺便说一下,为什么Analytic Hierarchy Process如此漂亮......但这有点偏离主题。)

最后要说的是,SO使用算法来找到最佳答案,这与bash.org的算法非常相似,以找到最佳报价。它在这里运作良好,但在那里非常失败 - 很大程度上是因为这里有一个旧的,高评价但现在过时的答案可能会被编辑。 bash.org不允许编辑,现在还不清楚如何编辑关于现在已经过时的互联网模因的十几岁的笑话,即使你可以...无论如何,我的观点是通常正确的算法取决于您的问题的详细信息。 : - )

答案 2 :(得分:11)

我知道这个问题已经很老了,但我认为我会做出贡献

我会看看微软研究院开发的TrueSkill系统。它就像ELO,但收敛时间要快得多(与线性相比看起来呈指数级),因此每次投票都能获得更多收益。然而,它在数学上更复杂。

http://en.wikipedia.org/wiki/TrueSkill

答案 3 :(得分:8)

我不喜欢热门风格。不同的人会选择不同的数字,即使他们都喜欢图像完全相同。我也不喜欢评价十分之一的东西,我不知道选择哪个号码。

选择A-or-B 更简单,更有趣。您可以看到两个图像,并在网站上的图像之间进行比较。

答案 4 :(得分:5)

来自Wikipedia的这些方程使得计算Elo评级更简单/更有效,图像A和B的算法很简单:

  • 从您的数据库中获取Ne,mA,mB和等级RA,RB。
  • 使用执行的比较次数(Ne)和比较图像的次数(m)和当前等级计算KA,KB,QA,QB:

K

QA

QB

  • 计算EA和EB。

EA

EB

  • 获胜者的得分为S:获胜者为1,失败者为0,如果您的抽奖为0.5,
  • 计算两者的新评级: New Rating

  • 更新新的评级RA,RB并计算数据库中的mA,mB。

答案 5 :(得分:4)

您可能想要使用组合。

第一阶段: 热门风格(虽然我会选择3选项:Sucks,Meh / OK。很酷!)

一旦你将这个集合分类到3个桶中,那么我会从同一个桶中选择两个图像并使用“哪个更好”

然后你可以使用英国足球推广和降级系统将前几个“Sucks”移动到Meh / OK区域,以优化边缘情况。

答案 6 :(得分:4)

排名1-10不起作用,每个人都有不同的级别。总是给予3-7评级的人的排名会让总是给1或10的人黯然失色。

a-or-b更可行。

答案 7 :(得分:3)

哇,我已经迟到了。

我非常喜欢ELO系统,但就像Owen所说,在我看来,你在构建任何重大成果方面都会很慢。

我相信人类比仅仅比较两张图片有更大的容量,但你希望将交互保持在最低限度。

那么你如何显示n个图像(n是你可以在屏幕上显示的任何数字,这可能是10,20,30,具体取决于用户的喜好)并让他们选择他们认为最好的那个数量。现在回到ELO。你需要修改你的评级系统,但要保持同样的精神。事实上,您将一张图像与另外一张图像进行了比较。所以你的ELO等级是n-1次,但是你应该将等级的变化除以n-1来匹配(这样不同n值的结果就会相互一致)。

你已经完成了。你现在已经拥有了所有世界中最好的。一个简单的评级系统,只需点击一下即可处理许多图像。

答案 8 :(得分:3)

如果您更喜欢使用Pick A或B策略,我建议使用此论文:http://research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

  

Chen,X.,Bennett,P。N.,Collins-Thompson,K。,& Horvitz,E。(2013,   二月)。众包设置中的成对排名聚合。在   第六届ACM国际网络搜索会议论文集   和数据挖掘(第193-202页)。 ACM。

该论文讲述了 Crowd-BT 模型,该模型将着名的布拉德利 - 特里成对比较模型扩展为众包设置。它还提供了一种自适应学习算法,以提高模型的时间和空间效率。您可以在Github上找到该算法的Matlab实现(但我不确定它是否有效)。

答案 9 :(得分:2)

已解散的网站whatsbetter.com使用了Elo style method。您可以在FAQ on the Internet Archive中了解该方法。

答案 10 :(得分:1)

选择A-or-B 是最简单且不易发生偏差的,但在每次人工互动时,它都会为您提供更少的信息。我认为,由于偏差减少,Pick是优越的,在极限情况下,它为您提供相同的信息。

一个非常简单的评分方案是对每张图片进行计数。当某人给出正比较增加计数时,当某人给出否定比较时,减少计数。

对一百万个整数列表进行排序非常快,在现代计算机上只需不到一秒钟。

也就是说,这个问题相当不合适 - 只需要50天就可以显示每张图片一次。

我敢打赌你对排名最高的图片更感兴趣?因此,您可能希望通过预测等级来偏置图像检索 - 因此您更有可能显示已经实现了一些积极比较的图像。通过这种方式,您可以更快地开始展示“有趣”的图像。

答案 11 :(得分:1)

我喜欢快速排序选项,但我会做一些调整:

  • 将“比较”结果保存在数据库中,然后对其进行平均。
  • 为每个视图提供多个比较,为用户提供4-6张图像并对其进行排序。
  • 通过运行qsort选择要显示的图像,并记录和修剪任何没有足够数据的内容。然后,当您记录了足够的项目时,请吐出一页。

另一个有趣的选择是利用人群来教授神经网络。