Как научиться ранжировать с помощью контекстного бандита Vowpal Wabbit?

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

Train Data:
"1:10:0.1 | 123"
"2:9:0.1 | 123"
"3:8:0.1 | 123"
"4:7:0.1 | 123"
"5:6:0.1 | 123"
"6:5:0.1 | 123"
"7:4:0.1 | 123"

Test Data:
" | 123"

Теперь ожидаемое ранжирование действий должно быть (от наименьшего убытка к наибольшему убытку):

7 6 5 4 3 2 1

Использование --cb просто возвращает наиболее оптимальное действие:

7

И использование --cb_explore возвращает PDF-файл с действиями, которые нужно изучить, но, похоже, это не помогает в ранжировании.

[0.0071428571827709675, 0.0071428571827709675, 0.0071428571827709675, 0.0071428571827709675, 0.0071428571827709675, 0.0071428571827709675, 0.9571428298950195]

Есть ли другой способ использовать контекстный бандит vw для ранжирования?




Ответы (1)


Ответ Ольги на репо: https://github.com/VowpalWabbit/vowpal_wabbit/issues/2555< /а>

--cb не выполняет никаких исследований, а просто обучает модель с учетом входных данных, поэтому на выходе будет то, что предсказала модель (которая была обучена до сих пор).

--cb_explore по умолчанию включает исследование с использованием epsilon-greedy, если не указано ничего другого. Вы можете ознакомиться со всеми доступными методами исследования здесь.

Вывод cb_explore — это PMF, заданный стратегией исследования (дополнительную информацию см. здесь).

Эпсилон-жадный будет выбирать с вероятностью e действие случайным образом из равномерного распределения (исследование), а с вероятностью 1-e эпсилон-жадный будет использовать уже обученную модель для предсказания наилучшего действия (эксплуатация).

Таким образом, на выходе будет PMF по действиям (вероятность 1-e ИЛИ e для выбранного действия), а затем оставшаяся вероятность будет поровну разделена между оставшимися действиями. Поэтому cb_explore не предоставит вам рейтинг.

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

И мое продолжение:

Я думаю, что CCB — хороший вариант, если позволяют вычислительные ограничения. Я просто хотел бы добавить, что если вы делаете cb_explore или cb_explore_adf, то результирующий PMF должен быть отсортирован по баллам, так что это своего рода ранжирование. Тем не менее, стоит проверить, что порядок на самом деле отсортирован по баллам (здесь поможет --audit), поскольку я не знаю, есть ли тест, покрывающий это.

person jackgerrits    schedule 03.09.2020