크라우드 소싱 정렬로 백만 개의 이미지 순위를 매기는 방법


83

사람들이 가장 매력적으로 여기는 이미지를 찾기 위해 사이트 방문자가 평가할 수있는 게임을 만들어 풍경 이미지 모음의 순위를 매기고 싶습니다.

그렇게하는 좋은 방법은 무엇입니까?

  • Hot-or-Not 스타일 ? 즉, 단일 이미지를 표시하고 사용자에게 1-10의 순위를 지정하도록 요청합니다. 제가보기에 이것은 점수의 평균을 낼 수있게 해주 며, 모든 이미지에 대해 균등 한 투표 분포를 얻도록하기 만하면됩니다. 구현이 상당히 간단합니다.
  • A- 또는 -B를 선택 하시겠습니까? 즉, 두 개의 이미지를 표시하고 사용자에게 더 나은 이미지를 선택하도록 요청합니다. 숫자 순위가 없기 때문에 매력적입니다. 단지 비교 일뿐입니다. 하지만 어떻게 구현할까요? 내 첫 번째 생각은 인간이 비교 작업을 제공하는 퀵 정렬로 수행하고 완료되면 단순히 정렬 ad-infinitum을 반복하는 것입니다.

어떻게 것입니다 당신이 그것을 할?

숫자가 필요하다면 매일 20,000 회 방문하는 사이트에서 백만 개의 이미지에 대해 이야기하고 있습니다. 나는 논쟁을 위해 작은 비율이 게임을 할 것이라고 상상하고, 하루에 2,000 개의 인간 정렬 작업을 생성 할 수 있다고 가정하자! 비영리 웹 사이트이며, 호기심 많은 사람들은 내 프로필을 통해 찾을 수 있습니다. :)


1
나는 다음과 같은 GAE를 사용하는 장난감 응용 프로그램을 작성했습니다 : rank.appspot.com . 독립적으로 개발했지만 ELO의 변형으로 퇴화되는 것으로 의심되는 각 항목에 대해 운동량 개념을 사용합니다. python src를 공유해 주시면 감사하겠습니다.
freespace

@freespace 알고리즘에 대한 Python 소스를보고 싶습니다.
akaihola

이 프로젝트에서 신경망을 설정하고 (물론 재미를 위해) Pick A-or-B 입력을 사용하여 네트워크를 훈련 시켜야 합니다. 아마도 당신은 신경망이 많은 훈련을 거친 후에 가장 아름다운 것을 선택할 수있을 것입니다.
Martijn Courteaux 2011 년

답변:


96

다른 사람들이 말했듯이 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- 값 * (점수 점수 – 플레이어의 승 확률))

"플레이어"를 그림으로 바꾸면 공식에 따라 두 그림의 등급을 간단하게 조정할 수 있습니다. 그런 다음 해당 숫자 점수를 사용하여 순위를 지정할 수 있습니다. (여기서 K-Value는 토너먼트의 "레벨"입니다. 소규모 지역 토너먼트의 경우 8-16이고 대규모 초대 / 지역의 경우 24-32입니다. 20과 같은 상수를 사용할 수 있습니다.)

이 방법을 사용하면 각 사진에 대해 하나의 숫자 만 유지하면됩니다. 이는 각 사진의 개별 순위를 서로 다른 사진에 유지하는 것보다 훨씬 적은 메모리 집약적입니다.

편집 : 의견에 따라 고기를 조금 더 추가했습니다.


3
이동성은 전혀 중요하지 않습니다. 당신은 사람들의 의견을 모으고 싶을 뿐이고 그들이 순위에 동의하지 않을 것이라고 기대할 것입니다. 사람들은 시끄러운 데이터 소스이며 일관성이 없습니다.
Owen

4
내 요점은 A> B> C> A가있는 경우 단순히 ">"를 비교로 사용하는 것이 문제가된다는 것입니다. 더 이상 투표하는 사람이 없습니다. 내 대답은이 문제에 대한 해결책을 제공합니다.
Laplie Anderson

1
퀵 정렬을 사용하라는 내 제안에서 뼈를 선택하고 Elo에 대한 멋진 그림을 포함하므로 이것을 받아 들여지는 답변으로 표시하고 있습니다.
Paul Dixon

6
elo 시스템은 확실히 A / B 방법의 순위를 매기는 방법입니다. 그러나 위의 증분 방법보다 더 나은 방법을 사용하는 것이 좋습니다. : Bayeselo에서 찾아 보게 remi.coulom.free.fr/Bayesian-Elo
Fantius

시간의 인터넷 검색 후 : 일로 평가 시스템의 명확한 이해 있어요
daksh21ubuntu을

40

