web-dev-qa-db-ja.com

クラウドソーシングで100万枚の画像をランク付けする方法

風景画像のコレクションをランク付けして、サイトの訪問者がそれらを評価できるゲームを作成して、どの画像が最も魅力的であるかを見つけたいと思います。

それを行う良い方法は何でしょうか?

  • Hot-or-Notスタイル?つまり1つの画像を表示し、ユーザーに1〜10のランク付けを依頼します。私が見ているように、これは私がスコアを平均化することを可能にし、私は私がすべての画像にわたって均等な票を得ることを確実にする必要があるだけです。実装はかなり簡単です。
  • ピックA-or-B?つまり2つの画像を表示し、ユーザーに適切な画像を選択するよう依頼します。数値ランキングがないため、これは単なる比較なので、これは魅力的です。しかし、それをどのように実装しますか?私の最初の考えは、人間によって提供される比較操作でクイックソートとしてそれを行うことであり、完了したら、ソートを無限に繰り返すだけでした。

あなたはどうしますか?

数値が必要な場合、1日あたり20,000回の訪問があるサイトで約100万枚の画像について話しています。議論のために、ごく一部がゲームをプレイする可能性があると思いますが、1日あたり2,000の人間の並べ替え操作を生成できるとしましょう。それは非営利のウェブサイトであり、最終的に興味がある人は私のプロフィールからそれを見つけるでしょう:)

83
Paul Dixon

他の人が言ったように、人々が異なるレベルを持っているので、1-10のランキングはそれほどうまく機能しません。

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

常に、すべての写真の絶対ランキングが必要です(たとえそれらの一部またはすべてが関連付けられている場合でも)。また、誰かが投票しない限りランキングが変更されないようにしたい

Pick A-or-B(or tie)メソッドを使用しますが、ランキングに使用される Eloレーティングシステム と同様のランキングを決定します2プレイヤーゲーム(当初はチェス):

Eloプレーヤー評価システムは、プレーヤーの対戦記録を対戦相手の対戦記録と比較し、プレーヤーが対戦に勝つ確率を決定します。この確率係数は、各試合の結果に基づいて、プレイヤーの評価が上昇または下降するポイント数を決定します。プレイヤーがレーティングの高い対戦相手を倒すと、プレイヤーのレーティングは、レーティングの低いプレイヤーを倒した場合よりも高くなります(レーティングの低い対戦相手を倒す必要があるため)。

Eloシステム:

  1. すべての新しいプレーヤーは、1600の基本評価で開始します
  2. WinProbability = 1 /(10 ^((対戦相手の現在のレーティング-プレイヤーの現在のレーティング)/ 400)+ 1)
  3. ScoringPt =勝った場合は1ポイント、負けた場合は0ポイント、引き分けの場合は0.5。
  4. プレーヤーの新しい評価=プレーヤーの古い評価+(K値*(ScoringPt–プレーヤーの勝率))

「プレーヤー」を画像に置き換えると、式に基づいて両方の画像の評価を簡単に調整できます。次に、それらの数値スコアを使用してランキングを実行できます。 (ここでのK-Valueはトーナメントの「レベル」です。小さなローカルトーナメントでは8-16、大きな招待状/地域では24-32です。20のような定数を使用できます)。

この方法では、各画像に対して1つの数値を保持するだけで済みます。これは、各画像の個々のランクを他の画像に対して保持するよりもメモリ消費量がはるかに少ないです。

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

94
Laplie Anderson

問題へのほとんどの素朴なアプローチには、いくつかの深刻な問題があります。最悪は bash.org および qdb.us が引用を表示する方法です-ユーザーは引用を上(+1)または下(-1)に投票でき、最高のリストに投票できます相場はネットスコア合計でソートされています。これは恐ろしい時間バイアスの影響を受けます。たとえ古いユーモアがほんのわずかなユーモラスであったとしても、古いクオートは単純な寿命によって膨大な数のポジティブ投票を蓄積してきました。このアルゴリズムは、年を取ったときにジョークがおかしくなった場合に意味があるかもしれませんが、私を信じてください-そうではありません。

これを修正するためのさまざまな試みがあります-期間ごとの正票の数を調べ、最近の票に重みを付け、古い票に減衰システムを実装し、正票と負票の比率を計算します。他の欠陥のほとんどは苦しんでいます。

最善の解決策-私は思う-はウェブサイト The FunniestThe CutestThe FairestBest Thing 使用-a 変更されたCondorcet投票システム

システムは、直面している事柄のうち、彼らが通常何パーセント打つかに基づいて、それぞれに番号を付けます。したがって、それぞれにパーセンテージスコアNumberOfThingsIBeat /(NumberOfThingsIBeat + NumberOfThingsThatBeatMe)が取得されます。また、セットの妥当なパーセンテージと比較されるまで、上位のリストから除外されます。

セットにCondorcetの勝者がいる場合、このメソッドはそれを見つけます。それはありそうもないので、統計的な性質を考えると、コンドルセの勝者であることに「最も近い」ものを見つけます。

そのようなシステムの実装に関する詳細については、Wikipediaのページ Ranked Pairs が役立つはずです。

