[БЕЗ_ЗВУКА] В этом видео мы поговорим об одной особенной задаче,
в которой могут применяться матричные разложения и в которой возникают некоторые
сложности с тем, чтобы применить все то, что мы только что уже обсудили.
Итак, сначала мы поговорим про задачу рекомендации товаров.
Эта задача будет отличаться от рекомендации фильмов или каких-то
других объектов, про которые у нас есть рейтинги от пользователей.
Затем мы поговорим, почему нельзя делать все так же, как и раньше; выясним,
что feedback от пользователей бывает implicit и explicit;
сформулируем идею implicit матричных разложений
и познакомимся с часто используемым методом implicit ALS.
Итак, в случае рекомендации товаров
мы уже имеем не матрицу с оценками пользователей для объектов,
а имеем матрицу с какими-то событиями, например матрицу покупок.
То есть в каких-то ячейках матрицы будут нули,
в каких-то — единички, реже — какие-то числа побольше.
Но так или иначе у нас будут присутствовать только положительные
примеры, то есть случаи, когда человек что-то купил.
То есть ему что-то понравилось, и он был готов потратить на это деньги,
и он потратил деньги.
В то же время у нас не будет примеров товаров,
про которые мы точно знаем, что человек никогда это не купит.
Мы никогда не можем понять: человек просто не видел этот товар и поэтому не купил,
или он его не купил, потому что он ему не нравится.
Таким образом, получается, что все известные значения в
матрице будут у нас единичками, ну или каким-то числом больше,
но давайте для простоты рассматривать случай, когда все значения — единички.
Так в принципе может получится,
если никакой товар не покупали больше чем один раз.
Казалось бы, мы можем применить здесь все те же методы.
Но если мы рассматриваем сейчас задачу матричного разложения
как прогнозирование неизвестных значений матрицы, то легко сообразить,
что на такую матрицу, в которой все известные значения — это единички,
легко настроятся константные профили для пользователей и для объектов,
которые, конечно, не будут нести никакой содержательной информации.
Это наводит на мысль, что что-то не так в нашей постановке задачи.
И действительно, у нас есть только примеры,
когда что-то человеку понравилось.
Примеров, когда не понравилось — нет.
И поэтому мы в принципе не можем научить нашу модель понимать,
что что-то кому-то нравится не будет.
Конечно, такая модель не применима на практике.
Таким образом, мы понимаем, что feedback от пользователя
может быть implicit (то есть только какой-то один feedback: только позитивный
или только негативный) либо explicit, когда есть и низкие оценки,
и высокие, как это было в случае задачи рекомендации фильмов.
Это наводит на мысль, что нужно адаптировать методы матричных
разложений для случая implicit feedback'а.
Идея очень простая: давайте заполним неизвестные
значения матрицы каким-то числом, например нулем,
и давайте настраивать матричное разложение на всей матрице.
Если мы будем делать таким образом, мы будем страдать от того,
что нули мы тоже пытаемся приблизить и пытаемся приблизить их так же старательно,
как пытаемся приблизить ненулевые значения.
А это не очень хорошо, ведь в нулях-то мы как раз не уверены,
а в значениях, отличных от нуля, уверены достаточно сильно.
Поэтому можно схитрить.
Можно решать оптимизационную задачу, но каждому слагаемому
в этой задаче присвоить некоторый вес, который зависит от того,
знаем мы значение матрицы для этого i и этого j или нет.
В итоге мы получаем задачу минимизации
некоторого взвешенного расстояния между настоящими ответами и нашими прогнозами.
При этом в случаях, где стоят нули, мы можем брать веса поменьше,
для того чтобы не слишком настраиваться на нули, в которых мы не очень уверены.
Таким образом, мы позволяем нашему алгоритму ошибаться в тех ячейках матрицы,
где стоят нули в большей степени, нежели в тех ячейках матрицы,
где стоят ненулевые элементы.
И это достаточно логично с учетом того, что в нулях мы уверены меньше.
И достаточно логично, что если нашему алгоритму нужно будет ошибиться
в каком-то нуле, для того чтобы лучше прогнозировать известные значения,
можно интерпретировать это как то, что этот ноль, скорее всего,
результат того, что человек не наблюдал этот объект,
а не результат того, что этот объект ему бы не понравился.
В частности, для выбора весов часто используют следующую
простую формулу: 1 плюс α умножить на модуль значения в этой ячейке матрицы.
Обратите внимание: α — это некоторый параметр, который нам нужно подбирать.
Ну обычно подбирают порядок значения,
то есть перебирают между значениями: 10, 100, 1000.
Кроме того, обратите внимание,
мы можем использовать этот метод не только для случая implicit feedback'а,
потому что у нас стоит модуль, и в принципе мы можем считать, что значения,
близкие к нулю, — это значения, в которых мы не очень уверены,
а чем больше значение по модулю, тем больше мы в нем уверены.
Если ко всем этому добавить оптимизацию с помощью метода ALS,
то получится часто используемый на практике алгоритм implicit ALS.
Итак, мы поговорили с вами о задаче рекомендации товаров; выяснили,
чем она отличается от задачи рекомендации фильмов; выяснили, почему нельзя
применить в точности те же методы, которые мы обсуждали до этого; и обсудили проблему
implicit feedback'а и построения матричных разложений для этого случая.