🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Como funcionam os sistemas de recomendação?

Como funcionam os sistemas de recomendação?

  • Scenarios
December 01, 2020
Shiyu Chen

Os sistemas de recomendação são alimentados por algoritmos que tiveram um início humilde, ajudando os seres humanos a filtrar e-mails indesejados. Em 1990, o inventor Doug Terry utilizou um algoritmo de filtragem colaborativa para separar o correio eletrónico desejável do lixo eletrónico. Simplesmente "gostando" ou "odiando" um e-mail, em colaboração com outros que faziam o mesmo com conteúdos de e-mail semelhantes, os utilizadores podiam treinar rapidamente os computadores para determinarem o que deviam enviar para a caixa de entrada do utilizador - e o que deviam sequestrar para a pasta do lixo eletrónico.

De um modo geral, os sistemas de recomendação são algoritmos que fazem sugestões relevantes aos utilizadores. As sugestões podem ser filmes para ver, livros para ler, produtos para comprar ou qualquer outra coisa, dependendo do cenário ou do sector. Estes algoritmos estão à nossa volta, influenciando o conteúdo que consumimos e os produtos que compramos a grandes empresas tecnológicas como o Youtube, a Amazon, a Netflix e muitas outras.

Os sistemas de recomendação bem concebidos podem ser geradores de receitas essenciais, redutores de custos e factores de diferenciação competitiva. Graças à tecnologia de código aberto e à redução dos custos de computação, os sistemas de recomendação personalizados nunca foram tão acessíveis. Este artigo explica como usar o Milvus, um banco de dados vetorial de código aberto; o PinSage, uma rede neural convolucional de gráficos (GCN); a biblioteca de gráficos profundos (DGL), um pacote python escalável para aprendizado profundo em gráficos; e os conjuntos de dados do MovieLens para criar um sistema de recomendação baseado em gráficos.

Saltar para:

Como funcionam os sistemas de recomendação?

Existem duas abordagens comuns para a criação de sistemas de recomendação: filtragem colaborativa e filtragem baseada em conteúdo. A maioria dos programadores utiliza um ou ambos os métodos e, embora os sistemas de recomendação possam variar em termos de complexidade e construção, normalmente incluem três elementos principais:

  1. Modelo do utilizador: Os sistemas de recomendação requerem a modelação das caraterísticas, preferências e necessidades do utilizador. Muitos sistemas de recomendação baseiam as suas sugestões em informações implícitas ou explícitas dos utilizadores ao nível dos itens.
  2. Modelo de objeto: Os sistemas de recomendação também modelam itens para fazer recomendações de itens com base nos retratos dos utilizadores.
  3. Algoritmo de recomendação: O componente central de qualquer sistema de recomendação é o algoritmo que fornece as suas recomendações. Os algoritmos normalmente utilizados incluem a filtragem colaborativa, a modelação semântica implícita, a modelação baseada em gráficos, a recomendação combinada, entre outros.

A um nível elevado, os sistemas de recomendação que se baseiam na filtragem colaborativa constroem um modelo a partir do comportamento anterior do utilizador (incluindo entradas de comportamento de utilizadores semelhantes) para prever aquilo em que um utilizador poderá estar interessado. Os sistemas que se baseiam na filtragem baseada no conteúdo utilizam etiquetas discretas e predefinidas com base nas caraterísticas do item para recomendar itens semelhantes.

Um exemplo de filtragem colaborativa seria uma estação de rádio personalizada no Spotify que se baseia no histórico de audição de um utilizador, nos seus interesses, na sua biblioteca de música e muito mais. A estação reproduz música que o utilizador não guardou nem manifestou interesse, mas que outros utilizadores com gostos semelhantes costumam ouvir. Um exemplo de filtragem baseada no conteúdo seria uma estação de rádio baseada numa canção ou artista específico que utiliza atributos da entrada para recomendar música semelhante.

Ferramentas para construir um sistema de recomendação

Neste exemplo, a criação de um sistema de recomendação baseado em grafos a partir do zero depende das seguintes ferramentas:

Pinsage: Uma rede convolucional de grafos

O PinSage é uma rede convolucional de grafos de passeio aleatório capaz de aprender embeddings para nós em grafos à escala da Web que contêm milhares de milhões de objectos. A rede foi desenvolvida pelo Pinterest, uma empresa online de pinboards, para oferecer recomendações visuais temáticas aos seus utilizadores.

Os utilizadores do Pinterest podem "fixar" conteúdos que lhes interessam em "quadros", que são colecções de conteúdos fixados. Com mais de 478 milhões de utilizadores activos mensais (MAU) e mais de 240 mil milhões de objectos guardados, a empresa tem uma quantidade imensa de dados de utilizadores que tem de desenvolver novas tecnologias para acompanhar.

1.png 1.png

O PinSage utiliza gráficos bipartidos de pins-boards para gerar embeddings de alta qualidade a partir de pins que são utilizados para recomendar conteúdos visualmente semelhantes aos utilizadores. Ao contrário dos algoritmos GCN tradicionais, que efectuam convoluções nas matrizes de caraterísticas e no gráfico completo, o PinSage recolhe amostras dos nós/Pins próximos e efectua convoluções locais mais eficientes através da construção dinâmica de gráficos computacionais.