문제에 대한 대부분의 순진한 접근 방식에는 몇 가지 심각한 문제가 있습니다. 최악의 경우는 bash.orgqdb.us 가 따옴표를 표시 하는 방법입니다. 사용자는 따옴표를 위로 (+1) 또는 아래로 (-1) 투표 할 수 있으며 최고 따옴표 목록은 총 순 점수를 기준으로 정렬됩니다. 이것은 끔찍한 시간 편견으로 고통받습니다. 오래된 인용문은 약간 유머러스하더라도 단순한 수명을 통해 엄청난 수의 긍정적 인 투표를 축적했습니다. 이 알고리즘은 농담이 나이가 들어감에 따라 더 재미있어졌지만-저를 믿으십시오-그렇지 않다면 의미가있을 수 있습니다.

이 문제를 해결하기위한 다양한 시도가 있습니다. 기간 당 긍정적 인 투표 수를보고, 최근 투표에 가중치를 부여하고, 오래된 투표에 대한 감쇄 시스템을 구현하고, 긍정적 인 투표와 부정적 투표의 비율을 계산하는 등 대부분의 다른 결함이 있습니다.

가장 좋은 해결책은 웹 사이트 The Funniest The Cutest , The Fairest , Best Thing에서 사용하는 수정 된 Condorcet 투표 시스템입니다 .

시스템은 직면 한 것들 중 보통이기는 비율을 기준으로 각각에 숫자를 부여합니다. 따라서 각각은 백분율 점수 NumberOfThingsIBeat / (NumberOfThingsIBeat + NumberOfThingsThatBeatMe)를 얻습니다. 또한 세트의 합리적인 비율과 비교 될 때까지 항목이 최상위 목록에서 제외됩니다.

세트에 Condorcet 우승자가있는 경우이 방법으로 찾을 수 있습니다. 통계적 성격을 감안할 때 그럴 가능성은 낮기 때문에 Condorcet 승자가되는 데 "가장 가까운"사람을 찾습니다.

이러한 시스템 구현에 대한 자세한 내용은 랭킹 페어 의 Wikipedia 페이지 가 도움이 될 것입니다.

알고리즘은 사람들이 두 개체를 비교하도록 요구하지만 (Pick-A-or-B 옵션) 솔직히 그것은 좋은 것입니다. 인간이 추상적 인 순위에있는 것보다 두 대상을 비교하는 데 훨씬 더 뛰어나다는 것이 의사 결정 이론에서 매우 잘 받아 들여지고 있다고 생각합니다. 수백만 년의 진화를 통해 우리는 나무에서 가장 좋은 사과를 고르는 데 능숙하지만, 우리가 고른 사과가 사과의 진정한 플라톤 형태에 얼마나 가깝게 갈지 결정하는 것은 끔찍합니다. (이것이 분석 계층 구조 프로세스 가 그토록 멋진 이유입니다 ...하지만 주제에서 약간 벗어난 것입니다.)

마지막으로해야 할 점은 SO가 bash.org 의 알고리즘 과 매우 유사한 최상의 답변 을 찾기 위해 알고리즘을 사용하여 최상의 견적을 찾는 것입니다. 여기에서는 잘 작동하지만 끔찍하게 실패합니다. 왜냐하면 오래되고 높은 등급을 받았지만 지금은 구식 답변이 편집 될 가능성이 높기 때문입니다. bash.org는 편집을 허용하지 않으며, 가능하더라도 지금까지 사용 된 인터넷 밈에 대한 10 년 된 농담을 편집하는 방법도 명확하지 않습니다. 문제의 세부 사항에 따라 다릅니다. :-)


Condorcet 투표 시스템을 참조 해주셔서 감사합니다.이 유용한 위키피디아 페이지 en.wikipedia.org/wiki/Ranked_Pairs
Paul Dixon

이 사이트는 "파손"되어 이후 버려 졌다고 말했습니다. 알고리즘이 버그가 있는지 아니면 구현에 불과한지 모르겠습니다.
endolith

11

이 질문이 꽤 오래되었다는 것을 알고 있지만 기여할 것이라고 생각했습니다.

Microsoft Research에서 개발 한 TrueSkill 시스템을 살펴 보겠습니다. ELO와 비슷하지만 훨씬 더 빠른 수렴 시간 (선형에 비해 기하 급수적으로 보임)을 가지므로 각 투표에서 더 많은 것을 얻을 수 있습니다. 그러나 수학적으로는 더 복잡합니다.

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


TrueSkill의 개념은 "일치"를 기반으로 항목의 순위를 매길 수있는 많은 가능성을 제공합니다. Bing은 유사한 개념을 사용하여 관련 광고를 제공합니다. Moserware.com/2010/03/computing-your-skill.html
Jeff Moser

8

나는 Hot-or-Not 스타일이 싫다 . 다른 사람들은 이미지가 똑같은 것을 좋아하더라도 다른 숫자를 선택합니다. 또한 저는 10 점 만점에 점수를 매기는 것이 싫고 어떤 숫자를 선택해야할지 모릅니다.

A-or-B 선택 은 훨씬 더 간단하고 재미 있습니다. 두 개의 이미지가 표시되고 사이트의 이미지를 비교합니다.


5

