83

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

这样做的好方法是什么?

  • 热或不风格?即显示单个图像,要求用户从 1-10 对其进行排名。正如我所看到的,这可以让我对分数进行平均,我只需要确保我在所有图像中获得均匀分布的选票。实施起来相当简单。
  • 选择 A 或 B吗?即显示两张图片,让用户选择更好的一张。这很有吸引力,因为没有数字排名,这只是一个比较。但是我将如何实现它?我的第一个想法是将其作为快速排序进行,比较操作由人工提供,一旦完成,只需无限重复排序即可。

你会怎么做?

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

4

12 回答 12

100

正如其他人所说,排名 1-10 并没有那么好,因为人们有不同的级别。

Pick A-or-B方法的问题在于它不能保证系统是传递的(A 可以击败 B,但 B 击败 C,并且 C 击败 A)。 使用非传递比较运算符会破坏排序算法。使用快速排序,在此示例中,未选择作为基准的字母将被错误地相互排列。

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

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

Elo 球员评分系统将球员的比赛记录与对手的比赛记录进行比较,并确定球员赢得比赛的概率。这个概率因素根据每场比赛的结果决定了球员的评分上升或下降了多少分。当玩家击败评分较高的对手时,玩家的评分会比他或她击败评分较低的玩家时上升得更多(因为玩家应该击败评分较低的对手)。

Elo系统:

  1. 所有新玩家开始时的基本评分为1600
  2. WinProbability = 1/(10^((对手当前评分-玩家当前评分)/400) + 1)
  3. ScoringPt = 1 分,如果他们赢了比赛,如果他们输了,0 分,平局 0.5 分。
  4. 玩家新评分 = 玩家旧评分 + (K-Value * (ScoringPt–玩家获胜概率))

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

使用这种方法,您只需要为每张图片保留一个数字,这比将每张图片的各个等级保持到其他图片的内存密集度要少得多。

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

于 2008-10-02T23:05:05.187 回答
40

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

有各种尝试来解决这个问题 - 查看每个时间段的正票数量,对最近的投票进行加权,对旧票实施衰减系统,计算正票与反对票的比率等。大多数都存在其他缺陷。

最好的解决方案——我认为——是网站The Funniest The CutestThe FairestBest Thing使用的一个改进的 Condorcet 投票系统

系统给每个人一个数字,根据它所面临的事情,它通常击败的事情的百分比。所以每个人得到百分比分数 NumberOfThingsIBeat / (NumberOfThingsIBeat + NumberOfThingsThatBeatMe)。此外,在将它们与集合中的合理百分比进行比较之前,它们会被禁止出现在顶部列表中。

如果集合中有一个 Condorcet 获胜者,此方法将找到它。由于这不太可能,考虑到统计性质,它会找到最接近孔多塞赢家的那个。

有关实施此类系统的更多信息,请访问Ranked Pairs上的 Wikipedia 页面。

该算法要求人们比较两个对象(您的 Pick-A-or-B 选项),但坦率地说,这是一件好事。我相信,在决策理论中,人类在比较两个对象方面比在抽象排名方面要好得多。数百万年的进化使我们擅长从树上摘下最好的苹果,但在决定我们摘下的苹果与真正的柏拉图式苹果树的紧密程度时却很糟糕。(顺便说一下,这就是为什么层次分析过程如此出色的原因……但这有点离题了。)

最后要说明的一点是,SO 使用一种算法来寻找最佳答案,这与bash.org寻找最佳报价的算法非常相似。它在这里运行良好,但在那里非常失败 - 很大程度上是因为这里可能会编辑一个旧的、高度评价但现在已经过时的答案。bash.org 不允许编辑,即使你可以编辑关于现在过时的网络模因的十年前笑话,也不清楚你如何去编辑......无论如何,我的观点是正确的算法通常取决于你的问题的细节。:-)

于 2008-10-02T22:46:26.480 回答
12

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

我会看看微软研究院开发的 TrueSkill 系统。它类似于 ELO,但收敛时间要快得多(与线性相比看起来是指数型的),因此您可以从每次投票中获得更多收益。然而,它在数学上更复杂。

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

于 2009-12-16T18:06:44.180 回答
8

我不喜欢Hot-or-Not 风格。即使他们都喜欢完全相同的图像,不同的人也会选择不同的数字。我也讨厌满分 10 分,我永远不知道该选择哪个数字。

Pick A-or-B更加简单有趣。您可以看到两张图片,并在网站上的图片之间进行比较。

于 2008-10-02T22:20:04.060 回答
5

这些来自Wikipedia的方程式使得计算 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。

于 2008-12-24T13:42:48.240 回答
4

您可能想要组合使用。

第一阶段:Hot-or-not 风格(尽管我会选择 3 个选项投票:糟透了,Meh/OK。酷!)

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

然后,您可以使用英式足球的晋级和降级系统将前几名“糟糕”移动到 Meh/OK 区域,以优化边缘情况。

于 2008-10-02T22:14:47.553 回答
4

排名1-10是行不通的,每个人的等级不一样。总是给出 3-7 分的人的排名会被总是给出 1 或 10 分的人所掩盖。

a-or-b 更可行。

于 2008-10-02T22:26:04.717 回答
3

哇,我游戏迟到了。

我非常喜欢 ELO 系统,但就像欧文所说的那样,在我看来,你会慢慢建立任何重要的结果。

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

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

你完成了。你现在拥有了世界上最好的。一个简单的评级系统,一键处理许多图像。

于 2011-03-05T05:26:52.830 回答
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 网络搜索和数据挖掘国际会议论文集上(第 193-202 页)。ACM。

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

于 2015-05-17T03:01:03.677 回答
2

已停业的网站 whatsbetter.com 使用了Elo 风格的方法您可以在 Internet Archive 上的常见问题解答中阅读有关该方法的信息。

于 2008-12-19T06:36:10.387 回答
1

选择 A-or-B是最简单且不易产生偏见的,但是在每次人际互动中,它给您的信息会大大减少。我认为由于减少了偏差,Pick 更出色,并且在有限的范围内它为您提供了相同的信息。

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

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

也就是说,这个问题是相当不合适的——你需要 50 天的时间才能将每张图像显示一次。

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

于 2008-10-02T22:27:51.453 回答
1

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

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

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

于 2009-05-07T17:04:13.937 回答