Як класифікувати мільйон зображень за допомогою сортування з використанням краудсорсингу


83

Я хотів би класифікувати колекцію пейзажних зображень, склавши гру, за допомогою якої відвідувачі сайту можуть оцінювати їх, щоб з’ясувати, які образи люди вважають найбільш привабливими.

Що було б хорошим методом для цього?

  • Гарячий чи ні-стиль ? Тобто покажіть одне зображення, попросіть користувача оцінити його з 1-10. Як я бачу, це дозволяє мені усереднювати бали, і мені просто потрібно було б забезпечити рівномірний розподіл голосів на всіх зображеннях. Досить простий у реалізації.
  • Виберіть A-or-B ? Тобто показують два зображення, попросіть користувача вибрати краще. Це приваблює, оскільки немає числового рейтингу, це лише порівняння. Але як би я це реалізував? Моя перша думка полягала в тому, щоб зробити це як швидку сортування, причому операції порівняння забезпечували люди, а після завершення просто повторити сортування ad-infinitum.

Як би ти це зробив?

Якщо вам потрібні цифри, я говорю про мільйон зображень на сайті з 20 000 відвідувань щодня. Я гадаю, невелика частина може грати у цю гру, заради аргументу, скажімо, я можу заробляти 2000 операцій сортування людей на день! Це некомерційний веб-сайт, і остаточно цікаві знайдуть його через мій профіль :)


1
Я написав іграшкову програму з використанням GAE, яка робить щось подібне: rank.appspot.com . Він використовує концепцію імпульсу для кожного елемента, який, на мою думку, перероджується у варіант ELO, хоча я розробляв його самостійно. Будемо раді поділитися python src.
freespace

@freespace Мені було б цікаво побачити джерело Python для вашого алгоритму.
akaihola

Можливо, з цим проектом вам слід спробувати створити нейронну мережу (звичайно, для розваги) і використовувати вхід Pick A-or-B для навчання мережі. Можливо, ви, неймовірна мережа, зможете вибрати найкрасивішу, після довгих тренувань.
Martijn Courteaux

Відповіді:


96

Як казали інші, рейтинг 1-10 працює не так добре, оскільки люди мають різний рівень.

Проблема методу Pick A-or-B полягає в тому, що не гарантується, що система буде транзитивною (A може перемогти B, але B перемагає C, а C перемагає A). Наявність нетранзитивних операторів порівняння порушує алгоритми сортування . У випадку швидкого сортування, проти цього прикладу, літери, не вибрані як опорні, будуть неправильно ранжировані одна проти одної.

У будь-який момент вам потрібен абсолютний рейтинг усіх фотографій (навіть якщо деякі / всі вони пов’язані). Ви також хочете, щоб ваш рейтинг не змінювався, якщо хтось не проголосує .

Я б скористався методом Pick A-or-B (або tie) , але визначив рейтинг, подібний до рейтингової системи Elo, яка використовується для рейтингу в партіях для двох гравців (спочатку шахи):

Система рейтингу гравців 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).

За допомогою цього методу вам потрібно зберегти лише одне число для кожного зображення, що набагато менше вимагає пам'яті, ніж збереження окремих рядків кожного зображення один до одного.

EDIT: Додано трохи більше м’яса на основі коментарів.


3
Транзитивність взагалі не має значення. Ви просто хочете об'єднати думку людей, і ви очікуєте, що вони не погодиться щодо рейтингу. Люди є галасливим джерелом даних і непослідовним.
Оуен,

4
моя суть в тому, що якщо у вас A> B> C> A, то просто використання ">" як порівняння є проблемою, оскільки ваше сортування ніколи не закінчиться (правильно), і ваш список буде в постійному стані, навіть якщо більше ніхто не голосує. Моя відповідь пропонує вирішення цієї проблеми.
Лаплі Андерсон,

1
Я позначаю це як прийняту відповідь, оскільки він вибирає кістки з моєї пропозиції використовувати швидкий сорт і включає гарну ілюстрацію Ело.
Пол Діксон,

6
Система elo - це безперечно шлях для ранжування методу A / B. Однак ви також можете скористатися кращим методом, ніж додатковий метод, наведений вище. Погляньте на Баєсело: remi.coulom.free.fr/Bayesian-Elo
Fantius

після гуглиння години отримав чітке розуміння системи рейтингу Elo :)
daksh21ubuntu

40

Більшість наївних підходів до проблеми мають кілька серйозних проблем. Найгірше те, як bash.org та qdb.us відображають котирування - користувачі можуть проголосувати за котирування вгору (+1) або вниз (-1), а список найкращих котирувань сортується за загальним чистим балом. Це страждає від жахливого часового упередження - старі цитати накопичили величезну кількість позитивних голосів завдяки простому довголіття, навіть якщо вони лише незначно жартівливі. Цей алгоритм може мати сенс, якби жарти ставали веселішими, коли вони старіли, але - повірте, вони цього не роблять.