Wikipedia의 이러한 방정식은 Elo 등급을 계산하는 데 더 간단하고 효과적이며 이미지 A와 B에 대한 알고리즘은 간단합니다.

  • 데이터베이스에서 Ne, mA, mB 및 RA, RB 등급을 가져옵니다.
  • 수행 된 비교 횟수 (Ne)와 해당 이미지가 비교 된 횟수 (m) 및 현재 등급을 사용하여 KA, KB, QA, QB를 계산합니다.

케이

QA

QB

  • EA와 EB를 계산합니다.

EA

EB

  • 승자의 S 득점 : 승자는 1, 패자는 0, 무승부는 0.5,
  • 다음을 사용하여 두 가지 모두에 대한 새 등급을 계산합니다. 새로운 등급

  • 새 등급 RA, RB를 업데이트하고 데이터베이스에서 mA, mB를 계산합니다.


4

조합으로 갈 수 있습니다.

첫 번째 단계 : Hot-or-not 스타일 (3 가지 옵션 투표 : Sucks, Meh / OK. Cool!)

세트를 3 개의 버킷으로 분류 한 다음 동일한 버킷에서 두 개의 이미지를 선택하고 "Which is nicer"로 이동합니다.

그런 다음 영국 축구 승진 및 강등 시스템을 사용하여 상위 몇 개의 "Sucks"를 Meh / OK 영역으로 이동하여 가장자리 케이스를 다듬을 수 있습니다.


4

1-10 순위는 작동하지 않으며 모든 사람은 다른 수준을 가지고 있습니다. 항상 3-7 점을주는 사람은 항상 1 점이나 10 점을주는 사람들이 그의 순위를 가릴 것입니다.

a-or-b가 더 실행 가능합니다.


감사합니다.하지만 각 이미지가 동일한 수의 투표를 받으면 평균을 내야한다고 생각했습니다. 문제는 각 이미지에 대해 약 10 표가 필요하다는 것입니다. 위의 숫자를 기준으로하면 13 년이 걸립니다. 그때까지 5 백만 개의 이미지가 더
Paul Dixon

1
사람들은 평균 또는 높음 / 낮음으로가는 경향이 있으므로 그렇게하기로 결정하면 1-10 대신 1-5로 줄이는 것이 좋습니다.
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 월). 크라우드 소싱 설정에서 쌍별 순위 집계. 웹 검색 및 데이터 마이닝에 관한 제 6 차 ACM 국제 회의의 회보 (pp. 193-202). ACM.

이 논문은 유명한 Bradley-Terry 쌍 비교 모델을 crowdsource 설정으로 확장 한 Crowd-BT 모델 에 대해 설명 합니다. 또한 모델의 시간 및 공간 효율성을 향상시키는 적응 형 학습 알고리즘을 제공합니다. Github 에서 알고리즘의 Matlab 구현을 찾을 수 있습니다 (하지만 작동하는지 확실하지 않습니다).



1

A- 또는 -B를 선택하는 것이 가장 간단하고 편견이 적습니다. 그러나 각 인간 상호 작용에서 실질적으로 적은 정보를 제공합니다. 편향 감소로 인해 Pick이 우수하고 한계에서 동일한 정보를 제공한다고 생각합니다.

매우 간단한 채점 체계는 각 사진에 대한 개수를 갖는 것입니다. 누군가가 양수 비교를하면 개수가 증가하고 누군가가 음수 비교를하면 개수가 감소합니다.

백만 개의 정수 목록을 정렬하는 것은 매우 빠르며 최신 컴퓨터에서는 1 초도 채 걸리지 않습니다.

즉, 문제는 다소 잘못되었습니다. 각 이미지를 한 번만 표시하는 데 50 일이 걸립니다.

당신이 가장 높은 순위의 이미지에 더 관심이 있다고 확신합니까? 따라서 예측 된 순위에 따라 이미지 검색을 편향시킬 수 있으므로 이미 몇 가지 긍정적 인 비교를 달성 한 이미지를 표시 할 가능성이 더 큽니다. 이렇게하면 '흥미로운'이미지를 더 빨리 보여줄 수 있습니다.


페이지 뷰로 초기 순위를 볼 수 있는데,이 역시 도움이 될 수 있습니다.
Paul Dixon

"see"가 아니라 "seed"라고해야합니다!
Paul Dixon

"4 개 중 최고를 선택"할 수 있으며 각 투표에 대해 3 개의 쌍별 순위로 계산됩니다
endolith

1

빠른 정렬 옵션이 마음에 들지만 몇 주를 만들겠습니다.

  • "비교"결과를 DB에 보관하고 평균을 내십시오.
  • 사용자에게 4-6 개의 이미지를 제공하고 정렬하도록하여 뷰당 하나 이상의 비교를 얻습니다.
  • qsort를 실행하고 데이터가 충분하지 않은 것을 기록하고 트리밍하여 표시 할 이미지를 선택합니다. 그런 다음 기록 된 항목이 충분하면 페이지를 뱉어 내십시오.

다른 재미있는 옵션은 군중을 사용하여 신경망을 가르치는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.