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


83

我想通过制作一个游戏来排名风景图像集,网站访问者可以对它们进行评分,从而找出人们最喜欢的图像。

这样做的一个好方法是什么?

  • 流行与否?即显示单个图像,请用户将其排名为1-10。正如我所看到的,这使我可以平均分数,并且只需要确保我在所有图像上获得均匀的选票分配即可。实施起来相当简单。
  • 选择A还是B?即显示两个图像,请用户选择更好的一个。这很有吸引力,因为没有数字排名,这只是一个比较。但是我将如何实施呢?我的第一个想法是将其作为快速排序,由人提供比较操作,完成后,只需重复无极排序即可。

你会怎么做?

如果您需要数字,那么我说的是每天访问量为20,000次的网站上的一百万张图片。我猜想为了争辩,一小部分人可能会玩游戏,可以说我一天可以进行2,000次人工排序操作!这是一个非营利性网站,终极好奇者会通过我的个人资料找到它:)


1
我使用GAE编写了一个玩具应用程序,它的功能如下:rank.appspot.com。尽管我是独立开发的,但我怀疑每个项目都会将其转化为ELO的变体形式使用动量概念。很乐意分享python src。
自由空间

@freespace我很想看看您算法的Python源码。
akaihola

也许在这个项目中,您应该尝试建立一个神经网络(当然只是为了好玩),并使用Pick A-or-B输入来训练网络。经过大量的训练,也许您的神经网络将能够选择最漂亮的神经网络。
Martijn Courteaux 2011年

Answers:


96

就像其他人所说的那样,排名1-10的效果并不理想,因为人们的级别不同。

与该问题拾取A-或-B方法是,其不保证该系统能传递(A可以打败B,但乙节拍C,和C节拍A)。 使用非传递比较运算符会破坏排序算法。使用快速排序,在此示例中,未选择为枢轴的字母将彼此错误地排名。

在任何给定时间,您都希望对所有图片进行绝对排名(即使其中一些/全部并列)。您还希望除非有人投票,否则排名不会改变。

我将使用Pick A-or-B(或平局)方法,但是确定类似于Elo评分系统的排名,该系统用于2个玩家游戏(最初是国际象棋)中的排名:

Elo玩家评分系统将玩家的比赛记录与对手的比赛记录进行比较,并确定玩家赢得比赛的可能性。该概率因子根据每次比赛的结果来确定玩家的评分上升或下降多少点。当玩家击败等级较高的对手时,玩家的等级比击败等级较低的玩家时提高的更多(因为玩家应该击败等级较低的对手)。

Elo系统:

  1. 所有新玩家的初始评分为1600
  2. WinProbability = 1 /(10 ^((对手的当前等级–玩家的当前等级)/ 400)+ 1)
  3. 如果他们赢得比赛,ScoringPt = 1分;如果输掉比赛,ScoringPt = 0分;如果平局,则为0.5分。
  4. 玩家的新评分=玩家的旧评分+(K值*(ScoringPt –玩家的获胜概率))

用图片替换“玩家”,您可以根据公式简单地调整两张图片的等级。然后,您可以使用这些数字分数进行排名。(这里的K值是锦标赛的“等级”。小型本地锦标赛是8-16,大型邀请赛/地区是8-32。您可以只使用20等常数)。

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

编辑:根据评论增加了一些肉。


3
可传递性根本不重要。您只想汇总人们的意见,并希望他们在排名上存在分歧。人是嘈杂的数据源,而且不一致。
Owen,

4
我的观点是,如果您具有A> B> C> A,则仅使用“>”作为比较是一个问题,因为您的排序永远不会(正确地)结束,并且即使您列出的内容也会保持不变没有其他人在投票。我的答案为这个问题提供了解决方案。
拉普利·安德森

1
我将其标记为可接受的答案,因为它使我不建议使用quicksort,并且包括一个很好的Elo插图。
Paul Dixon

6
elo系统绝对是对A / B方法进行排名的方法。但是,您最好使用比上面的增量方法更好的方法。看看贝叶斯洛
Fantius

经过一个小时的
搜寻后

40

解决该问题的大多数幼稚方法都有一些严重的问题。最糟糕的是bash.orgqdb.us如何显示报价-用户可以对报价进行向上(+1)或向下(-1)投票,而最佳报价列表则按总净得分排序。这有一个可怕的时间偏差-旧的报价通过简单的寿命就积累了大量的正面投票,即使它们只是些许幽默。如果笑话随着年龄的增长变得越来越有趣,则此算法可能有意义,但是-相信我-他们没有。

解决此问题的方法有很多种,包括查看每个时间段的正面票数,对最近的票数加权,对较旧的票实施衰减系统,计算正面票与负面票的比率等。大多数情况都存在其他缺陷。

我认为,最好的解决方案是网站最有趣 ,最可爱最美丽最好的东西使用的一种解决方案-改良的Condorcet投票系统

该系统根据所面临的情况,通常击败每个人的百分比为每个人提供一个数字。因此,每个人都会得到百分比分数NumberOfThingsIBeat /(NumberOfThingsIBeat + NumberOfThingsThatBeatMe)。同样,将事物从顶部列表中禁止,直到将它们与集合的合理百分比进行比较。

如果集合中有Condocont赢家,则此方法将找到它。由于这不太可能,考虑到统计性质,它会找到最接近Condorcet赢家的人。

有关实施此类系统的更多信息,排名对的Wikipedia页面应该会有所帮助。

