1. ホーム
  2. algorithm

[解決済み] クラウドソーシングで100万枚の画像をランク付けする方法

2023-06-04 05:21:58

質問

風景写真のコレクションを、サイト訪問者が評価できるようなゲームを作ってランキングし、人々が最も魅力的だと思う画像を見つけたいと思います。

そのための良い方法は何でしょうか?

  • ホット・オア・ノット・スタイル ? すなわち、1つの画像を表示し、ユーザーに1~10までのランク付けを求めます。私が思うに、これはスコアを平均化することを可能にし、私はすべての画像にわたって投票の均一な分布を得ることを確実にする必要があります。実装は非常に簡単です。
  • AかBを選ぶ ? つまり、2つの画像を表示し、より良い方を選んでもらう。これは、数値的なランキングではなく、単なる比較なので、魅力的です。しかし、どのように実装すればいいのでしょうか?私が最初に考えたのは、クイックソートのように、比較操作を人間が行い、完了したらソートを無限に繰り返すだけというものでした。

どのようにしたら あなた をするのでしょうか?

数字が必要な場合は、毎日 20,000 人の訪問者があるサイトで、100 万枚の画像について話しています。議論のために、私が 1 日に 2,000 件の人間の並べ替え操作を生成できるとしましょう! これは非営利のウェブサイトであり、好奇心旺盛な人は私のプロフィールから見つけることができるだろう:)

どのように解決するのですか?

他の方もおっしゃっているように、人によってレベルが違うので、1~10のランキングはそれほどうまくいきません。

の問題点は AかBを選ぶ メソッドの問題点は、システムが推移的であることが保証されていないことです(AはBに勝つことができますが、BはCに勝ち、CはAに勝つことができます)。 非遷移的な比較演算子を持つとソートアルゴリズムが壊れる . クイックソートでは、この例に対して、ピボットとして選択されていない文字は、互いに対して誤ってランク付けされることになります。

任意の時点で、あなたはすべての絵の絶対的な順位を求めます(一部/全部が同点であっても)。 また、順位が変化しないようにしたい の投票がない限り .

私なら AかBを選ぶ(または同点) メソッドと同じように順位を決定します。 Eloレーティングシステム という、2人用ゲーム(元々はチェス)のランキングに使われるに似た方法でランキングを決定します。

<ブロッククオート

Elo プレイヤーレーティングシステムは は、プレイヤーの試合記録と対戦相手の試合記録を比較し 対戦相手の戦績を比較し を比較し、その対戦に勝利する確率を算出するものです。 勝率を算出します。この この確率によって この確率によって、各対戦の結果、選手のレーティングが何点上がるか、下がるか 各試合の結果によって を決定する。レーティングが高い相手に勝つと より高いレーティングの相手に勝つと より高いレーティングの相手に勝つと、より高くレーティングされます。 レーティングの高い相手に勝つと、レーティングの低い相手に勝つよりも レーティングが上がる(プレイヤーはレーティングの低い相手を倒すべきなので より低いレーティングの相手を倒すべき レーティングを上げることができます。)

Eloシステム。

  1. すべての新規プレイヤーは、基本レーティングが 1600
  2. 勝率 = 1/(10^((相手の現在のレーティング-プレイヤーの現在のレーティング)/400) + 1)
  3. ScoringPt = 試合に勝てば1点、負ければ0点、引き分けなら0.5点。
  4. プレイヤーの新しいレーティング = プレイヤーの古いレーティング + (K-Value * (ScorePt-プレイヤーの勝利確率))

player" を写真に置き換えることで、両方の写真のレーティングを数式に基づいて調整する簡単な方法があります。 そして、その数値のスコアを使用してランキングを行うことができます。(ここでいうK値は、大会のレベル("Level")です。 地元の小さな大会では8〜16、大きな招待大会や地域大会では24〜32となります。 20のような定数を使用することもできます)。

この方法では、各写真について 1 つの番号を保持するだけでよく、他の写真に対する各写真の個別のランクを保持するよりもはるかに少ないメモリ消費量です。

編集:コメントに基づいて、もう少し肉を追加しました。