A realização de convoluções em toda a vizinhança de um nó resultará num gráfico computacional maciço. Para reduzir os requisitos de recursos, os algoritmos GCN tradicionais actualizam a representação de um nó agregando informações da sua vizinhança de k-hop. O PinSage simula o random-walk para definir o conteúdo frequentemente visitado como a vizinhança chave e, em seguida, constrói uma convolução com base nele.

Como existe frequentemente sobreposição nas vizinhanças de k-hop, a convolução local nos nós resulta em computação repetida. Para o evitar, em cada passo agregado, o PinSage mapeia todos os nós sem cálculos repetidos, liga-os depois aos nós de nível superior correspondentes e, finalmente, recupera os embeddings dos nós de nível superior.

Biblioteca de Grafos Profundos: Um pacote python escalável para aprendizagem profunda em gráficos

dgl-framework-building-graph-based-recommender-milvus.png dgl-framework-building-graph-based-recommender-milvus.png

A Biblioteca de Grafos Profundos (DGL) é um pacote Python concebido para construir modelos de redes neurais baseados em grafos em cima de estruturas de aprendizagem profunda existentes (por exemplo, PyTorch, MXNet, Gluon, e mais). O DGL inclui uma interface de backend de fácil utilização, facilitando a implantação em quadros baseados em tensores e que suportam a geração automática. O algoritmo PinSage mencionado acima é optimizado para utilização com DGL e PyTorch.

how-does-milvus-work.png como-funciona-milvus.png

O Milvus é uma base de dados vetorial de código aberto criada para potenciar a pesquisa de semelhanças vectoriais e aplicações de inteligência artificial (IA). Num nível elevado, a utilização do Milvus para pesquisa de semelhanças funciona da seguinte forma:

  1. São utilizados modelos de aprendizagem profunda para converter dados não estruturados em vectores de caraterísticas, que são importados para o Milvus.
  2. O Milvus armazena e indexa os vectores de caraterísticas.
  3. Mediante pedido, o Milvus procura e devolve os vectores mais semelhantes a um vetor de entrada.

Criar um sistema de recomendação baseado em grafos com o Milvus

beike-intelligent-house-platform-diagram.jpg beike-intelligent-house-platform-diagram.jpg

3-building-graph-based-recommender-system.png 3-construir-sistema-de-recomendação-baseado-em-grafos.png

A construção de um sistema de recomendação baseado em gráficos com Milvus envolve os seguintes passos:

Passo 1: Pré-processar dados

O pré-processamento de dados envolve a transformação de dados brutos num formato mais facilmente compreensível. Este exemplo utiliza os conjuntos de dados abertos MovieLens[5] (m1-1m), que contêm 1.000.000 de classificações de 4.000 filmes, contribuídas por 6.000 utilizadores. Estes dados foram recolhidos pelo GroupLens e incluem descrições de filmes, classificações de filmes e caraterísticas dos utilizadores.

Note-se que os conjuntos de dados do MovieLens utilizados neste exemplo requerem uma limpeza ou organização mínima dos dados. No entanto, se você estiver usando conjuntos de dados diferentes, sua milhagem pode variar.

Para começar a criar um sistema de recomendação, crie um gráfico bipartido de usuário-filme para fins de classificação usando dados históricos de usuário-filme do conjunto de dados do 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: treinar o modelo com o PinSage

Os vectores de incorporação de pinos gerados com o modelo PinSage são vectores de caraterísticas das informações de filmes adquiridas. Crie um modelo PinSage com base no gráfico bipartido g e nas dimensões personalizadas do vetor de caraterísticas do filme (256-d por predefinição). Em seguida, treine o modelo com o 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: Carregar dados

Carregue os embeddings de filmes h_item gerados pelo modelo PinSage no Milvus, que devolverá os IDs correspondentes. Importe os IDs e as informações dos filmes correspondentes 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)

Obtenha os embeddings correspondentes no Milvus com base nos IDs dos filmes e, em seguida, utilize o Milvus para efetuar uma pesquisa de semelhança com estes embeddings. Em seguida, identificar a informação do filme correspondente numa base 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()

Passo 5: Obter recomendações

O sistema irá agora recomendar os filmes mais semelhantes às consultas de pesquisa dos utilizadores. Este é o fluxo de trabalho geral para criar um sistema de recomendação. Para testar e implementar rapidamente sistemas de recomendação e outras aplicações de IA, experimente o bootcamp do Milvus.

O Milvus pode fornecer mais do que sistemas de recomendação

O Milvus é uma ferramenta poderosa capaz de alimentar uma vasta gama de aplicações de inteligência artificial e de pesquisa de semelhanças vectoriais. Para saber mais sobre o projeto, consulte os seguintes recursos:

  • Leia o nosso blogue.
  • Interagir com a nossa comunidade de código aberto no Slack.
  • Utilize ou contribua para a base de dados vetorial mais popular do mundo no GitHub.

Like the article? Spread the word

Continue Lendo