Існують різні спроби це виправити - дивлячись на кількість позитивних голосів за певний період, зважуючи нещодавні голоси, запроваджуючи систему затухання для старих голосів, обчислюючи відношення позитивних та негативних голосів тощо. Більшість страждають від інших недоліків.

Я вважаю, що найкращим рішенням є те, яке використовують веб-сайти The Funniest The Cutest , The Fairest і Best Thing - модифікована система голосування Condorcet :

Система надає кожному число, виходячи з того, з чим стикалася, скільки відсотків із них вона зазвичай перемагає. Отже, кожен отримує відсотковий бал NumberOfThingsIBeat / (NumberOfThingsIBeat + NumberOfThingsThatBeatMe). Крім того, речі заборонені до верхнього списку, поки їх не порівняють з розумним відсотком від набору.

Якщо у наборі є переможець Condorcet, цей метод знайде його. Оскільки це малоймовірно, враховуючи статистичну природу, він знаходить того, хто є найближчим до переможця Кондорсе.

Для отримання додаткової інформації щодо впровадження таких систем корисною буде сторінка Вікіпедії з рейтинговими парами .

Алгоритм вимагає, щоб люди порівнювали два об'єкти (ваш варіант "вибрати" або "B"), але, чесно кажучи, це добре. Я вважаю, що в теорії прийняття рішень дуже добре прийнято, що люди набагато краще порівнюють два об'єкти, ніж вони мають абстрактний рейтинг. Мільйони років еволюції роблять нас добрими в збиранні найкращого яблука з дерева, але страшним у вирішенні того, наскільки ті яблука, які ми зібрали, відповідають справжній платонічній формі яблуні. (Це, до речі, чому процес аналітичної ієрархії такий витончений ... але це трохи відходить від теми.)

Останнє, що слід сказати, полягає в тому, що SO використовує алгоритм для пошуку найкращих відповідей, який дуже схожий на алгоритм bash.org для пошуку найкращої цитати. Тут це добре працює, але там жахливо не вдається - багато в чому тому, що тут, швидше за все, буде відредагована стара, високо оцінена, але тепер застаріла відповідь. bash.org не дозволяє редагувати, і незрозуміло, як Ви хотіли б навіть редагувати десятилітні давно жарти про давно встановлені меми в Інтернеті, навіть якби могли ... У будь-якому випадку, я хочу сказати, що зазвичай правильний алгоритм залежить від деталей вашої проблеми. :-)


Дякую за посилання на системи голосування Condorcet, цей рядок запитів дозволив мені перейти на цю корисну сторінку wikipedia en.wikipedia.org/wiki/Ranked_Pairs
Пол Діксон,

На цих сайтах говорили, що вони були "зламані" і відтоді від них занедбали. Я не знаю, чи був алгоритм помилковим, чи просто реалізацією.
ендоліт

11

Я знаю, що це запитання досить давнє, але я думав, що внесу свій внесок

Я б подивився на систему TrueSkill, розроблену в Microsoft Research. Це як ELO, але має набагато швидший час конвергенції (виглядає експоненціально порівняно з лінійним), тому ви отримуєте більше від кожного голосування. Однак це математично складніше.

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


Концепції TrueSkill пропонують багато можливостей для ранжування речей на основі "збігів". Подібні концепції використовуються Bing для показу релевантних оголошень. Я багато писав про деталі TrueSkill на moserware.com/2010/03/computing-your-skill.html
Джефф Мозер

8

Мені не подобається стиль Hot-or-Not . Різні люди вибирали б різні цифри, навіть якби їм сподобався образ абсолютно однаково. Крім того, я ненавиджу оцінку речей із 10, я ніколи не знаю, який номер вибрати.

Вибір A-or-B набагато простіший і веселіший. Ви бачите два зображення, і проводиться порівняння зображень на сайті.


5

Ці рівняння з Вікіпедії спрощують / ефективніше розраховують рейтинги Ело, алгоритм для зображень А і В буде простим:

  • Отримайте Ne, mA, mB та оцінки RA, RB зі своєї бази даних.
  • Обчисліть KA, KB, QA, QB, використовуючи кількість виконаних порівнянь (Ne) та кількість випадків, коли це зображення порівнювалось (m), та поточні рейтинги:

К

QA

QB

  • Обчисліть EA та EB.

EA

EB

  • Оцініть S переможця: переможець 1, програв 0, а якщо у вас нічия 0,5,
  • Обчисліть нові рейтинги для обох, використовуючи: Новий рейтинг

  • Оновіть нові рейтинги RA, RB та підрахунки mA, mB у базі даних.


4

Можливо, ви захочете піти з комбінацією.

Перша фаза: стиль "гарячий чи ні" (хоча я хотів би взяти 3 голоси: відстій, Meh / OK. Класно!)

