Creación de un sistema de recomendación basado en grafos con Milvus, PinSage, DGL y conjuntos de datos de MovieLens
Los sistemas de recomendación funcionan con algoritmos que tienen orígenes humildes ayudando a los humanos a filtrar el correo electrónico no deseado. En 1990, el inventor Doug Terry utilizó un algoritmo de filtrado colaborativo para separar el correo electrónico deseable del correo basura. Simplemente al indicar que un correo electrónico "gustaba" o "no gustaba", en colaboración con otras personas que hacían lo mismo con contenido de correo similar, los usuarios podían entrenar rápidamente a las computadoras para determinar qué enviar a la bandeja de entrada de un usuario y qué aislar en la carpeta de correo basura.
En un sentido general, los sistemas de recomendación son algoritmos que hacen sugerencias relevantes a los usuarios. Las sugerencias pueden ser películas para ver, libros para leer, productos para comprar o cualquier otra cosa según el escenario o la industria. Estos algoritmos están por todas partes, influyendo en el contenido que consumimos y en los productos que compramos a grandes empresas tecnológicas como Youtube, Amazon, Netflix y muchas más.
Los sistemas de recomendación bien diseñados pueden ser generadores de ingresos esenciales, reductores de costos y diferenciadores competitivos. Gracias a la tecnología de código abierto y a la disminución de los costos de computación, los sistemas de recomendación personalizados nunca han sido más accesibles. Este artículo explica cómo usar Milvus, una base de datos vectorial de código abierto; PinSage, una red neuronal convolucional de grafos (GCN); deep graph library (DGL), un paquete escalable de python para aprendizaje profundo en grafos; y conjuntos de datos MovieLens para crear un sistema de recomendación basado en grafos.
Ir a:
- ¿Cómo funcionan los sistemas de recomendación?
- Herramientas para crear un sistema de recomendación
- Creación de un sistema de recomendación basado en grafos con Milvus
¿Cómo funcionan los sistemas de recomendación?
Hay dos enfoques comunes para crear sistemas de recomendación: el filtrado colaborativo y el filtrado basado en contenido. La mayoría de los desarrolladores utilizan uno o ambos métodos y, aunque los sistemas de recomendación pueden variar en complejidad y construcción, normalmente incluyen tres elementos principales:
- Modelo de usuario: Los sistemas de recomendación requieren modelar las características, preferencias y necesidades del usuario. Muchos sistemas de recomendación basan sus sugerencias en información implícita o explícita a nivel de ítem proporcionada por los usuarios.
- Modelo de objeto: Los sistemas de recomendación también modelan ítems para hacer recomendaciones de ítems basadas en retratos de usuario.
- Algoritmo de recomendación: El componente central de cualquier sistema de recomendación es el algoritmo que impulsa sus recomendaciones. Los algoritmos de uso común incluyen filtrado colaborativo, modelado semántico implícito, modelado basado en grafos, recomendación combinada y más.
A un alto nivel, los sistemas de recomendación que se basan en el filtrado colaborativo construyen un modelo a partir del comportamiento pasado de los usuarios (incluidas las entradas de comportamiento de usuarios similares) para predecir en qué podría estar interesado un usuario. Los sistemas que se basan en el filtrado basado en contenido utilizan etiquetas discretas y predefinidas basadas en las características de los ítems para recomendar ítems similares.
Un ejemplo de filtrado colaborativo sería una estación de radio personalizada en Spotify que se basa en el historial de escucha, los intereses, la biblioteca musical y más de un usuario. La estación reproduce música que el usuario no ha guardado ni por la que ha expresado interés de otra manera, pero que otros usuarios con gustos similares suelen tener. Un ejemplo de filtrado basado en contenido sería una estación de radio basada en una canción o artista específico que utiliza atributos de la entrada para recomendar música similar.
Herramientas para crear un sistema de recomendación
En este ejemplo, crear un sistema de recomendación basado en grafos desde cero depende de las siguientes herramientas:
Pinsage: Una red convolucional de grafos
PinSage es una red convolucional de grafos de paseo aleatorio capaz de aprender embeddings para nodos en grafos a escala web que contienen miles de millones de objetos. La red fue desarrollada por Pinterest, una empresa de tableros de anuncios en línea, para ofrecer recomendaciones visuales temáticas a sus usuarios.
Los usuarios de Pinterest pueden "fijar" contenido que les interesa en "tableros", que son colecciones de contenido fijado. Con más de 478 millones de usuarios activos mensuales (MAU) y más de 240 mil millones de objetos guardados, la empresa tiene una inmensa cantidad de datos de usuarios para los que debe crear nueva tecnología a fin de mantenerse al día.
Grafo bipartito de pins-tableros.
PinSage utiliza grafos bipartitos de pins-tableros para generar embeddings de alta calidad a partir de pins que se usan para recomendar contenido visualmente similar a los usuarios. A diferencia de los algoritmos GCN tradicionales, que realizan convoluciones sobre las matrices de características y el grafo completo, PinSage muestrea los nodos/Pins cercanos y realiza convoluciones locales más eficientes mediante la construcción dinámica de grafos computacionales.
Realizar convoluciones en toda la vecindad de un nodo dará como resultado un grafo computacional masivo. Para reducir los requisitos de recursos, los algoritmos GCN tradicionales actualizan la representación de un nodo agregando información de su vecindad de k saltos. PinSage simula un paseo aleatorio para establecer el contenido visitado con frecuencia como la vecindad clave y luego construye una convolución basada en ella.
Debido a que a menudo hay solapamiento en las vecindades de k saltos, la convolución local en los nodos da lugar a cálculos repetidos. Para evitar esto, en cada paso de agregación PinSage mapea todos los nodos sin cálculos repetidos, luego los vincula con los nodos correspondientes de nivel superior y finalmente recupera los embeddings de los nodos de nivel superior.
Deep Graph Library: Un paquete escalable de python para aprendizaje profundo en grafos
Framework DGL.
Deep Graph Library (DGL) es un paquete de Python diseñado para construir modelos de redes neuronales basados en grafos sobre frameworks de aprendizaje profundo existentes (por ejemplo, PyTorch, MXNet, Gluon y más). DGL incluye una interfaz de backend fácil de usar, lo que facilita su implantación en frameworks basados en tensores y que admiten generación automática. El algoritmo PinSage mencionado anteriormente está optimizado para su uso con DGL y PyTorch.
Milvus: Una base de datos vectorial de código abierto creada para IA y búsqueda por similitud
¿Cómo funciona la búsqueda por similitud en Milvus?
Milvus es una base de datos vectorial de código abierto creada para impulsar la búsqueda por similitud vectorial y aplicaciones de inteligencia artificial (IA). A alto nivel, usar Milvus para la búsqueda por similitud funciona de la siguiente manera:
- Se utilizan modelos de aprendizaje profundo para convertir datos no estructurados en vectores de características, que se importan a Milvus.
- Milvus almacena e indexa los vectores de características.
- Cuando se solicita, Milvus busca y devuelve los vectores más similares a un vector de entrada.
Construcción de un sistema de recomendación basado en grafos con Milvus
Flujo de trabajo básico de un sistema de recomendación basado en grafos en Milvus.
Flujo de trabajo básico de un sistema de recomendación basado en grafos en Milvus.
Construir un sistema de recomendación basado en grafos con Milvus implica los siguientes pasos:
Paso 1: Preprocesar los datos
El preprocesamiento de datos implica convertir datos sin procesar en un formato más fácil de entender. Este ejemplo utiliza los conjuntos de datos abiertos MovieLens[5] (m1–1m), que contienen 1,000,000 de calificaciones de 4,000 películas aportadas por 6,000 usuarios. Estos datos fueron recopilados por GroupLens e incluyen descripciones de películas, calificaciones de películas y características de usuarios.
Tenga en cuenta que los conjuntos de datos MovieLens utilizados en este ejemplo requieren una limpieza u organización de datos mínima. Sin embargo, si utiliza conjuntos de datos diferentes, los resultados pueden variar.
Para comenzar a crear un sistema de recomendación, cree un grafo bipartito usuario-película con fines de clasificación utilizando datos históricos de usuario-película del conjunto de datos 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()
Paso 2: Entrenar el modelo con PinSage
Los vectores de incrustación de pines generados mediante el modelo PinSage son vectores de características de la información de películas adquirida. Cree un modelo PinSage basado en el grafo bipartito g y las dimensiones personalizadas del vector de características de películas (256-d de forma predeterminada). Luego, entrene el modelo con PyTorch para obtener las incrustaciones h_item de 4,000 películas.
# 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)
Paso 3: Cargar datos
Cargue las incrustaciones de películas h_item generadas por el modelo PinSage en Milvus, que devolverá los ID correspondientes. Importe los ID y la información de películas correspondiente a MySQL.
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
Paso 4: Realizar una búsqueda de similitud vectorial
Obtenga las incrustaciones correspondientes en Milvus según los ID de las películas y luego use Milvus para realizar una búsqueda de similitud con estas incrustaciones. A continuación, identifique la información de películas correspondiente en una base de datos 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()
Paso 5: Obtener recomendaciones
El sistema ahora recomendará las películas más similares a las consultas de búsqueda de los usuarios. Este es el flujo de trabajo general para crear un sistema de recomendación. Para probar e implementar rápidamente sistemas de recomendación y otras aplicaciones de IA, pruebe el bootcamp de Milvus.
Milvus puede impulsar más que sistemas de recomendación
Milvus es una herramienta potente capaz de impulsar una amplia variedad de aplicaciones de inteligencia artificial y búsqueda de similitud vectorial. Para obtener más información sobre el proyecto, consulte los siguientes recursos:
Sigue leyendo

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.

Legal Document Analysis: Harnessing Zilliz Cloud's Semantic Search and RAG for Legal Insights
Enhance legal document analysis with Zilliz Cloud’s Semantic Search and RAG. Improve accuracy, efficiency, and scalability for contracts, case law, and compliance.



