Как работают рекомендательные системы?
Системы рекомендаций работают на основе алгоритмов, которые имеют скромное начало, помогая людям отсеивать нежелательную почту. В 1990 году изобретатель Даг Терри использовал алгоритм совместной фильтрации для сортировки нужных писем от нежелательных. Просто поставив "лайк" или "ненависть" к письму в сотрудничестве с другими пользователями, которые делали то же самое с похожим содержимым, пользователи могли быстро обучить компьютеры определять, что следует отправить в папку "Входящие", а что - в папку "Нежелательная почта".
В общем смысле рекомендательные системы - это алгоритмы, которые делают соответствующие предложения пользователям. Предложения могут быть фильмами для просмотра, книгами для чтения, товарами для покупки или чем-либо еще, в зависимости от сценария или отрасли. Эти алгоритмы окружают нас повсюду, влияя на контент, который мы потребляем, и на товары, которые мы покупаем у таких крупных технологических компаний, как Youtube, Amazon, Netflix и многих других.
Хорошо продуманные рекомендательные системы могут стать важным источником дохода, сократить расходы и стать конкурентным преимуществом. Благодаря технологии с открытым исходным кодом и снижению стоимости вычислений настраиваемые рекомендательные системы стали как никогда доступны. В этой статье рассказывается, как использовать Milvus, векторную базу данных с открытым исходным кодом; PinSage, графовую конволюционную нейронную сеть (GCN); deep graph library (DGL), масштабируемый пакет python для глубокого обучения на графах; и наборы данных MovieLens для создания системы рекомендаций на основе графов.
Перейти к:
- Как работают рекомендательные системы?
- Инструменты для создания рекомендательной системы
- Построение рекомендательной системы на основе графов с помощью Milvus
Как работают рекомендательные системы?
Существует два распространенных подхода к построению рекомендательных систем: коллаборативная фильтрация и фильтрация на основе контента. Большинство разработчиков используют один или оба метода, и, хотя рекомендательные системы могут отличаться по сложности и конструкции, они обычно включают три основных элемента:
- Модель пользователя: Рекомендательные системы требуют моделирования характеристик, предпочтений и потребностей пользователя. Многие рекомендательные системы основывают свои предложения на неявном или явном вводе данных от пользователей на уровне элементов.
- Модель объекта: Рекомендательные системы также моделируют объекты, чтобы делать рекомендации на основе портретов пользователей.
- Алгоритм рекомендации: Основным компонентом любой рекомендательной системы является алгоритм, на котором основаны ее рекомендации. Обычно используются такие алгоритмы, как коллаборативная фильтрация, неявное семантическое моделирование, моделирование на основе графов, комбинированные рекомендации и другие.
На высоком уровне рекомендательные системы, основанные на коллаборативной фильтрации, строят модель на основе прошлого поведения пользователей (включая поведение похожих пользователей), чтобы предсказать, что может заинтересовать пользователя. Системы, основанные на контентной фильтрации, используют дискретные, заранее определенные теги, основанные на характеристиках товаров, чтобы рекомендовать похожие товары.
Примером совместной фильтрации может служить персонализированная радиостанция на Spotify, основанная на истории прослушивания, интересах, музыкальной библиотеке пользователя и т. д. Станция воспроизводит музыку, которую пользователь не сохранял и не проявлял к ней интереса, но которую часто слушают другие пользователи со схожим вкусом. Примером фильтрации на основе контента может быть радиостанция, основанная на определенной песне или исполнителе, которая использует атрибуты входных данных, чтобы рекомендовать похожую музыку.
Инструменты для создания рекомендательной системы
В данном примере создание рекомендательной системы на основе графов с нуля зависит от следующих инструментов:
Pinsage: Графовая конволюционная сеть
PinSage - это графовая конволюционная сеть со случайным ходом, способная обучать вкраплениям для узлов в графах веб-масштаба, содержащих миллиарды объектов. Сеть была разработана компанией Pinterest, специализирующейся на онлайн-пинбордах, для предоставления тематических визуальных рекомендаций своим пользователям.
Пользователи Pinterest могут "прикреплять" интересующий их контент к "доскам", которые представляют собой коллекции прикрепленного контента. С более чем 478 миллионами ежемесячных активных пользователей (MAU) и более чем 240 миллиардами сохраненных объектов, компания обладает огромным объемом пользовательских данных, для поддержания которых ей необходимо создавать новые технологии.
1.png
PinSage использует двудольные графы пинов для создания высококачественных вкраплений из пинов, которые используются для рекомендации пользователям визуально похожего контента. В отличие от традиционных алгоритмов GCN, которые выполняют свертки на матрицах признаков и полном графе, PinSage выбирает близлежащие узлы/пины и выполняет более эффективные локальные свертки путем динамического построения вычислительных графов.
Выполнение сверток по всей окрестности узла приведет к созданию массивного вычислительного графа. Чтобы снизить требования к ресурсам, традиционные алгоритмы GCN обновляют представление узла, агрегируя информацию из его k-хоп окрестностей. PinSage имитирует случайную прогулку, чтобы установить часто посещаемый контент в качестве ключевого соседства, а затем строит свертку на его основе.
Поскольку соседства k-hop часто пересекаются, локальная свертка на узлах приводит к повторным вычислениям. Чтобы избежать этого, на каждом шаге агрегирования PinSage отображает все узлы без повторных вычислений, затем связывает их с соответствующими узлами верхнего уровня и, наконец, извлекает вкрапления узлов верхнего уровня.
Библиотека Deep Graph: Масштабируемый python-пакет для глубокого обучения на графах
dgl-framework-building-graph-based-recommender-milvus.png
Deep Graph Library (DGL) - это пакет Python, предназначенный для построения нейросетевых моделей на основе графов поверх существующих фреймворков глубокого обучения (например, PyTorch, MXNet, Gluon и других). DGL включает в себя дружественный интерфейс бэкенда, что упрощает внедрение во фреймворки, основанные на тензорах и поддерживающие автоматическую генерацию. Упомянутый выше алгоритм PinSage оптимизирован для использования с DGL и PyTorch.
Milvus: векторная база данных с открытым исходным кодом, созданная для ИИ и поиска сходств
how-does-milvus-work.png
Milvus - это векторная база данных с открытым исходным кодом, созданная для работы с векторным поиском сходства и приложениями искусственного интеллекта (ИИ). В общих чертах использование Milvus для поиска сходства работает следующим образом:
- Модели глубокого обучения используются для преобразования неструктурированных данных в векторы признаков, которые импортируются в Milvus.
- Milvus хранит и индексирует векторы признаков.
- По запросу Milvus ищет и возвращает векторы, наиболее похожие на входной вектор.
Построение рекомендательной системы на основе графов с помощью Milvus
beike-intelligent-house-platform-diagram.jpg
3-building-graph-based-recommender-system.png
Построение графовой рекомендательной системы с помощью Milvus включает в себя следующие шаги:
Шаг 1: Предварительная обработка данных
Предварительная обработка данных подразумевает преобразование исходных данных в более понятный формат. В этом примере используются открытые наборы данных MovieLens[5] (m1-1m), содержащие 1 000 000 оценок 4 000 фильмов, выставленных 6 000 пользователей. Эти данные были собраны компанией GroupLens и включают описания фильмов, оценки фильмов и характеристики пользователей.
Обратите внимание, что наборы данных MovieLens, используемые в этом примере, требуют минимальной очистки или организации данных. Однако если вы используете другие наборы данных, ваш пробег может отличаться.
Чтобы начать создание рекомендательной системы, постройте двудольный граф "пользователь-фильм" для целей классификации, используя исторические данные о фильмах пользователя из набора данных MovieLens.
graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()
Шаг 2: Обучение модели с помощью PinSage
Векторы встраивания пинов, созданные с помощью модели PinSage, являются векторами признаков полученной информации о фильмах. Создайте модель PinSage на основе двудольного графа g и заданных размеров вектора признаков фильма (по умолчанию 256-d). Затем обучите модель с помощью PyTorch, чтобы получить вкрапления h_item для 4 000 фильмов.
# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
for i in range(len(blocks)):
blocks[i] = blocks[i].to(device)
h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)
Шаг 3: Загрузка данных
Загрузите вложения h_item фильмов, сгенерированные моделью PinSage, в Milvus, который вернет соответствующие идентификаторы. Импортируйте идентификаторы и соответствующую информацию о фильмах в MySQL.
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
Шаг 4: Проведите поиск векторного сходства
Получите соответствующие вкрапления в Milvus на основе идентификаторов фильмов, затем используйте Milvus для выполнения поиска сходства с этими вкраплениями. Затем определите соответствующую информацию о фильме в базе данных MySQL.
# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()
Шаг 5: Получение рекомендаций
Теперь система будет рекомендовать фильмы, наиболее похожие на поисковые запросы пользователей. Таков общий порядок построения рекомендательной системы. Чтобы быстро протестировать и развернуть рекомендательные системы и другие приложения искусственного интеллекта, попробуйте воспользоваться буткемпом Milvus.
Milvus может работать не только с рекомендательными системами
Milvus - это мощный инструмент, способный обеспечить работу огромного количества приложений для искусственного интеллекта и поиска векторного сходства. Чтобы узнать больше о проекте, ознакомьтесь со следующими ресурсами:
- Инструменты для создания рекомендательной системы
- Построение рекомендательной системы на основе графов с помощью Milvus
- Milvus может работать не только с рекомендательными системами
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word