Після того, як ви відсортуєте набір за 3 сегментами, я вибрав би два зображення з одного сегмента і пішов би з пунктом "Що приємніше"

Потім ви можете скористатися англійською футбольною системою просування та зниження для переміщення кількох найкращих «відстійників» у регіон Meh / OK, щоб уточнити крайові випадки.


4

Рейтинг 1-10 не спрацює, кожен має різні рівні. Хтось, хто завжди дає оцінки 3-7, його рейтинг затьмарюють люди, які завжди дають оцінку 1 або 10.

a-or-b є більш працездатним.


Я ціную це, але я вважав, що якщо я гарантую, що кожне зображення отримає однакову кількість голосів, воно повинно бути середнім. Проблема в тому, що, мені здається, мені знадобиться близько 10 голосів за кожне зображення, що на основі наведених вище цифр займе у мене 13 років. На той час я мав би ще 5 мільйонів зображень :)
Пол Діксон,

1
Оскільки люди, як правило, ідуть із середнім або високим / низьким, якщо ви вирішите це зробити, я пропоную вам зменшити до 1-5 замість 1-10.
Білл К

3

Ого, я запізнився в грі.

Мені дуже подобається система ELO, але, як каже Оуен, мені здається, ви б повільно створювали якісь важливі результати.

Я вважаю, що люди мають набагато більший потенціал, ніж просто порівняння двох зображень, але ви хочете звести взаємодію до мінімуму.

Тож як щодо того, щоб ви показали n зображень (n - це будь-яке число, яке ви можете помітно відобразити на екрані, це може бути 10, 20, 30 залежно від уподобань користувача), і змусити їх вибрати, яке, на їх думку, найкраще в цій партії. Тепер повернемось до ELO. Вам потрібно змінити свою систему рейтингу, але зберігати той самий дух. Ви фактично порівняли одне зображення з n-1 іншими. Таким чином, ви робите свій рейтинг ELO n-1 разів, але ви повинні розділити зміну рейтингу на n-1, щоб відповідати (так, щоб результати з різними значеннями n були узгоджені між собою).

Ви закінчили. Ви отримали найкраще з усіх світів. Проста система рейтингу, яка працює з багатьма зображеннями в один клік.


3

Якщо ви віддаєте перевагу використанню стратегії Pick A або B, я рекомендую цей документ: http://research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

Chen, X., Bennett, PN, Collins-Thompson, K., & Horvitz, E. (2013, лютий). Агрегація парного рейтингу в умовах краудсорсингу. У матеріалах шостої міжнародної конференції ACM з веб-пошуку та видобутку даних (стор. 193-202). ACM.

Стаття розповідає про модель Crowd-BT, яка поширює відому модель попарного порівняння Бредлі-Террі на краудсорсинг. Він також надає адаптивний алгоритм навчання для підвищення часової та просторової ефективності моделі. Ви можете знайти реалізацію Matlab алгоритму на Github (але я не впевнений, що це працює).



1

Виберіть A-or-B - найпростіший і менш схильний до упередженості, однак при кожній людській взаємодії він дає вам значно менше інформації. Я думаю, що завдяки зменшенню упередженості, Pick перевершує, і в межах, що надає вам ту саму інформацію.

Дуже проста схема підрахунку - це підрахунок для кожного зображення. Коли хтось дає позитивне порівняльне збільшення, підрахунок, коли хтось дає негативне порівняння, зменшуйте рахунок.

Сортування 1-мільйонного цілочисельного списку відбувається дуже швидко і на сучасному комп’ютері займе менше секунди.

Тим не менш, проблема досить неправильно поставлена ​​- для того, щоб показати кожне зображення лише один раз, вам знадобиться 50 днів.

Б'юсь об заклад, хоча вас більше цікавлять найвищі рейтинги зображень? Отже, ви, мабуть, хочете упереджити отримання зображень за прогнозованим рангом - так ви, швидше за все, покажете зображення, які вже отримали кілька позитивних порівнянь. Таким чином ви швидше просто почнете показувати "цікаві" зображення.


Я бачу початковий рейтинг з переглядами сторінок, що також може допомогти.
Пол Діксон,

це повинно говорити "насіння", а не "бачити"!
Пол Діксон,

це може бути "вибрати найкращого з 4", а потім це зараховується як 3 попарні рейтинги для кожного голосування
ендоліт

1

Мені подобається варіант швидкого сортування, але я зробив кілька твіків:

  • Зберігайте результати "порівняння" в БД, а потім усереднюйте їх.
  • Отримайте більше одного порівняння на одне представлення, надавши користувачеві 4-6 зображень і попросивши їх відсортувати.
  • Виберіть, які зображення відображати, запустивши qsort та записавши та обрізавши все, на чому у вас недостатньо даних. Потім, коли у вас буде записано достатньо елементів, виплюньте сторінку.

Іншим цікавим варіантом було б використання натовпу для навчання нейронної мережі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.