Как ранжировать миллион изображений с помощью краудсорсинга

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

Что было бы хорошим способом сделать это?

  • Стиль Hot-or-Not? То есть показать одно изображение, попросить пользователя оценить его с 1-10. Как я вижу, это позволяет мне усреднять баллы, и мне просто нужно будет обеспечить равномерное распределение голосов по всем изображениям. Довольно просто реализовать.
  • Выбрать A-or-B? То есть показать два изображения, попросить пользователя выбрать лучший. Это привлекательно, поскольку нет численного рейтинга, это просто сравнение. Но как мне его реализовать? Моя первая мысль заключалась в том, чтобы сделать это как быструю сортировку, при этом операции сравнения были предоставлены людьми, и как только они закончились, просто повторите сортировку ad-infinitum.

Как вы это сделаете?

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

Ответ 1

Как говорили другие, рейтинг 1-10 не очень хорошо работает, потому что люди имеют разные уровни.

Проблема с методом Pick A-or-B заключается в том, что она не гарантирована для транзитивности системы (A может бить B, но B бит C, а C - A). Наличие непереходных операторов сравнения ломает алгоритмы сортировки. С быстрой сортировкой, против этого примера, буквы не выбраны в качестве стержня будет неправильно заняли друг против друга.

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

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

Рейтинг игрока Elo система сравнивает записи матчей игроков против матчей противников и определяет вероятность игрок выигрывает матч. Эта фактор вероятности определяет, сколько указывает, что рейтинг игроков идет вверх или вниз по результатам каждого совпадение. Когда игрок побеждает противник с более высоким рейтингом, рейтинг игроков растет больше, чем если он или она победил игрока с более низкий рейтинг (поскольку игроки должны победить противников, которые рейтинги).

Система Elo:

  • Все новые игроки начинают с базового рейтинга 1600
  • WinProbability = 1/(10 ^ ((Противники Текущий рейтинг - Текущий рейтинг игроков)/400) + 1)
  • ScoringPt = 1 балл, если они выиграют матч, 0, если они проиграют, и 0,5 для ничьей.
  • Игроки Новый рейтинг = Игроки Старый рейтинг + (K-Value * (Победившая победа в ScoringPt-Player))

Замените "игроков" на фотографии, и у вас есть простой способ настройки рейтинга обеих картин на основе формулы. Затем вы можете выполнить ранжирование, используя эти числовые оценки. (K-Value здесь "Уровень" турнира: 8-16 для небольших локальных турниров и 24-32 для больших приглашений/регионов. Вы можете просто использовать константу как 20).

С помощью этого метода вам нужно сохранить только один номер для каждого изображения, который намного менее насыщен памяти, чем сохранение отдельных рангов каждого изображения друг на друга.

EDIT: добавлено немного мяса на основе комментариев.

Ответ 2

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

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

Лучшее решение - я думаю, - это то, что веб-сайты The Funniest The Cutest, The Fairest и Лучшая вещь use - a измененная система голосования Condorcet:

Система дает каждому номер, основанный на том, из чего он столкнулся, какой процент из них обычно бьет. Таким образом, каждый получает процентный балл NumberOfThingsIBeat/(NumberOfThingsIBeat + NumberOfThingsThatBeatMe). Кроме того, вещи запрещены из верхнего списка, пока их не сравнили с разумным процентом набора.

Если в наборе есть победитель Condorcet, этот метод найдет его. Поскольку это маловероятно, учитывая статистический характер, он находит тот, который "наиболее близок" к победителю Кондорсе.

Для получения дополнительной информации о внедрении таких систем страница Wikipedia на Ranked Pairs должна быть полезна.

Алгоритм требует, чтобы люди сравнивали два объекта (ваш вариант Pick-A-or-B), но, откровенно говоря, это хорошо. Я считаю очень хорошо принятым в теории принятия решений, что люди значительно лучше сравнивают два объекта, чем они находятся в абстрактном ранжировании. Миллионы лет эволюции заставляют нас хорошо выбирать лучшее яблоко у дерева, но страшно решить, насколько близко мы выбрали яблоко, которое мы видим в настоящей платонической форме. (Это, кстати, почему Аналитический процесс иерархии настолько изящный... но это немного отличается от темы.)

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

Ответ 3

Я знаю, что этот вопрос довольно старый, но я думал, что внесет вклад

Я бы посмотрел на систему TrueSkill, разработанную в Microsoft Research. Это похоже на ELO, но имеет гораздо более быстрое время конвергенции (выглядит экспоненциально по сравнению с линейным), поэтому вы получаете больше от каждого голоса. Это, однако, более сложно математически.

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

Ответ 4

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

Выбрать A-or-B намного проще и интереснее. Вы видите два изображения, и между изображениями на сайте делаются сравнения.

Ответ 5

Эти уравнения из Wikipedia упрощают/более эффективны для вычисления оценок Elo, алгоритм для изображений A и B будет простым

  • Получить Ne, mA, mB и рейтинги RA, RB из вашей базы данных.
  • Рассчитайте KA, KB, QA, QB, используя количество выполненных сравнений (Ne) и количество раз, когда это сравнение было сопоставлено (m) и текущие оценки:

K

QA

QB

  • Вычислить EA и EB.

EA

EB

  • Оценка победителя S: победитель 1, проигравший как 0, и если у вас ничья 0,5,
  • Рассчитайте новые оценки для обоих: New Rating

  • Обновите новые рейтинги RA, RB и считайте mA, mB в базе данных.

Ответ 6

Вы можете пойти с комбинацией.

Первый этап: Горячий или не-стиль (хотя я бы пошел с 3-мя вариантами: Sucks, Meh/OK. Cool!)

После того, как вы отсортировали набор в 3 ведра, я бы выбрал два изображения из одного и того же ведра и перешел к "Что лучше"

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

Ответ 7

Рейтинг 1-10 не будет работать, каждый имеет разные уровни. Тот, кто всегда дает рейтинг 3-7, будет забивать его рейтинги людьми, которые всегда дают 1 или 10.

a-or-b более работоспособен.

Ответ 8

Ничего себе, я опаздываю в игре.

Мне очень нравится система ELO, но, как говорит Оуэн, мне кажется, что вы будете медленно наращивать какие-либо значительные результаты.

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

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

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

Ответ 9

Если вы предпочитаете использовать стратегию выбора A или B, я бы рекомендовал эту статью: http://research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

Chen, X., Bennett, P.N., Collins-Thompson, K., and Horvitz, E. (2013, Февраль). Сочетание парного ранжирования в условиях краудсорсинга. В Материалы шестой международной конференции ACM по поиску в Интернете и интеллектуального анализа данных (стр. 193-202). ACM.

В документе рассказывается о модели Crowd-BT, которая расширяет известную парную сравнительную модель Брэдли-Терри в настройке толпы. Он также дает адаптивный алгоритм обучения для повышения эффективности времени и пространства модели. Вы можете найти алгоритм Matlab алгоритма на Github (но я не уверен, что он работает).

Ответ 11

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

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

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

Тем не менее, проблема довольно некорректная - вам понадобится 50 дней, чтобы показать каждое изображение только один раз.

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

Ответ 12

Мне нравится опция быстрой сортировки, но я бы сделал несколько твиков:

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

Другим интересным вариантом будет использование толпы для обучения нейронной сети.