С уверенностью выходить за рамки самых современных достижений!

Крис Андерсон в своей статье 2004 года, озаглавленной «Длинный хвост», сказал, что мы покидаем век информации и вступаем в возраст рекомендации. Если у нас нет способа отфильтровать информационную перегрузку, которую мы поглощаем каждый день, и сохранить только то, что важно для нас, вероятные варианты сведутся к шуму.

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



Мы применили нашу модель к набору данных Movielens 1m и смогли воспроизвести результаты соответствующей публикации; Быстрая инкрементная матричная факторизация для рекомендаций с положительной обратной связью Жоао Винагре и др.

В этой истории наша цель - пойти дальше и добиться лучшего результата. Ранее нам удавалось получить среднее значение Recall @ 10 ≈ 0,05, что и является результатом, представленным в статье. Посмотрим, сможем ли мы победить это простым трюком!

Learning Rate - это информационный бюллетень для тех, кто интересуется миром AI и MLOps. Каждую пятницу вы будете получать от меня обновления и мысли о последних новостях и статьях об искусственном интеллекте. Подпишитесь здесь!

Строим с уверенностью

Чтобы добиться лучших результатов, нам нужно использовать весь набор данных. Мы надеемся, что это даст нам больше информации и, в частности, метод включения отрицательных примеров в процесс обучения. В первой части этой серии мы использовали только положительные примеры из набора данных Movielens. Это были взаимодействия пользователя с фильмом, когда пользователь присвоил фильму рейтинг 5 звезд.

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

Однако, придерживаясь нашего предположения о неявной обратной связи, у нас должен быть способ преобразовать значение рейтинга, которое указывает предпочтение, в число, которое означает уверенность . Другими словами, мы должны математически выразить, что если пользователь u оценил фильм i одной звездой, мы уверены, что пользователь u абсолютно ненавидит фильм i. С другой стороны, мы несколько уверены, что пользователю понравился фильм, получивший 4 звезды. А как насчет каверзного трехзвездочного рейтинга?

Доверительная функция

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

Рейтинг, который мы передаем функции, может быть любой неявной информацией, которую мы можем иметь. Например, это может быть количество раз, когда потребитель покупал конкретный продукт, количество минут, потраченных зрителем на просмотр фильма, или любой другой совет, который может иметь значение для решения проблемы. Наша задача - разработать такую ​​функцию.

Функция потерь

В примере, который мы обсуждаем в Части I, мы оптимизировали функцию потерь, адаптированную к нашей проблеме; только положительная обратная связь.

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

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

Итак, как и раньше, мы определяем новый столбец preference в наборе данных, который принимает значение 1, если рейтинг больше, чем 3, и 0 в противном случае.

Наконец, функция потерь также должна измениться, чтобы учесть двоичную цель. Таким образом, мы будем использовать взвешенный вариант бинарной функции кросс-энтропии.

Если предпочтение равно 1, тогда сохраняется первая часть уравнения в скобках, которая умножается на наш уровень достоверности. Соответственно, если предпочтение равно 0, вторая часть внутри скобок сохраняется и умножается на результат доверительной функции.

Интуитивно мы говорим функции потерь, что если мы очень уверены в цели, которую мы назначаем с помощью функции предпочтений (0 или 1), и вы ошибаетесь, обратите внимание на эту ошибку, это важно! С другой стороны, если мы не настолько уверены в 1 или 0, которые мы передаем в качестве целевого значения, во что бы то ни стало, используйте его, но не переживайте, если вы ошиблись. Представьте себе трехзвездочный рейтинг, который мы видели раньше. Мы передаем 0 как цель, но очень сомневаемся, что это так.

С этой целью давайте разработаем простую функцию уверенности, которая поддерживает нашу интуицию.

С помощью этой функции мы хотим показать, что если мы получаем рейтинг 1 или 5, мы на α пунктов уверены в цели, 0 или 1 соответственно. Однако у нас нет никакой уверенности в 0, которое мы вычисляем в качестве предпочтения, когда у нас есть значение рейтинга 3, поэтому мы умножаем убыток на 0.1α. Число α - это просто гиперпараметр, который мы адаптируем к нашим данным. Давайте теперь посмотрим все это в действии и получим результаты.

Внедрение и оценка

Реализация аналогична представленной в Части I, поэтому мы выделим здесь изменения.

В этом случае мы хотим создать столбец предпочтений, но использовать весь набор данных, а не только положительные примеры. Более того, теперь мы также рассматриваем рейтинги 4 как положительный пример.

Затем нам нужно определить простую функцию уверенности, которую мы разработали в предыдущем разделе кода.

Затем нам нужно определить нашу модель таким образом, чтобы использовать функцию доверия. К счастью, API CF Step уже поддерживает такую ​​функцию. По умолчанию он определяет функцию lamda, которая всегда возвращает 1, поэтому веса нет. Теперь передадим указанную нами функцию. Кроме того, мы передаем True ключевому слову binary сети SimpleCF, чтобы указать ему использовать сигмоидальную активацию на выходе.

Аргументы ключевого слова a и b, переданные в SimpleCF, являются лишь начальным и конечным ограничениями для равномерного распределения, которое мы используем для инициализации внедрения.

В остальном все осталось так же, как Часть I. Чтобы сравнить два метода, мы вместе построим график результатов. Синяя линия представляет результаты, которые мы получаем, используя только положительные примеры, а оранжевая линия отображает результаты для всего набора данных с функцией достоверности. Ясно, что второй метод лучше. Мы просто превзошли результаты, представленные в публикации!

Заключение

Эта история поднимает тему построения дополнительной рекомендательной системы там, где мы оставили ее в Части I. Мы представили идею доверительной функции, которая позволяет нам использовать весь набор данных и включать отрицательные оценки. Мы показываем, как его использовать с библиотекой CF Step и, самое главное, превзошли результаты Части I.

Существует множество способов создания доверительной функции, и производительность алгоритма, очевидно, зависит от того, какой выбор мы делаем. Кроме того, есть другие методы, которые можно использовать для получения лучших результатов. А как насчет трансферного обучения, если бы мы могли взять вложения фильмов, которые мы узнали с помощью NMF в рассказе ниже? Это оставлено читателю в качестве упражнения, поскольку CF Step поддерживает загрузку предварительно вычисленных матриц вложения и их замораживание, поэтому их нельзя обучать дальше.



Меня зовут Димитрис Поулопулос, я исследователь машинного обучения в BigDataStack и доктор философии в Пирейском университете, Греция. Я работал над разработкой и внедрением AI и программных решений для крупных клиентов, таких как Европейская комиссия, Евростат, МВФ, Европейский центральный банк, ОЭСР и IKEA. Если вы хотите прочитать больше сообщений о машинном обучении, глубоком обучении и науке о данных, подпишитесь на меня в Medium, LinkedIn или @ james2pl в твиттере.