该算法要求人们比较两个对象(您的Pick-A-or-B选项),但是坦率地说,这是一件好事。我相信决策理论已被人们很好地接受,人类比两个对象在抽象排名上要好得多。数百万年的演变使我们善于从树上摘下最好的苹果,但在决定我们摘苹果与真正柏拉图式苹果味的接近程度方面却很糟糕。(顺便说一下,这就是为什么分析层次结构流程如此精巧的原因……但这有点离题了。)

最后一点是,SO使用一种算法来找到最佳答案,这与bash.org的算法中找到最佳报价非常相似。它在这里运作良好,但在那儿却无法正常工作-很大程度上是因为这里可能编辑了旧的,评级很高但现在已经过时的答案。bash.org不允许进行编辑,而且即使您可以,也不清楚如何编辑有关当今互联网模因的数十年历史的笑话。无论如何,我的观点是,正确的算法通常取决于您的问题的细节。:-)


感谢您引用Condorcet投票系统,这一询问栏使我进入了这个有用的Wikipedia页面en.wikipedia.org/wiki/Ranked_Pairs
Paul Dixon

这些站点称它们“被破坏”,此后被废弃。我不知道该算法是错误的还是只是实现。
endlith 2014年

11

我知道这个问题已经很老了,但我认为我会有所作为

我看一下Microsoft Research开发的TrueSkill系统。就像ELO一样,但是收敛时间要快得多(与线性相比,它看起来是指数级的),因此您可以从每次投票中获得更多收益。但是,它在数学上更加复杂。

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


TrueSkill的概念提供了许多根据“匹配”对事物进行排名的可能性。Bing使用类似的概念来投放相关广告。我在moserware.com/2010/03/computing-your-skill.html上
Jeff Moser 2010年

8

我不喜欢流行或不流行的风格。即使他们都完全一样喜欢图像,不同的人也会选择不同的数字。我也讨厌对事物进行评分,满分10分,但我永远不知道该选择哪个数字。

选择A或B更为简单和有趣。您将看到两个图像,并且在站点上的图像之间进行了比较。


5

这些来自维基百科的方程式使计算Elo评级变得更加简单/有效,图像A和B的算法很简单:

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

ķ

质量检查

QB

  • 计算EA和EB。

EA

EB

  • 将获胜者的S得分:获胜者为1,失败者为0,如果您的平局为0.5,
  • 使用以下两种方法计算新的评级: 新评分

  • 更新新的额定值RA,RB并在数据库中计数mA,mB。


4

您可能需要组合使用。

第一阶段:热辣风格(尽管我会选择3票:很烂,很不错,很酷!)

将集合分类到3个存储桶中后,我将从同一个存储桶中选择两个图像,然后选择“哪个更好”

然后,您可以使用英语足球系统的升迁和降级,将前几个“吸盘”移至Meh / OK区域,以优化边缘情况。


4

排名1-10无效,每个人都有不同的级别。总是给3-7评分的人的排名会被总是给1或10评分的人黯然失色。

a或b更可行。


我对此表示赞赏,但我认为,如果我确保每张图片获得相等的票数,则应该平均。麻烦的是,我想每张图像需要大约10票,根据上面的数字,这需要我13年。到那时我将再获得500万张图片:)
保罗·迪克森

1
由于人们倾向于平均水平或高/低水平,因此,如果您决定这样做,我建议您减少到1-5,而不是1-10。
Bill K

3

哇,我迟到了。

我非常喜欢ELO系统,但是就像欧文(Owen)所说,在我看来,建立任何重要成果的速度很慢。

我相信人类比仅仅比较两个图像具有更大的能力,但是您希望将交互保持在最低限度。

那么,如何显示n张图像(n是可以在屏幕上显示的任意数字,取决于用户的偏好,可以是10、20、30),然后让他们选择他们认为最合适的图像。现在回到ELO。您需要修改评分系统,但要保持同样的精神。实际上,您已将一个图像与n-1个图像进行了比较。因此,您要对ELO进行n-1次评级,但应将评级的变化除以n-1以匹配(这样,具有不同n值的结果将彼此一致)。

你完成了。您现在拥有了世界上最好的。一个简单的评分系统,只需单击一下即可处理许多图像。


3

如果您喜欢使用“选择A或B”策略,我会推荐这篇论文:http : //research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

Chen,X.,Bennett,PN,Collins-Thompson,K.,&Horvitz,E.(2013年2月)。众包环境中的成对排名聚合。在第六届ACM国际Web搜索和数据挖掘会议论文集(第193-202页)中。ACM。

本文介绍了Crowd-BT模型,该模型将著名的Bradley-Terry成对比较模型扩展到了众包环境中。它还提供了一种自适应学习算法,以提高模型的时间和空间效率。您可以在Github上找到该算法的Matlab实现(但我不确定它是否有效)。



1

选择A-or-B是最简单且不易产生偏见的方法,但是,在每次人与人之间的互动中,它都会为您提供较少的信息。我认为,由于减少了偏见,Pick优越,并且在一定程度上为您提供了相同的信息。

一个非常简单的计分方案是为每个图片计数。当有人给出一个正比较结果时,计数​​增加,当有人给出一个负比较结果时,计数​​减小。

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

就是说,问题很不恰当-您需要50天才能显示每个图像一次。

我敢打赌,尽管您对排名最高的图像更感兴趣?因此,您可能希望按预测的排名来偏向图像检索-因此,您更有可能显示已经取得了一些积极比较的图像。这样,您将更快地开始显示“有趣”的图像。


我可以通过页面浏览量查看初始排名,这可能也会有所帮助。
Paul Dixon

那应该说“种子”,而不是“看到”!
Paul Dixon

可能是“从4中选出最好的”,然后将其计为每个投票的3对成对排名
Endolith

1

我喜欢快速排序选项,但是我会花几个星期的时间:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.