<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.66.159.88&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.66.159.88&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/217.66.159.88"/>
		<updated>2026-05-13T02:45:28Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%BD%D0%B6%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=69938</id>
		<title>Ранжирование</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%BD%D0%B6%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=69938"/>
				<updated>2019-02-24T13:25:42Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.159.88: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Постановка задачи==&lt;br /&gt;
&amp;lt;tex&amp;gt;x_1 \ldots x_l&amp;lt;/tex&amp;gt; – выборка, состоящая из &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; элементов. Она состоит из объектов, имеющих признаковое описание, как и в задачах регрессии и классификации.&lt;br /&gt;
&lt;br /&gt;
Ключевое отличие ранжирования заключается в целевой переменной. Если ранее в задачах обучения с учителем каждому объекту соответствовал свой ответ, то теперь ответы — это пары вида: &amp;lt;tex&amp;gt;\{ (i, j) : x_i \lt x_j\} &amp;lt;/tex&amp;gt;. Набор таких пар и есть целевая переменная.&lt;br /&gt;
&lt;br /&gt;
Основная задача – построить ранжирующую модель &amp;lt;tex&amp;gt;a(x)&amp;lt;/tex&amp;gt;, такую, что: &amp;lt;tex&amp;gt;\{ x_i \lt x_j \Rightarrow a(x_i) \lt a(x_j) \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, по выходам необходимо восстановить порядок, а величина ответов не имеет значения. В этом&lt;br /&gt;
заключается главное отличие ранжирования от остальных задач машинного обучения.&lt;br /&gt;
&lt;br /&gt;
==Ранжирование поисковой выдачи==&lt;br /&gt;
Классическим примером для задачи ранжирования считается ранжирование поисковой выдачи. Далее для понимания материала везде будет рассматриваться данный пример, но все рассуждения хорошо обобщаются и для других применений.&lt;br /&gt;
&lt;br /&gt;
В качестве объектов выступают пары &amp;lt;tex&amp;gt;(запрос, документ)&amp;lt;/tex&amp;gt;. Запрос – ключевые слова, введенные пользователем, документ – один из всех документов, имеющихся в поисковой выдаче: &amp;lt;tex&amp;gt;({запрос}, {документ}_1) \lt ({запрос}, {документ}_2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Метрики качества ранжирования==&lt;br /&gt;
===Точность ранжирования===&lt;br /&gt;
В самой простой постановке задачи ранжирования целевая переменная принимает два значения, документ&lt;br /&gt;
либо релевантен запросу, либо нет:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y(q, d) \in \{0, 1\}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; – целевая переменная, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; – запрос, &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; – документ.&lt;br /&gt;
&lt;br /&gt;
Пусть также есть некоторая модель &amp;lt;tex&amp;gt;a(q, d)&amp;lt;/tex&amp;gt;, оценивающая релевантность документа запросу. По значениям, полученным с помощью этой модели, можно отранжировать документы. &amp;lt;tex&amp;gt;d^{(i)}_{q}&amp;lt;/tex&amp;gt; будет обозначать &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й по&lt;br /&gt;
релевантности документ для запроса &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После того как введены обозначения, можно задать простейшую метрику ранжирования. Это &amp;lt;tex&amp;gt;Precision@k&amp;lt;/tex&amp;gt;,&lt;br /&gt;
точность среди первых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; документов (&amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — параметр метрики). Если ранжируется поисковая выдача, и на&lt;br /&gt;
первой странице показываются 10 документов, то разумно выбирать &amp;lt;tex&amp;gt;k = 10&amp;lt;/tex&amp;gt;. Данная метрика определяется&lt;br /&gt;
как доля релевантных документов среди первых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, полученных с помощью модели:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Precision@k(q) = {{1}\over{k}} \sum_{i = 1}^{k} y(q, d_{q}^{(i)})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это полезная метрика, потому что обычно важно иметь релевантные документы среди первых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Однако&lt;br /&gt;
у неё есть серьёзный недостаток: позиции релевантных документов никак не учитываются. Например, если&lt;br /&gt;
при &amp;lt;tex&amp;gt;k = 10&amp;lt;/tex&amp;gt; среди первых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; документов есть &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; релевантных, то неважно, где они находятся: среди первых&lt;br /&gt;
или последних &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; документов. Обычно же хочется, чтобы релевантные документы располагались как можно&lt;br /&gt;
выше.&lt;br /&gt;
&lt;br /&gt;
Описанную проблему можно решить, модифицировав метрику, и определить среднюю точность (average&lt;br /&gt;
precision, &amp;lt;tex&amp;gt;AP&amp;lt;/tex&amp;gt;). Данная метрика тоже измеряется на уровне &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; и вычисляется следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;AP@k(q) =  {\large {{\sum_{i = 1}^{k} y(q, d_{q}^{(i)}) Precision@i(q)}\over{\sum_{i = 1}^{k} y(q, d_{q}^{(i)})}}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная величина уже зависит от порядка. Она достигает максимума, если все релевантные документы находятся вверху ранжированного списка. Если они смещаются ниже, значение метрики уменьшается.&lt;br /&gt;
&lt;br /&gt;
И точность, и средняя точность вычисляются для конкретного запроса &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Если выборка большая и размечена для многих запросов, то значения метрик усредняются по всем запросам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;MAP@k = {{1}\over{|Q|}} \sum_{q \in Q} AP@k(q)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DCG===&lt;br /&gt;
Второй подход к измерению качества ранжирования — это метрика DCG (discounted cumulative gain). Она&lt;br /&gt;
используется в более сложной ситуации, когда оценки релевантности &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; могут быть вещественными:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y(q, d) \in \mathbb{R}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть для каждого документа теперь существует градация между релевантностью и нерелевантностью.&lt;br /&gt;
Остальные обозначения остаются теми же, что и для предыдущей метрики&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления DCG:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;DCG@k(q)= \sum_{i = 1}^{k} {\large {{2^{y(q, d_{q}^{(i)})} - 1} \over {log(i+1)}}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Метрика — это сумма дробей. Чем более релевантен документ, тем больше числитель в дроби. Знаменатель&lt;br /&gt;
зависит от позиции документа, он штрафует за то, где находится документ. Если документ очень релевантен,&lt;br /&gt;
но занимает низкую позицию, то штраф будет большим, если документ релевантен и находится вверху списка,&lt;br /&gt;
штраф будет маленьким. Таким образом, метрика DCG учитывает и релевантность, и позицию документа.&lt;br /&gt;
Она достигает максимума, если все релевантные документы находятся в топе списка, причём отсортированные&lt;br /&gt;
по значению &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данную метрику принято нормировать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;nDCG@k(q) = {\large {DCG@k(q)} \over {{\large max DCG@k(q)}}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;max DCG@k(q)&amp;lt;/tex&amp;gt; — значение DCG при идеальном ранжировании. После нормировки метрика принимает&lt;br /&gt;
значения от 0 до 1.&lt;br /&gt;
&lt;br /&gt;
==Методы ранжирования==&lt;br /&gt;
&lt;br /&gt;
Всего выделяют три подхода к решению задачи ранжирования: pointwise (поточечный), pairwise (попарный), listwise (списочный). Далее будут приведены по одному методу из каждого подхода, чтобы можно было&lt;br /&gt;
составить представления об их различиях и особенностях.&lt;br /&gt;
&lt;br /&gt;
===Поточечный подход===&lt;br /&gt;
&lt;br /&gt;
Самый простой подход — это поточечный. В нём игнорируется тот факт, что целевая переменная &amp;lt;tex&amp;gt;y(q, d) \in \mathbb{R}&amp;lt;/tex&amp;gt;  задаётся на парах объектов, и оценка релевантности &amp;lt;tex&amp;gt;a(d, q)&amp;lt;/tex&amp;gt; оценивается непосредственно для каждого объекта.&lt;br /&gt;
&lt;br /&gt;
Если речь идёт о задаче ранжирования, то пусть асессор поставил какую-то оценку &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; каждой паре запрос, документ. Эта оценка и будет предсказываться. При этом никак не учитывается, что на самом деле&lt;br /&gt;
нужно предсказать порядок объектов, а не оценки. Этот подход является простым в том смысле, что в нём&lt;br /&gt;
используются уже известные методы. Например, можно предсказывать оценки с использованием линейной&lt;br /&gt;
регрессии и квадратичной ошибки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum_{i = 1}^{l} (a(q_i, d_i) - y(q_i, d_i))^2 \rightarrow min&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Известно, как решать такую задачу, и таким образом будет получена релевантность. Далее по выходам модели&lt;br /&gt;
можно ранжировать объекты.&lt;br /&gt;
&lt;br /&gt;
===Попарный подход===&lt;br /&gt;
&lt;br /&gt;
В попарном подходе используются знания об устройстве целевой переменной. Модель строится минимизацией количества дефектных пар, то есть таких, в которых моделью был предсказан неправильный порядок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum_{x_i &amp;lt; x_j} [a(x_j) - a(x_i) &amp;lt; 0] \rightarrow min&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
К сожалению, этот функционал дискретный (в него входят индикаторы), поэтому не получится минимизировать непосредственно его. Однако можно действовать так же, как и с классификаторами: оценить функционал&lt;br /&gt;
сверху.&lt;br /&gt;
&lt;br /&gt;
Можно считать, что разница между объектами &amp;lt;tex&amp;gt;a(x_j) − a(x_i)&amp;lt;/tex&amp;gt; — это отступ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и задать некоторую гладкую&lt;br /&gt;
функцию &amp;lt;tex&amp;gt;L(M)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum_{x_i &amp;lt; x_j} L(a(x_j) - a(x_i)) \rightarrow min&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если использовать функцию как в логистической регрессии &amp;lt;tex&amp;gt;L(M) = log(1 + e^{−M})&amp;lt;/tex&amp;gt;, то полученный метод называется RankNet. Затем можно решать задачу, например, с помощью стохастического градиентного спуска.&lt;br /&gt;
&lt;br /&gt;
===Listwise-подход===&lt;br /&gt;
&lt;br /&gt;
В методе RankNet шаг стохастического градиентного спуска для линейной модели выглядит следующим&lt;br /&gt;
образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\omega := \omega + \eta {{\large 1} \over {\large 1 + exp(\langle \omega, x_j - x_i \rangle)}} (x_j - x_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это не очень сложная формула, она зависит от одной пары объектов. Возникает вопрос, можно ли модифицировать данный метод (а именно формулу шага) так, чтобы минимизировался не исходный функционал,&lt;br /&gt;
оценивающий долю дефектных пар, а DCG.&lt;br /&gt;
&lt;br /&gt;
Ответ на этот вопрос положительный. Можно домножить градиент исходного функционала на то, насколько изменится nDCG, если поменять местами &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x_j&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\omega := \omega + \eta {{\large 1} \over {\large 1 + exp(\langle \omega, x_j - x_i \rangle)}} (x_j - x_i) |\Delta nDCG_{ij}| (x_j - x_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оказывается, что при выполнении градиентного спуска с помощью данных шагов оптимизируется NDCG.&lt;br /&gt;
Это эмпирический факт, и он не доказан. Но на практике NDCG действительно улучшается при решении&lt;br /&gt;
задачи данным методом.&lt;br /&gt;
&lt;br /&gt;
Существуют и другие подходы к оптимизации nDCG, однако в них предпринимается попытка работы с&lt;br /&gt;
функционалом, что гораздо сложнее. Выше описан самый простой подход, он называется LambdaRank.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/8/89/Voron-ML-Ranking-slides.pdf?title=Rank Обучение ранжировнию] {{---}} статья на machinelearning.ru&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2) Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>217.66.159.88</name></author>	</entry>

	</feed>