Неявная обратная связь

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

Данные

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

Очень сложно найти общедоступные данные для этого проекта. Я использую данные из Обмен и чтение статей из CI&T DeskDrop. Deskdrop — это платформа для внутренних коммуникаций, которая позволяет сотрудникам компаний делиться соответствующими статьями со своими коллегами и сотрудничать с ними.

Данные содержат около 73 тысяч взаимодействий пользователей с более чем 3 тысячами общедоступных статей, размещенных на платформе, и, что более важно, они содержат обширную неявную обратную связь, различные типы взаимодействия были зарегистрированы, что позволяет сделать вывод об уровне интереса пользователя к статьям.

Предварительная обработка данных

  • Удалить eventType == 'CONTENT REMOVED' из articles_df.
  • Объедините interactions_df с articles_df.
  • Удаление ненужных столбцов

Это глава набора данных

df['eventType'].value_counts()

Типы событий:

  1. Просмотр: Пользователь открыл ссылку на статью. Просмотр страницы на контентном сайте может означать многое. Это может означать, что пользователь заинтересован, или, может быть, пользователь просто потерялся или кликнул случайно.
  2. Нравится: пользователь прочитал и ему понравился контент.
  3. Закладка: пользователь добавил статью в закладки для быстрого возврата в будущем. Это явный признак того, что пользователь находит что-то интересное.
  4. Комментарий создан: пользователь оставил комментарий к статье, который может быть +ve или -ve.
  5. Подписывайтесь: пользователю нравится ваш контент, и он хочет читать его дальше.

Мы собираемся связать каждый тип события с весом или силой.

event_type_strength = {
   'VIEW': 1.0,
   'LIKE': 2.0, 
   'BOOKMARK': 3.0, 
   'FOLLOW': 4.0,
   'COMMENT CREATED': 5.0,  
}df['eventStrength'] = df['eventType'].apply(lambda x: event_type_strength[x])

Удаление повторяющихся записей

df = df.drop_duplicates()
grouped_df = df.groupby(['personId', 'contentId', 'title']).sum().reset_index()

Матричная факторизация в совместной фильтрации

В совместной фильтрации матричная факторизация — это современное решение проблемы разреженных данных, хотя она стала широко известна после Конкурса на приз Netflix.

Матричная факторизация данных о рейтингах фильмов

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

Использование модели рекомендации с чередованием наименьших квадратов

Вместо того, чтобы представлять явный рейтинг, eventStrength может представлять «уверенность» с точки зрения того, насколько сильным было взаимодействие. Статьи с большим значением силы события, написанным человеком, могут иметь больший вес в нашей матрице оценок силы события.

  • Чтобы обойти предупреждение «отрицательное целое число», мне придется создать числовые столбцы person_id и content_id.
  • Создайте две матрицы: одну для подбора модели (контент-человек) и одну для рекомендаций (человек-контент).
  • Инициализировать рекомендательную модель Alternating Least Squares (ALS).
  • Соответствуйте модели с помощью разреженной матрицы контента-человека.
  • Мы устанавливаем тип нашей матрицы на удвоение, чтобы функция ALS работала правильно.

AlS можно использовать для рекомендаций, а также для поиска похожих товаров.

Поиск похожих статей

Мы собираемся найти 10 наиболее похожих статей для content_id = 450 под заголовком «Победа добросовестного использования Google хороша для открытого исходного кода», эта статья о Google и открытом источник.

  • Получите векторы человека и контента из нашей обученной модели.
  • Вычислить векторные нормы.
  • Вычислите показатель сходства.
  • Получите 10 лучших материалов.
  • Создайте список кортежей с оценкой контента, наиболее похожих на эту статью.

Рекомендации

Здесь у нас есть 10 лучших рекомендаций для person_id = 50.

Профиль на GitHub: https://github.com/saranshrajput

Использованная литература: