一尘不染

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

algorithm

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

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

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

你会 怎么 做?

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


阅读 264

收藏
2020-07-28

共1个答案

一尘不染

就像其他人所说的那样,排名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这样的常数)。

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

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

2020-07-28