Вычисление сходства между двумя списками
EDIT:
так как все путаются, я хочу упростить свой вопрос. У меня есть два упорядоченных списка. Теперь я просто хочу рассчитать, как похожи один список с другим.
Например,
1,7,4,5,8,9
1,7,5,4,9,6
Что является хорошей мерой сходства между этими двумя списками, так что порядок важен. Например, мы должны оштрафовать сходство, так как 4,5 заменяется в двух списках?
У меня есть 2 системы. Одна современная система и одна система, которую я реализовал. Учитывая запрос, обе системы возвращают ранжированный список документов. Теперь я хочу сравнить сходство между моей системой и "самой современной системой", чтобы измерить правильность моей системы. Обратите внимание, что порядок документов важен, поскольку мы говорим о ранжированной системе.
Кто-нибудь знает какие-либо меры, которые могут помочь мне найти сходство между этими двумя списками.
Ответы
Ответ 1
DCG [Дисконтированный кумулятивный выигрыш] и nDCG [нормализованный DCG] обычно являются хорошей мерой для ранжированных списков.
Он дает полный выигрыш для соответствующего документа, если он ранжирован первым, а коэффициент усиления уменьшается по мере уменьшения ранга.
Использование DCG/nDCG для оценки системы по сравнению с базовой линией SOA:
Примечание. Если вы установите все результаты, возвращаемые "самой современной системой", как соответствующие, то ваша система идентична уровню техники, если они получили тот же рейтинг с помощью DCG/nDCG.
Таким образом, возможная оценка может быть: DCG(your_system)/DCG(state_of_the_art_system)
Чтобы еще больше усовершенствовать его, вы можете дать оценку релевантности [ релевантность не будет бинарной] - и будет определяться в соответствии с тем, как каждый документ был оценен в уровне техники. Например, rel_i = 1/log(1+i)
для каждого документа в самой современной системе.
Если значение, полученное этой функцией оценки, близко к 1: ваша система очень похожа на базовую.
Пример:
mySystem = [1,2,5,4,6,7]
stateOfTheArt = [1,2,4,5,6,9]
Сначала вы даете оценку каждому документу в соответствии с современной системой [используя формулу сверху]:
doc1 = 1.0
doc2 = 0.6309297535714574
doc3 = 0.0
doc4 = 0.5
doc5 = 0.43067655807339306
doc6 = 0.38685280723454163
doc7 = 0
doc8 = 0
doc9 = 0.3562071871080222
Теперь вы вычисляете DCG(stateOfTheArt)
и используете релевантность, как указано выше [релевантность примечаний здесь не двоичная, и получите DCG(stateOfTheArt)= 2.1100933062283396
Затем вычислите его для вашей системы , используя те же самые весы и получите: DCG(mySystem) = 1.9784040064803783
Таким образом, оценка DCG(mySystem)/DCG(stateOfTheArt) = 1.9784040064803783 / 2.1100933062283396 = 0.9375907693942939
Ответ 2
Kendalls tau - метрика, которую вы хотите. Он измеряет количество попарных инверсий в списке. Правило ноги Спирмена делает то же самое, но измеряет расстояние, а не инверсию. Они оба предназначены для решения задачи, измеряя разницу в двух упорядоченных списках.
Ответ 3
Как вы сказали, вы хотите вычислить, насколько похожи один список другому. Я думаю, что упрощенно, вы можете начать с подсчета числа инверсий. Там O (NlogN) разделяет и поддерживает подход к этому. Это очень простой подход для измерения "подобия" между двумя списками.
например, вы хотите сравнить, как "схожие" вкусы музыки для двух человек на музыкальном сайте, вы берете их рейтинг из набора песен и считаете "нет". инверсий в нем. Мало подсчет, более "похожий" на их вкус.
поскольку вы уже рассматриваете "современную систему" как критерий правильности, подсчет Inversions должен дать вам базовую меру "подобия" вашего рейтинга.
Конечно, это просто начальный подход, но вы можете опираться на него как на то, насколько строго вы хотите быть с "минусом инверсии" и т.д.
D1 D2 D3 D4 D5 D6
-----------------
R1: 1, 7, 4, 5, 8, 9 [Rankings from 'state of the art' system]
R2: 1, 7, 5, 4, 9, 6 [ your Rankings]
Так как ранжирование в порядке документов, вы можете написать свою собственную функцию компаратора на основе R1 (ранжирование "самой современной системы" и, следовательно, подсчитать инверсии по сравнению с этим компаратором.
Вы можете "наказывать" "подобие" для найденных найденных инверсий: я < j, но R2 [i] > 'R2 [j]
( > ' здесь вы используете свой собственный компаратор)
Ссылки, которые могут оказаться полезными:
Link1
Link2
Link3
Ответ 4
Я предполагаю, что вы говорите о сравнении двух Информационно-поисковых систем, которые доверяют мне, не являются чем-то тривиальным. Это сложная проблема компьютерных наук.
Для измерения релевантности или выполнения A/B-тестирования вам нужно иметь пару вещей:
-
Участник оценивает релевантность. Поскольку у вас есть две системы, чем это условие выполняется.
-
Вам нужно вручную оценить результаты. Вы можете попросить своих коллег оценить пары запросов/URL-адресов для популярных запросов, а затем для отверстий (т.е. Пара запросов/URL-адресов, не оцененная, вы можете иметь некоторую динамическую функцию ранжирования, используя алгоритм "Изучение Ранга" http://en.wikipedia.org/wiki/Learning_to_rank. Не удивляйтесь этому, но это правда (пожалуйста, прочтите ниже пример Google/Bing).
Google и Bing являются конкурентами на рынке горизонтального поиска. Эти поисковые системы используют ручных судей по всему миру и вкладывают в них миллионы, чтобы оценивать свои результаты по запросам. Таким образом, для каждой пары запросов /url, как правило, рейтинг 3 или 5 оцениваются. Основываясь на этих рейтингах, они могут использовать метрику, такую как NDCG (Normalized Discounted Cumulative Gain), которая является одной из лучших метрик и одной из самых популярных.
Согласно википедии:
Дисконтированный кумулятивный выигрыш (DCG) - это показатель эффективности алгоритма поисковой системы Интернета или связанных с ним приложений, часто используемых при поиске информации. Используя градуированную шкалу релевантности документов в наборе результатов поисковой системы, DCG измеряет полезность или прирост документа на основе его позиции в списке результатов. Коэффициент усиления накапливается от верхней части списка результатов до нижней части с коэффициентом усиления каждого результата, дисконтированным в более низких рангах.
Википедия прекрасно объясняет NDCG. Это короткая статья, пожалуйста, пройдите через это.
Ответ 5
Является ли список документов исчерпывающим? То есть каждый ранг документа, упорядоченный системой 1, также ранжируется по системе 2? Если это Spearman rho может служить вашим целям. Когда они не используют одни и те же документы, большой вопрос заключается в том, как интерпретировать этот результат. Я не думаю, что есть измерение, которое отвечает на этот вопрос, хотя могут быть некоторые, которые реализуют неявный ответ на него.
Ответ 6
Я действительно знаю четыре различных меры для этой цели.
Три уже упомянуты:
- NDCG
- Кендалл Тау
- Спирмен Ро
Но если у вас есть более двух рангов, которые нужно сравнивать, используйте Kendall W.
Ответ 7
В дополнение к тому, что уже было сказано, я хотел бы указать вам на следующую отличную статью: W, Webber et al, "Оценка сходства для неопределенного рейтинга" (2010). Помимо того, что они содержат хороший обзор существующих мер (таких, как вышеупомянутые методы Кендалла Тау и Спирмена), авторы предлагают интуитивно привлекательную вероятностную меру, применимую для различной длины списков результатов, и когда не все элементы встречаются в обоих списках. Грубо говоря, он параметризуется с вероятностью "стойкости" p, когда пользователь просматривает элемент k + 1 после проверки объекта k (а не отказа). Рандовое смещение (RBO) - это ожидаемое совпадение результатов в точке, в которой пользователь перестает читать.
Реализация RBO несколько более активна; вы можете заглянуть в реализацию в Apache Pig здесь.
Другая простая мера - это косинус-подобие, косинус между двумя векторами с размерами, соответствующими элементам, и обратные ранги как веса. Однако он не обрабатывает элементы изящно, которые встречаются только в одном из списков (см. Реализацию в ссылке выше).
- Для каждого элемента я в списке 1 пусть h_1 (i) = 1/rank_1 (i). Для каждого элемента я в списке 2, не входящего в список 1, пусть h_1 (i) = 0. Сделайте то же самое для h_2 по списку 2.
- Вычислить v12 = sum_i h_1 (i) * h_2 (i); v11 = sum_i h_1 (i) * h_1 (i); v22 = sum_i h_2 (i) * h_2 (i)
- Возврат v12/sqrt (v11 * v22)
В вашем примере это дает значение 0,7252747.
Пожалуйста, позвольте мне дать вам некоторые практические советы, выходящие за рамки вашего непосредственного вопроса. Если базовая линия "производственной системы" не идеальна (или мы имеем дело с золотым набором), почти всегда лучше сравнивать меру качества (например, вышеупомянутый nDCG), а не сходство; новый рейтинг иногда будет лучше, иногда хуже базового, и вы хотите знать, случается ли бывшее дело чаще, чем последнее. Во-вторых, меры сходства не являются тривиальными для интерпретации в абсолютном масштабе. Например, если вы получаете оценку подобия, скажем, 0,72, значит ли это, что это действительно похоже или значительно отличается? Меры сходства более полезны в том, чтобы сказать, что, например, новый метод ранжирования 1 ближе к производству, чем другой новый метод ранжирования 2.