Ранжирование — различия между версиями
Ivan (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
||
(не показано 5 промежуточных версий 3 участников) | |||
Строка 7: | Строка 7: | ||
<tex>X^l = \{x_1, \ldots, x_l\}</tex> {{---}} обучающая выборка. | <tex>X^l = \{x_1, \ldots, x_l\}</tex> {{---}} обучающая выборка. | ||
− | <tex>i \prec j</tex> {{---}} правильный частичный порядок на парах <tex>(i, j) \in \{1, \ldots, l\}^2</tex>. "Правильность" зависит от постановки задачи, а именно запись <tex>i \prec j</tex> может означать, что объект <tex>i</tex> имеет ранг выше, чем объект <tex>j</tex>, так и наоборот. | + | <tex>i \prec j</tex> {{---}} правильный [[Отношение порядка|частичный порядок]] на парах <tex>(i, j) \in \{1, \ldots, l\}^2</tex>. "Правильность" зависит от постановки задачи, а именно запись <tex>i \prec j</tex> может означать, что объект <tex>i</tex> имеет ранг выше, чем объект <tex>j</tex>, так и наоборот. |
'''Задача:''' | '''Задача:''' | ||
Строка 17: | Строка 17: | ||
<tex>a(x; w) = \langle x, w \rangle</tex>, где <tex>x \mapsto (f_1(x), \ldots, f_n(x)) \in \mathbb{R}^n</tex> {{---}} вектор признаков объекта <tex>x</tex>. | <tex>a(x; w) = \langle x, w \rangle</tex>, где <tex>x \mapsto (f_1(x), \ldots, f_n(x)) \in \mathbb{R}^n</tex> {{---}} вектор признаков объекта <tex>x</tex>. | ||
− | ==Примеры | + | ==Примеры== |
===Задача ранжирования поисковой выдачи=== | ===Задача ранжирования поисковой выдачи=== | ||
<tex>D</tex> {{---}} коллекция текстовых документов. | <tex>D</tex> {{---}} коллекция текстовых документов. | ||
Строка 29: | Строка 29: | ||
<tex>Y</tex> {{---}} упорядоченное множество рейтингов. | <tex>Y</tex> {{---}} упорядоченное множество рейтингов. | ||
− | <tex>y: X \to Y</tex> {{---}} оценки релевантности, поставленные асессорами(экспертами): чем выше оценка <tex>y(q, d)</tex>, тем релевантнее документ <tex>d</tex> по запросу <tex>q</tex>. | + | <tex>y: X \to Y</tex> {{---}} оценки релевантности, поставленные асессорами (экспертами): чем выше оценка <tex>y(q, d)</tex>, тем релевантнее документ <tex>d</tex> по запросу <tex>q</tex>. |
''Правильный порядок'' определен только между документами, найденными по одному и тому же запросу <tex>q</tex>: <tex> (q, d) \prec (q, d') \Leftrightarrow y(q, d) < y(q, d')</tex>. | ''Правильный порядок'' определен только между документами, найденными по одному и тому же запросу <tex>q</tex>: <tex> (q, d) \prec (q, d') \Leftrightarrow y(q, d) < y(q, d')</tex>. | ||
+ | |||
+ | Релевантные ответы запросу <tex>q</tex> {{---}} это список документов <tex>d</tex>, упорядоченных с помощью функции ранжирования <tex>a(q, d)</tex>. | ||
===Коллаборативная фильтрация=== | ===Коллаборативная фильтрация=== | ||
Строка 54: | Строка 56: | ||
релевантности документ для запроса <tex>q</tex>. | релевантности документ для запроса <tex>q</tex>. | ||
− | После того как введены обозначения | + | После того как введены обозначения можно задать простейшую метрику ранжирования. Это <tex>Precision@k</tex>, |
точность среди первых <tex>k</tex> документов (<tex>k</tex> — параметр метрики). Если ранжируется поисковая выдача, и на | точность среди первых <tex>k</tex> документов (<tex>k</tex> — параметр метрики). Если ранжируется поисковая выдача, и на | ||
первой странице показываются 10 документов, то разумно выбирать <tex>k = 10</tex>. Данная метрика определяется | первой странице показываются 10 документов, то разумно выбирать <tex>k = 10</tex>. Данная метрика определяется | ||
Строка 77: | Строка 79: | ||
<tex>MAP@k = {{1}\over{|Q|}} \sum_{q \in Q} AP@k(q)</tex>. | <tex>MAP@k = {{1}\over{|Q|}} \sum_{q \in Q} AP@k(q)</tex>. | ||
− | === | + | ===Дисконтированный совокупный доход=== |
− | Второй подход к измерению качества ранжирования — дисконтированный совокупный доход (англ. discounted cumulative gain) или DCG. | + | Второй подход к измерению качества ранжирования — дисконтированный совокупный доход (англ. discounted cumulative gain) или DCG. Он |
используется в более сложной ситуации, когда оценки релевантности <tex>y</tex> могут быть вещественными: <tex>y(q, d) \in \mathbb{R}</tex>. | используется в более сложной ситуации, когда оценки релевантности <tex>y</tex> могут быть вещественными: <tex>y(q, d) \in \mathbb{R}</tex>. | ||
Строка 100: | Строка 102: | ||
Дано множество документов, где каждый документ оценивается от <tex>3</tex> до <tex>0</tex>, где <tex>3</tex> {{---}} очень релевантен, а <tex>0</tex> {{---}} не релевантен. Пусть таким множеством будет <tex>S = \{ D_1, D_2, D_3, D_4, D_5, D_6\}</tex>, где оценка релевантности по опросу пользователей задается(в том же порядке) множеством <tex>R = \{3, 2, 3, 0, 1, 2\}</tex>. | Дано множество документов, где каждый документ оценивается от <tex>3</tex> до <tex>0</tex>, где <tex>3</tex> {{---}} очень релевантен, а <tex>0</tex> {{---}} не релевантен. Пусть таким множеством будет <tex>S = \{ D_1, D_2, D_3, D_4, D_5, D_6\}</tex>, где оценка релевантности по опросу пользователей задается(в том же порядке) множеством <tex>R = \{3, 2, 3, 0, 1, 2\}</tex>. | ||
− | Тогда <tex>DCG@6 = \sum_{i = 1}^{6} {{rel_i} \over {log(i+1)}} = 3 + 1.262 + 1.5 + 0 + 0.387 + 0.712 = 6.861</tex> | + | Тогда <tex>DCG@6 = \sum_{i = 1}^{6} {{rel_i} \over {log(i+1)}} = 3 + 1.262 + 1.5 + 0 + 0.387 + 0.712 = 6.861</tex>. |
{| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
Строка 144: | Строка 146: | ||
==Методы ранжирования== | ==Методы ранжирования== | ||
− | Всего выделяют три подхода к решению задачи ранжирования: поточечный (англ. pointwise), попарный (англ. pairwise), списочный (англ. listwise). | + | Всего выделяют три подхода к решению задачи ранжирования: поточечный (англ. pointwise), попарный (англ. pairwise), списочный (англ. listwise). Выбор метода зависит от качества ранжирования данных. Теоретически, списочный подход считается наилучшим, однако, на практике, например в Яндексе, лучше всего работает попарный подход. |
===Поточечный подход=== | ===Поточечный подход=== | ||
− | Самый простой подход — это поточечный. В нём игнорируется тот факт, что целевая переменная <tex>y(q, d) \in \mathbb{R}</tex> задаётся на парах объектов, и оценка релевантности <tex>a(d, q)</tex> | + | Самый простой подход — это поточечный. В нём игнорируется тот факт, что целевая переменная <tex>y(q, d) \in \mathbb{R}</tex> задаётся на парах объектов, и оценка релевантности <tex>a(d, q)</tex> считается для каждого объекта. |
− | Если речь идёт о задаче ранжирования, то пусть асессор поставил какую-то оценку <tex>y</tex> каждой паре запрос, документ. Эта оценка и будет предсказываться. При этом никак не учитывается, что | + | Если речь идёт о задаче ранжирования поисковой выдачи, то пусть асессор поставил какую-то оценку <tex>y</tex> каждой паре (запрос, документ). Эта оценка и будет предсказываться. При этом никак не учитывается, что нужно предсказать порядок объектов, а не оценки. Этот подход является простым в том смысле, что в нём |
− | нужно предсказать порядок объектов, а не оценки. Этот подход является простым в том смысле, что в нём | ||
используются уже известные методы. Например, можно предсказывать оценки с использованием линейной | используются уже известные методы. Например, можно предсказывать оценки с использованием линейной | ||
регрессии и квадратичной ошибки: | регрессии и квадратичной ошибки: | ||
Строка 162: | Строка 163: | ||
===Попарный подход=== | ===Попарный подход=== | ||
− | В попарном подходе используются знания об устройстве целевой переменной. Модель строится | + | В попарном подходе используются знания об устройстве целевой переменной. Модель строится сведением к минимуму количества дефектных пар, то есть таких, в которых моделью был предсказан неправильный порядок: |
<tex>\sum_{x_i < x_j} [a(x_j) - a(x_i) < 0] \rightarrow min</tex> | <tex>\sum_{x_i < x_j} [a(x_j) - a(x_i) < 0] \rightarrow min</tex> | ||
− | К сожалению, этот функционал дискретный (в него входят индикаторы), поэтому | + | К сожалению, этот функционал дискретный (в него входят индикаторы), поэтому невозможно его минимизировать. Однако можно действовать так же, как и с классификаторами: оценить функционал |
сверху. | сверху. | ||
Строка 174: | Строка 175: | ||
<tex>\sum_{x_i < x_j} L(a(x_j) - a(x_i)) \rightarrow min</tex> | <tex>\sum_{x_i < x_j} L(a(x_j) - a(x_i)) \rightarrow min</tex> | ||
− | Если использовать функцию как в логистической регрессии <tex>L(M) = log(1 + e^{−M})</tex>, то полученный метод называется RankNet. Затем можно решать задачу, например, с помощью стохастического градиентного спуска. | + | Если использовать функцию как в логистической регрессии <tex>L(M) = log(1 + e^{−M})</tex>, то полученный метод называется RankNet. Затем можно решать задачу, например, с помощью [[Стохастический градиентный спуск|стохастического градиентного спуска]]. |
− | === | + | ===Списочный подход=== |
В методе RankNet шаг стохастического градиентного спуска для линейной модели выглядит следующим | В методе RankNet шаг стохастического градиентного спуска для линейной модели выглядит следующим | ||
Строка 183: | Строка 184: | ||
<tex>\omega := \omega + \eta {{\large 1} \over {\large 1 + exp(\langle \omega, x_j - x_i \rangle)}} (x_j - x_i)</tex> | <tex>\omega := \omega + \eta {{\large 1} \over {\large 1 + exp(\langle \omega, x_j - x_i \rangle)}} (x_j - x_i)</tex> | ||
− | + | Заметим, что данная формула зависит от одной пары объектов, а также не учитываются зависимости между различными парами. Возникает вопрос, можно ли модифицировать данный метод (а именно формулу шага) так, чтобы минимизировался не исходный функционал, оценивающий долю дефектных пар, а DCG. | |
− | оценивающий долю дефектных пар, а DCG. | ||
− | + | Действительно, можно домножить градиент исходного функционала на то, насколько изменится nDCG, если поменять местами <tex>x_i</tex> и <tex>x_j</tex> : | |
<tex>\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)</tex> | <tex>\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)</tex> | ||
− | Оказывается, что при выполнении градиентного спуска с помощью данных шагов оптимизируется | + | Данный метод называется LambdaRank<ref>[https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/MSR-TR-2010-82.pdf From RankNet to LambdaRank {{---}} Christopher J.C. Burges]</ref>. |
− | + | ||
− | + | Оказывается, что при выполнении градиентного спуска с помощью данных шагов оптимизируется nDCG. Существуют и другие подходы к оптимизации nDCG, однако в них предпринимается попытка работы с | |
+ | функционалом, что гораздо сложнее. | ||
+ | |||
+ | == См. также == | ||
+ | * [[Общие понятия|Общие понятия]] | ||
+ | * [[Стохастический градиентный спуск|Стохастический градиентный спуск]] | ||
+ | * [[Рекомендательные системы|Рекомендательные системы]]<sup>[на 17.03.19 не создан]</sup> | ||
− | + | == Примечания == | |
− | + | <references/> | |
== Источники информации == | == Источники информации == | ||
# [http://www.machinelearning.ru/wiki/images/8/89/Voron-ML-Ranking-slides.pdf?title=Rank Обучение ранжировнию] {{---}} статья на machinelearning.ru | # [http://www.machinelearning.ru/wiki/images/8/89/Voron-ML-Ranking-slides.pdf?title=Rank Обучение ранжировнию] {{---}} статья на machinelearning.ru | ||
+ | # [https://www.coursera.org/lecture/text-retrieval/lesson-6-1-learning-to-rank-part-1-mFYTD Learning to rank] {{---}} презентация на coursera.org | ||
# [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) Курс лекций по машинному обучению] {{---}} Воронцов К.В. | # [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) Курс лекций по машинному обучению] {{---}} Воронцов К.В. | ||
+ | |||
[[Категория: Машинное обучение]] | [[Категория: Машинное обучение]] |
Текущая версия на 19:27, 4 сентября 2022
Ранжирование (англ. learning to rank) — это класс задач машинного обучения с учителем, заключающихся в автоматическом подборе ранжирующей модели по обучающей выборке, состоящей из множества списков и заданных частичных порядков на элементах внутри каждого списка. Частичный порядок обычно задаётся путём указания оценки для каждого элемента (например, «релевантен» или «не релевантен»). Цель ранжирующей модели — наилучшим образом приблизить и обобщить способ ранжирования в обучающей выборке на новые данные.
Содержание
Постановка задачи
— множество объектов.
— обучающая выборка.
частичный порядок на парах . "Правильность" зависит от постановки задачи, а именно запись может означать, что объект имеет ранг выше, чем объект , так и наоборот.
— правильныйЗадача:
Построить ранжирующую функцию
такую, что: .Линейная модель ранжирования:
, где — вектор признаков объекта .
Примеры
Задача ранжирования поисковой выдачи
— коллекция текстовых документов.
— множество запросов.
— множество документов, найденных по запросу .
— объектами являются пары (запрос, документ): .
— упорядоченное множество рейтингов.
— оценки релевантности, поставленные асессорами (экспертами): чем выше оценка , тем релевантнее документ по запросу .
Правильный порядок определен только между документами, найденными по одному и тому же запросу
: .Релевантные ответы запросу
— это список документов , упорядоченных с помощью функции ранжирования .Коллаборативная фильтрация
— пользователи.
— предметы (фильмы, книги и т.д.).
— объектами являются пары (пользователь, предмет).
Правильный порядок определён между предметами, которые выбирал или рейтинговал один и тот же пользователь:
.Рекомендация пользователю
— это список предметов , упорядоченный с помощью функции ранжирования .Метрики качества ранжирования
Точность ранжирования
В самой простой постановке задачи ранжирования целевая переменная принимает два значения, документ либо релевантен запросу, либо нет:
где – целевая переменная, – запрос, – документ.
Пусть также есть некоторая модель
, оценивающая релевантность документа запросу. По значениям, полученным с помощью этой модели, можно отранжировать документы. будет обозначать -й по релевантности документ для запроса .После того как введены обозначения можно задать простейшую метрику ранжирования. Это
, точность среди первых документов ( — параметр метрики). Если ранжируется поисковая выдача, и на первой странице показываются 10 документов, то разумно выбирать . Данная метрика определяется как доля релевантных документов среди первых , полученных с помощью модели:.
Однако у неё есть серьёзный недостаток: позиции релевантных документов никак не учитываются. Например, если при
среди первых документов есть релевантных, то неважно, где они находятся: среди первых или последних документов. Обычно же хочется, чтобы релевантные документы располагались как можно выше.Описанную проблему можно решить, модифицировав метрику, и определить среднюю точность (англ. average precision). Данная метрика тоже измеряется на уровне
и вычисляется следующим образом:.
Данная величина уже зависит от порядка. Она достигает максимума, если все релевантные документы находятся вверху ранжированного списка. Если они смещаются ниже, значение метрики уменьшается.
И точность, и средняя точность вычисляются для конкретного запроса
. Если выборка большая и размечена для многих запросов, то значения метрик усредняются по всем запросам:.
Дисконтированный совокупный доход
Второй подход к измерению качества ранжирования — дисконтированный совокупный доход (англ. discounted cumulative gain) или DCG. Он используется в более сложной ситуации, когда оценки релевантности
могут быть вещественными: .То есть для каждого документа теперь существует градация между релевантностью и нерелевантностью. Остальные обозначения остаются теми же, что и для предыдущей метрики. Формула для вычисления DCG:
.
Метрика — это сумма дробей. Чем более релевантен документ, тем больше числитель в дроби. Знаменатель зависит от позиции документа, он штрафует за то, где находится документ. Если документ очень релевантен, но занимает низкую позицию, то штраф будет большим, если документ релевантен и находится вверху списка, штраф будет маленьким. Таким образом, метрика DCG учитывает и релевантность, и позицию документа. Она достигает максимума, если все релевантные документы находятся в топе списка, причём отсортированные по значению
. Данную метрику принято нормировать:, где — значение DCG при идеальном ранжировании. После нормировки метрика принимает значения от 0 до 1.
Пример вычисления DCG и nDCG:
Дано множество документов, где каждый документ оценивается от
до , где — очень релевантен, а — не релевантен. Пусть таким множеством будет , где оценка релевантности по опросу пользователей задается(в том же порядке) множеством .Тогда
.i | |||
---|---|---|---|
Идеальный порядок оценок релевантности
. DCG для данного множества будет следующим: .i | |||
---|---|---|---|
Итого
.Методы ранжирования
Всего выделяют три подхода к решению задачи ранжирования: поточечный (англ. pointwise), попарный (англ. pairwise), списочный (англ. listwise). Выбор метода зависит от качества ранжирования данных. Теоретически, списочный подход считается наилучшим, однако, на практике, например в Яндексе, лучше всего работает попарный подход.
Поточечный подход
Самый простой подход — это поточечный. В нём игнорируется тот факт, что целевая переменная
задаётся на парах объектов, и оценка релевантности считается для каждого объекта.Если речь идёт о задаче ранжирования поисковой выдачи, то пусть асессор поставил какую-то оценку
каждой паре (запрос, документ). Эта оценка и будет предсказываться. При этом никак не учитывается, что нужно предсказать порядок объектов, а не оценки. Этот подход является простым в том смысле, что в нём используются уже известные методы. Например, можно предсказывать оценки с использованием линейной регрессии и квадратичной ошибки:
Известно, как решать такую задачу, и таким образом будет получена релевантность. Далее по выходам модели можно ранжировать объекты.
Попарный подход
В попарном подходе используются знания об устройстве целевой переменной. Модель строится сведением к минимуму количества дефектных пар, то есть таких, в которых моделью был предсказан неправильный порядок:
К сожалению, этот функционал дискретный (в него входят индикаторы), поэтому невозможно его минимизировать. Однако можно действовать так же, как и с классификаторами: оценить функционал сверху.
Можно считать, что разница между объектами
— это отступ , и задать некоторую гладкую функцию :
Если использовать функцию как в логистической регрессии стохастического градиентного спуска.
, то полученный метод называется RankNet. Затем можно решать задачу, например, с помощьюСписочный подход
В методе RankNet шаг стохастического градиентного спуска для линейной модели выглядит следующим образом:
Заметим, что данная формула зависит от одной пары объектов, а также не учитываются зависимости между различными парами. Возникает вопрос, можно ли модифицировать данный метод (а именно формулу шага) так, чтобы минимизировался не исходный функционал, оценивающий долю дефектных пар, а DCG.
Действительно, можно домножить градиент исходного функционала на то, насколько изменится nDCG, если поменять местами
и :
Данный метод называется LambdaRank[1].
Оказывается, что при выполнении градиентного спуска с помощью данных шагов оптимизируется nDCG. Существуют и другие подходы к оптимизации nDCG, однако в них предпринимается попытка работы с функционалом, что гораздо сложнее.
См. также
- Общие понятия
- Стохастический градиентный спуск
- Рекомендательные системы[на 17.03.19 не создан]
Примечания
Источники информации
- Обучение ранжировнию — статья на machinelearning.ru
- Learning to rank — презентация на coursera.org
- Курс лекций по машинному обучению — Воронцов К.В.