このアルゴリズムでは、2つのオブジェクトを比較する必要があります(Pick-A-or-Bオプション)。しかし、率直に言って、それは良いことです。人間は抽象的なランキングよりも2つのオブジェクトを比較する方がはるかに優れていることは、決定理論では非常によく受け入れられていると思います。何百万年にもわたる進化のおかげで、最高のApple=を選択することができますが、Appleを選択したときの真のプラトニックにどれだけ近いかを判断することは非常に困難です。りんごの形(ちなみに、これが Analytic Hierarchy Process がとても気の利いた理由です...でも、少し話題から外れています)。

最後に、SOは bash.org のアルゴリズムと非常によく似たアルゴリズムを使用して最良の回答を見つけることです。ここではうまく機能しますが、そこではひどく失敗します。主に、古くて高い評価が付けられているが、ここでは古い回答が編集されている可能性が高いためです。bash.orgでは編集が許可されていません。 10年前の時代遅れのインターネットミームに関するジョークを編集できたとしても...いずれにせよ、適切なアルゴリズムは通常、問題の詳細に依存するというのが私のポイントです。

40
Cody Hatch

私はこの質問がかなり古いことを知っていますが、私は貢献したいと思いました

Microsoft Researchで開発されたTrueSkillシステムを見てみましょう。これはELOに似ていますが、収束時間がはるかに速いため(線形と比較して指数関数的に見えます)、各投票からより多くを得ることができます。ただし、数学的にはより複雑です。

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

11
user233179

Hot-or-Notスタイルは好きではありません。まったく同じ画像を気に入ったとしても、人によって異なる番号が選択されます。また、私は10点満点で評価するのが嫌いです。

Pick A-or-Bの方がずっと単純で面白いです。 2つの画像が表示され、サイト上の画像間で比較が行われます。

8
Jeremy Ruten

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

ランキング1〜10は機能しません。レベルはそれぞれ異なります。常に3-7の評価を与える人は、常に1または10を与える人々によって彼のランキングが隠されるでしょう。

a-or-bの方が実行可能です。

4
Bill K

あなたは組み合わせで行きたいかもしれません。

第1フェーズ:ホットオアノットスタイル(ただし、3つのオプションで投票します。Sucks、Meh/OK、クールです!)

セットを3つのバケットに分類したら、同じバケットから2つの画像を選択し、「どちらがいいか」を選択します。

次に、英語の昇格と降格のサッカーシステムを使用して、最上位の「Sucks」をMeh/OKリージョンに移動し、Edgeケースを調整します。

4
Chris Cudmore

ピック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年2月)。クラウドソーシング設定でのペアワイズランキング集約。 Web検索とデータマイニングに関する第6回ACM国際会議の議事録(pp。193-202)。 ACM。

この論文では、有名なBradley-Terryペアワイズ比較モデルをクラウドソース設定に拡張したCrowd-BTモデルについて説明しています。また、モデルの時間と空間の効率を向上させる適応学習アルゴリズムも提供します。アルゴリズムのMatlab実装は Github にあります(ただし、動作するかどうかはわかりません)。

3
idailylife

うわー、私はゲームに遅れています。

私はELOシステムがとても好きですが、オーウェンが言うように、重要な結果を構築するのに時間がかかるように思えます。

人間には2つの画像を比較するよりもはるかに大きな容量があると思いますが、相互作用を最小限に抑えたいと考えています。

では、n個の画像(nは画面上に視覚的に表示できる任意の数です。これはユーザーの好みに応じて10、20、30になる可能性があります)を表示して、そのロットで最も良いと思うものを選択してもらいます。 ELOに戻ります。評価システムを変更する必要がありますが、同じ精神を保ちます。実際、1つの画像を他の画像と比較しました。したがって、ELOレーティングをn-1回行いますが、レーティングの変化をn-1で除算して一致させる必要があります(異なるn値の結果が互いに一貫しているようにするため)。

完了です。これですべての世界で最高のものを手に入れました。ワンクリックで多くの画像を扱うシンプルな評価システム。

3
asoundmove

廃止されたWebサイトwhatsbetter.comは Eloスタイルの方法 を使用しました。あなたは彼らの インターネットアーカイブのFAQ で方法について読むことができます。

2
quidnunc

Pick A-or-Bこれは最も単純でバイアスがかかりにくい傾向がありますが、人間との対話ごとに、提供する情報が大幅に少なくなります。バイアスが減ったため、Pickの方が優れており、制限内では同じ情報が得られます。

非常に単純なスコアリングスキームは、各画像のカウントを持つことです。誰かが肯定的な比較を行った場合はカウントを増やし、誰かが否定的な比較を行った場合はカウントを減らします。

100万の整数リストのソートは非常に高速で、最新のコンピューターでは1秒もかかりません。

とはいえ、問題はかなりおかしいです-各画像を1回だけ表示するには50日かかります。

最も高いランクの画像にもっと興味がありますか?したがって、おそらく予測ランクによって画像検索にバイアスをかけたいと思うでしょう。そのため、すでにいくつかの肯定的な比較を達成した画像を表示する可能性が高くなります。これにより、「興味深い」画像の表示をよりすばやく開始できます。

1
Owen

私はクイックソートオプションが好きですが、数週間は作成します。

  • 「比較」結果をDBに保持し、それらを平均します。
  • ユーザーに4〜6個の画像を提供し、それらを並べ替えることで、ビューごとに複数の比較を取得します。
  • Qsortを実行し、十分なデータがないものを記録およびトリミングして、表示する画像を選択します。次に、十分な数のアイテムが記録されたら、ページを吐き出します。

他の楽しいオプションは、群衆を使用してニューラルネットを教えることです。

1
BCS