Неявная обратная связь
Скрытая обратная связь выводится из поведения пользователя, например, отмечая, какие документы они выбирают и не выбирают для просмотра, продолжительность времени, потраченного на просмотр документа, просмотр страниц или действия по прокрутке. … пользователь не обязательно уведомляется о том, что его поведение (выбранные документы) будет использоваться как отзыв по релевантности.
Данные
Наша цель сегодня — разработать рекомендательную систему с неявным сбором данных, в нашем случае это данные о потоке кликов.
Очень сложно найти общедоступные данные для этого проекта. Я использую данные из Обмен и чтение статей из CI&T DeskDrop. Deskdrop — это платформа для внутренних коммуникаций, которая позволяет сотрудникам компаний делиться соответствующими статьями со своими коллегами и сотрудничать с ними.
Данные содержат около 73 тысяч взаимодействий пользователей с более чем 3 тысячами общедоступных статей, размещенных на платформе, и, что более важно, они содержат обширную неявную обратную связь, различные типы взаимодействия были зарегистрированы, что позволяет сделать вывод об уровне интереса пользователя к статьям.
Предварительная обработка данных
- Удалить
eventType == 'CONTENT REMOVED'
изarticles_df
. - Объедините
interactions_df
сarticles_df
. - Удаление ненужных столбцов
Это глава набора данных
df['eventType'].value_counts()
Типы событий:
- Просмотр: Пользователь открыл ссылку на статью. Просмотр страницы на контентном сайте может означать многое. Это может означать, что пользователь заинтересован, или, может быть, пользователь просто потерялся или кликнул случайно.
- Нравится: пользователь прочитал и ему понравился контент.
- Закладка: пользователь добавил статью в закладки для быстрого возврата в будущем. Это явный признак того, что пользователь находит что-то интересное.
- Комментарий создан: пользователь оставил комментарий к статье, который может быть +ve или -ve.
- Подписывайтесь: пользователю нравится ваш контент, и он хочет читать его дальше.
Мы собираемся связать каждый тип события с весом или силой.
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
Использованная литература: