Создание рекомендательной системы на основе графов с Milvus, PinSage, DGL и наборами данных MovieLens
Рекомендательные системы работают на алгоритмах, которые имеют скромное начало, помогая людям отсеивать нежелательную электронную почту. В 1990 году изобретатель Дуг Терри использовал алгоритм коллаборативной фильтрации, чтобы отделять нужные письма от спама. Просто «лайкая» или «ненавидя» письмо, совместно с другими, делающими то же самое с похожим содержимым писем, пользователи могли быстро обучать компьютеры определять, что отправлять во входящие пользователя, а что изолировать в папку нежелательной почты.
В общем смысле рекомендательные системы — это алгоритмы, которые делают пользователям релевантные предложения. Предложениями могут быть фильмы для просмотра, книги для чтения, товары для покупки или что-либо еще в зависимости от сценария или отрасли. Эти алгоритмы окружают нас повсюду, влияя на контент, который мы потребляем, и продукты, которые мы покупаем у крупных технологических компаний, таких как Youtube, Amazon, Netflix и многих других.
Хорошо спроектированные рекомендательные системы могут быть важными генераторами выручки, средствами сокращения затрат и конкурентными преимуществами. Благодаря технологиям с открытым исходным кодом и снижению стоимости вычислений, кастомизированные рекомендательные системы еще никогда не были настолько доступными. В этой статье объясняется, как использовать Milvus, векторную базу данных с открытым исходным кодом; PinSage, графовую сверточную нейронную сеть (GCN); deep graph library (DGL), масштабируемый пакет python для глубокого обучения на графах; и наборы данных MovieLens для создания рекомендательной системы на основе графов.
Перейти к:
- Как работают рекомендательные системы?
- Инструменты для создания рекомендательной системы
- Создание рекомендательной системы на основе графов с Milvus
Как работают рекомендательные системы?
Существует два распространенных подхода к созданию рекомендательных систем: коллаборативная фильтрация и фильтрация на основе контента. Большинство разработчиков используют один из этих методов или оба, и, хотя рекомендательные системы могут различаться по сложности и устройству, они обычно включают три основных элемента:
- Модель пользователя: Рекомендательные системы требуют моделирования характеристик, предпочтений и потребностей пользователя. Многие рекомендательные системы основывают свои предложения на неявном или явном вводе от пользователей на уровне элементов.
- Модель объекта: Рекомендательные системы также моделируют элементы, чтобы давать рекомендации по элементам на основе портретов пользователей.
- Рекомендательный алгоритм: Основной компонент любой рекомендательной системы — это алгоритм, который обеспечивает ее рекомендации. К часто используемым алгоритмам относятся коллаборативная фильтрация, неявное семантическое моделирование, моделирование на основе графов, комбинированная рекомендация и многое другое.
На высоком уровне рекомендательные системы, которые опираются на коллаборативную фильтрацию, строят модель на основе прошлого поведения пользователя (включая поведенческие сигналы от похожих пользователей), чтобы предсказать, что может быть интересно пользователю. Системы, которые опираются на фильтрацию на основе контента, используют дискретные, заранее определенные теги на основе характеристик элементов, чтобы рекомендовать похожие элементы.
Примером коллаборативной фильтрации может быть персонализированная радиостанция в Spotify, основанная на истории прослушивания пользователя, интересах, музыкальной библиотеке и многом другом. Станция воспроизводит музыку, которую пользователь не сохранял и к которой иным образом не проявлял интерес, но которую часто слушают другие пользователи со схожим вкусом. Примером фильтрации на основе контента может быть радиостанция, основанная на конкретной песне или исполнителе, которая использует атрибуты входных данных для рекомендации похожей музыки.
Инструменты для создания рекомендательной системы
В этом примере создание рекомендательной системы на основе графов с нуля зависит от следующих инструментов:
Pinsage: Графовая сверточная сеть
PinSage — это графовая сверточная сеть на основе случайных блужданий, способная обучать эмбеддинги для узлов в графах веб-масштаба, содержащих миллиарды объектов. Сеть была разработана Pinterest, компанией онлайн-досок для пинов, чтобы предлагать своим пользователям тематические визуальные рекомендации.
Пользователи Pinterest могут «прикалывать» интересующий их контент к «доскам», которые представляют собой коллекции закрепленного контента. Имея более 478 миллионов ежемесячно активных пользователей (MAU) и более 240 миллиардов сохраненных объектов, компания располагает огромным объемом пользовательских данных, для работы с которыми ей необходимо создавать новые технологии.
Двудольный граф пинов и досок.
PinSage использует двудольные графы пинов и досок для генерации высококачественных эмбеддингов из пинов, которые используются для рекомендации пользователям визуально похожего контента. В отличие от традиционных алгоритмов GCN, которые выполняют свертки над матрицами признаков и полным графом, PinSage выбирает близлежащие узлы/пины и выполняет более эффективные локальные свертки посредством динамического построения вычислительных графов.
Выполнение сверток по всей окрестности узла приведет к созданию огромного вычислительного графа. Чтобы снизить требования к ресурсам, традиционные алгоритмы GCN обновляют представление узла путем агрегирования информации из его k-hop-окрестности. PinSage имитирует случайное блуждание, чтобы определить часто посещаемый контент как ключевую окрестность, а затем строит на ее основе свертку.
Поскольку k-hop-окрестности часто пересекаются, локальная свертка по узлам приводит к повторным вычислениям. Чтобы избежать этого, на каждом шаге агрегирования PinSage отображает все узлы без повторных вычислений, затем связывает их с соответствующими узлами верхнего уровня и, наконец, извлекает эмбеддинги узлов верхнего уровня.
Deep Graph Library: масштабируемый Python-пакет для глубокого обучения на графах
Фреймворк DGL.
Deep Graph Library (DGL) — это Python-пакет, предназначенный для построения графовых моделей нейронных сетей поверх существующих фреймворков глубокого обучения (например, PyTorch, MXNet, Gluon и других). DGL включает удобный backend-интерфейс, что упрощает его встраивание во фреймворки, основанные на тензорах и поддерживающие автоматическую генерацию. Упомянутый выше алгоритм PinSage оптимизирован для использования с DGL и PyTorch.
Milvus: векторная база данных с открытым исходным кодом, созданная для AI и поиска по сходству
Как работает поиск по сходству в Milvus?
Milvus — это векторная база данных с открытым исходным кодом, созданная для обеспечения поиска по векторному сходству и приложений искусственного интеллекта (AI). На высоком уровне использование Milvus для поиска по сходству работает следующим образом:
- Модели глубокого обучения используются для преобразования неструктурированных данных в векторы признаков, которые импортируются в Milvus.
- Milvus хранит и индексирует векторы признаков.
- По запросу Milvus выполняет поиск и возвращает векторы, наиболее похожие на входной вектор.
Создание графовой рекомендательной системы с Milvus
Базовый рабочий процесс графовой рекомендательной системы в Milvus.
Базовый рабочий процесс графовой рекомендательной системы в Milvus.
Создание графовой рекомендательной системы с 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
Векторы эмбеддингов pins, сгенерированные с помощью модели 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, который вернет соответствующие ID. Импортируйте ID и соответствующую информацию о фильмах в 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 на основе ID фильмов, затем используйте 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: Получение рекомендаций
Теперь система будет рекомендовать фильмы, наиболее похожие на поисковые запросы пользователя. Это общий рабочий процесс создания рекомендательной системы. Чтобы быстро протестировать и развернуть рекомендательные системы и другие AI-приложения, попробуйте Milvus bootcamp.
Milvus может использоваться не только для рекомендательных систем
Milvus — это мощный инструмент, способный обеспечивать работу широкого спектра приложений искусственного интеллекта и поиска по векторному сходству. Чтобы узнать больше о проекте, ознакомьтесь со следующими ресурсами:
Читать далее

Introducing Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud
We're announcing the general availability of Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud.

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

Zilliz Cloud Launches in AWS Australia, Expanding Global Reach to Australia and Neighboring Markets
We're thrilled to announce that Zilliz Cloud is now available in the AWS Sydney, Australia region (ap-southeast-2).



