Criando um Sistema de Recomendação Baseado em Grafos com Milvus, PinSage, DGL e Conjuntos de Dados MovieLens
Os sistemas de recomendação são impulsionados por algoritmos que têm origens humildes ajudando humanos a filtrar emails indesejados. Em 1990, o inventor Doug Terry usou um algoritmo de filtragem colaborativa para separar emails desejáveis de lixo eletrônico. Simplesmente ao "curtir" ou "odiar" um email, em colaboração com outras pessoas fazendo a mesma coisa com conteúdos de email semelhantes, os usuários podiam treinar rapidamente os computadores para determinar o que enviar para a caixa de entrada de um usuário — e o que isolar na pasta de lixo eletrônico.
Em um sentido geral, sistemas de recomendação são algoritmos que fazem sugestões relevantes aos usuários. As sugestões podem ser filmes para assistir, livros para ler, produtos para comprar ou qualquer outra coisa, dependendo do cenário ou da indústria. Esses algoritmos estão por toda parte, influenciando o conteúdo que consumimos e os produtos que compramos de grandes empresas de tecnologia como Youtube, Amazon, Netflix e muitas outras.
Sistemas de recomendação bem projetados podem ser geradores essenciais de receita, redutores de custos e diferenciais competitivos. Graças à tecnologia de código aberto e à queda nos custos computacionais, sistemas de recomendação personalizados nunca foram tão acessíveis. Este artigo explica como usar Milvus, um banco de dados vetorial de código aberto; PinSage, uma rede neural convolucional em grafos (GCN); deep graph library (DGL), um pacote python escalável para aprendizado profundo em grafos; e conjuntos de dados MovieLens para construir um sistema de recomendação baseado em grafos.
Ir para:
- Como funcionam os sistemas de recomendação?
- Ferramentas para construir um sistema de recomendação
- Construindo um sistema de recomendação baseado em grafos com Milvus
Como funcionam os sistemas de recomendação?
Existem duas abordagens comuns para construir sistemas de recomendação: filtragem colaborativa e filtragem baseada em conteúdo. A maioria dos desenvolvedores usa um ou ambos os métodos e, embora os sistemas de recomendação possam variar em complexidade e construção, eles normalmente incluem três elementos centrais:
- Modelo de usuário: Sistemas de recomendação exigem a modelagem de características, preferências e necessidades dos usuários. Muitos sistemas de recomendação baseiam suas sugestões em entradas implícitas ou explícitas em nível de item feitas pelos usuários.
- Modelo de objeto: Sistemas de recomendação também modelam itens para fazer recomendações de itens com base em retratos dos usuários.
- Algoritmo de recomendação: O componente central de qualquer sistema de recomendação é o algoritmo que impulsiona suas recomendações. Algoritmos comumente usados incluem filtragem colaborativa, modelagem semântica implícita, modelagem baseada em grafos, recomendação combinada e outros.
Em um nível geral, sistemas de recomendação que dependem de filtragem colaborativa constroem um modelo a partir do comportamento passado do usuário (incluindo entradas de comportamento de usuários semelhantes) para prever em que um usuário pode estar interessado. Sistemas que dependem de filtragem baseada em conteúdo usam tags discretas e predefinidas com base nas características dos itens para recomendar itens semelhantes.
Um exemplo de filtragem colaborativa seria uma estação de rádio personalizada no Spotify baseada no histórico de escuta, interesses, biblioteca musical e mais de um usuário. A estação toca músicas que o usuário não salvou nem demonstrou interesse de outra forma, mas que outros usuários com gosto semelhante costumam ouvir. Um exemplo de filtragem baseada em conteúdo seria uma estação de rádio baseada em uma música ou artista específico que usa atributos da entrada para recomendar músicas semelhantes.
Ferramentas para construir um sistema de recomendação
Neste exemplo, construir um sistema de recomendação baseado em grafos do zero depende das seguintes ferramentas:
Pinsage: Uma rede convolucional em grafos
PinSage é uma rede convolucional em grafos baseada em caminhada aleatória, capaz de aprender embeddings para nós em grafos em escala web contendo bilhões de objetos. A rede foi desenvolvida pelo Pinterest, uma empresa de mural online, para oferecer recomendações visuais temáticas aos seus usuários.
Os usuários do Pinterest podem "fixar" conteúdos que lhes interessam em "boards," que são coleções de conteúdos fixados. Com mais de 478 milhões de usuários ativos mensais (MAU) e mais de 240 bilhões de objetos salvos, a empresa possui uma quantidade imensa de dados de usuários, para a qual precisa desenvolver novas tecnologias a fim de acompanhar esse crescimento.
Grafo bipartido de pins-boards.
O PinSage usa grafos bipartidos de pins-boards para gerar embeddings de alta qualidade a partir de pins, que são usados para recomendar conteúdos visualmente semelhantes aos usuários. Diferentemente dos algoritmos GCN tradicionais, que realizam convoluções nas matrizes de características e no grafo completo, o PinSage amostra os nós/Pins próximos e realiza convoluções locais mais eficientes por meio da construção dinâmica de grafos computacionais.
Realizar convoluções em toda a vizinhança de um nó resultará em um grafo computacional massivo. Para reduzir os requisitos de recursos, os algoritmos GCN tradicionais atualizam a representação de um nó agregando informações de sua vizinhança de k saltos. O PinSage simula uma caminhada aleatória para definir conteúdos frequentemente visitados como a vizinhança-chave e, em seguida, constrói uma convolução com base nela.
Como frequentemente há sobreposição nas vizinhanças de k saltos, a convolução local em nós resulta em computação repetida. Para evitar isso, em cada etapa de agregação, o PinSage mapeia todos os nós sem cálculos repetidos, depois os vincula aos nós correspondentes de nível superior e, por fim, recupera os embeddings dos nós de nível superior.
Deep Graph Library: Um pacote Python escalável para deep learning em grafos
Framework DGL.
Deep Graph Library (DGL) é um pacote Python projetado para construir modelos de redes neurais baseados em grafos sobre frameworks de deep learning existentes (por exemplo, PyTorch, MXNet, Gluon e outros). O DGL inclui uma interface de backend amigável ao usuário, tornando fácil sua implantação em frameworks baseados em tensores e que oferecem suporte à geração automática. O algoritmo PinSage mencionado acima é otimizado para uso com DGL e PyTorch.
Milvus: Um banco de dados vetorial open-source criado para IA e busca por similaridade
Como a busca por similaridade funciona no Milvus?
Milvus é um banco de dados vetorial open-source criado para potencializar aplicações de busca por similaridade vetorial e inteligência artificial (IA). Em um nível geral, usar o Milvus para busca por similaridade funciona da seguinte forma:
- Modelos de deep learning são usados para converter dados não estruturados em vetores de características, que são importados para o Milvus.
- O Milvus armazena e indexa os vetores de características.
- Mediante solicitação, o Milvus pesquisa e retorna os vetores mais semelhantes a um vetor de entrada.
Construindo um sistema de recomendação baseado em grafos com Milvus
Fluxo de trabalho básico de um sistema de recomendação baseado em grafos no Milvus.
Fluxo de trabalho básico de um sistema de recomendação baseado em grafos no Milvus.
Construir um sistema de recomendação baseado em grafos com Milvus envolve as seguintes etapas:
Etapa 1: Pré-processar dados
O pré-processamento de dados envolve transformar dados brutos em um formato mais facilmente compreensível. Este exemplo usa os conjuntos de dados abertos MovieLens[5] (m1–1m), que contêm 1.000.000 de avaliações de 4.000 filmes contribuídas por 6.000 usuários. Esses dados foram coletados pelo GroupLens e incluem descrições de filmes, avaliações de filmes e características dos usuários.
Observe que os conjuntos de dados MovieLens usados neste exemplo exigem limpeza ou organização mínima dos dados. No entanto, se você estiver usando conjuntos de dados diferentes, seus resultados podem variar.
Para começar a criar um sistema de recomendação, crie um grafo bipartido usuário-filme para fins de classificação usando dados históricos de usuário-filme do conjunto de dados 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()
Etapa 2: Treine o modelo com PinSage
Os vetores de embedding dos pins gerados usando o modelo PinSage são vetores de características das informações de filmes adquiridas. Crie um modelo PinSage com base no grafo bipartido g e nas dimensões personalizadas do vetor de características dos filmes (256-d por padrão). Em seguida, treine o modelo com PyTorch para obter os embeddings h_item de 4.000 filmes.
# 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)
Etapa 3: Carregue os dados
Carregue os embeddings de filmes h_item gerados pelo modelo PinSage no Milvus, que retornará os IDs correspondentes. Importe os IDs e as informações correspondentes dos filmes para o MySQL.
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
Etapa 4: Realize a busca por similaridade vetorial
Obtenha os embeddings correspondentes no Milvus com base nos IDs dos filmes e, em seguida, use o Milvus para executar a busca por similaridade com esses embeddings. Depois, identifique as informações correspondentes dos filmes em um banco de dados 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()
Etapa 5: Obtenha recomendações
O sistema agora recomendará os filmes mais semelhantes às consultas de pesquisa dos usuários. Este é o fluxo de trabalho geral para criar um sistema de recomendação. Para testar e implantar rapidamente sistemas de recomendação e outros aplicativos de IA, experimente o bootcamp do Milvus.
O Milvus pode impulsionar mais do que sistemas de recomendação
O Milvus é uma ferramenta poderosa capaz de impulsionar uma ampla variedade de aplicações de inteligência artificial e busca por similaridade vetorial. Para saber mais sobre o projeto, confira os seguintes recursos:
Continue lendo
Stop Building AI Data Infra for the Wrong Stage
Learn how AI data infrastructure should evolve from prototype to enterprise scale, and when Vector Lakebase becomes the right architecture for AI apps.

Zilliz Cloud On-Demand Compute: Pay Only for What You Use
The customer case behind Zilliz Cloud On-Demand: how a $10K vector search bill came down to under $500, and the engineering changes that made it possible.

How to Build an Enterprise-Ready RAG Pipeline on AWS with Bedrock, Zilliz Cloud, and LangChain
Build production-ready enterprise RAG with AWS Bedrock, Nova models, Zilliz Cloud, and LangChain. Complete tutorial with deployable code.



