🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI

HomeBlogs¿Cómo funcionan los sistemas de recomendación?

¿Cómo funcionan los sistemas de recomendación?

  • Scenarios
December 01, 2020
Shiyu Chen

Los sistemas de recomendación se basan en algoritmos que , en sus humildes orígenes, ayudaban a los humanos a cribar 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. Con sólo "gustar" u "odiar" un correo electrónico, en colaboración con otros que hacían lo mismo con un contenido similar, los usuarios podían entrenar rápidamente a los ordenadores para que determinaran qué enviar a la bandeja de entrada del usuario y qué a la carpeta de correo no deseado.

En sentido general, los sistemas de recomendación son algoritmos que hacen sugerencias pertinentes 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 el sector. Estos algoritmos están a nuestro alrededor, 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 costes y diferenciadores competitivos. Gracias a la tecnología de código abierto y a la disminución de los costes de computación, los sistemas de recomendación personalizados nunca han sido tan accesibles. Este artículo explica cómo utilizar Milvus, una base de datos vectorial de código abierto; PinSage, una red neuronal convolucional de grafos (GCN); deep graph library (DGL), un paquete python escalable para el aprendizaje profundo de grafos; y los conjuntos de datos MovieLens para crear un sistema de recomendación basado en grafos.

Ir a:

¿Cómo funcionan los sistemas de recomendación?

Existen dos métodos habituales para crear sistemas de recomendación: el filtrado colaborativo y el filtrado basado en el 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, suelen incluir tres elementos básicos:

  1. 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 de los usuarios a nivel de artículo.
  2. Modelo de objeto: Los sistemas de recomendación también modelan los objetos con el fin de hacer recomendaciones de artículos basadas en los retratos de los usuarios.
  3. Algoritmo de recomendación: El componente central de cualquier sistema de recomendación es el algoritmo que impulsa sus recomendaciones. Entre los algoritmos más utilizados se encuentran el filtrado colaborativo, el modelado semántico implícito, el modelado basado en gráficos y la recomendación combinada, entre otros.

A grandes rasgos, los sistemas de recomendación que se basan en el filtrado colaborativo construyen un modelo a partir del comportamiento anterior del usuario (incluidas las entradas de comportamiento de usuarios similares) para predecir lo que podría interesarle a un usuario. Los sistemas que se basan en el filtrado por contenido utilizan etiquetas discretas y predefinidas basadas en las características de los artículos para recomendar artículos similares.

Un ejemplo de filtrado colaborativo sería una emisora de radio personalizada en Spotify que se basa en el historial de escucha, los intereses, la biblioteca musical y otros datos del usuario. La emisora reproduce música que el usuario no ha guardado o por la que no ha expresado interés, pero que otros usuarios con gustos similares suelen escuchar. Un ejemplo de filtrado basado en el contenido sería una emisora de radio basada en una canción o artista concretos que utiliza atributos de la entrada para recomendar música similar.

Herramientas para crear un sistema de recomendación

En este ejemplo, la construcción desde cero de un sistema de recomendación basado en grafos depende de las siguientes herramientas:

Pinsage: Una red convolucional de grafos

PinSage es una red convolucional de grafos de recorrido aleatorio capaz de aprender incrustaciones de nodos en grafos a escala web que contienen miles de millones de objetos. La red fue desarrollada por Pinterest, una empresa de tablones de anuncios en línea, para ofrecer recomendaciones visuales temáticas a sus usuarios.

Los usuarios de Pinterest pueden "pinear" contenidos que les interesan en "tableros", que son colecciones de contenidos pineados. Con más de 478 millones de usuarios activos mensuales (MAU) y más de 240.000 millones de objetos guardados, la empresa tiene una inmensa cantidad de datos de usuarios que debe crear nueva tecnología para mantener al día.

1.png 1.png

PinSage utiliza grafos bipartitos de pines para generar incrustaciones de alta calidad a partir de pines que se utilizan para recomendar a los usuarios contenidos visualmente similares. A diferencia de los algoritmos GCN tradicionales, que realizan convoluciones sobre las matrices de características y el grafo completo, PinSage muestrea los nodos/pines cercanos y realiza convoluciones locales más eficientes mediante la construcción dinámica de grafos computacionales.

Realizar convoluciones en todo el vecindario de un nodo dará como resultado un grafo computacional masivo. Para reducir las necesidades de recursos, los algoritmos GCN tradicionales actualizan la representación de un nodo agregando información de su vecindario de k saltos. PinSage simula un paseo aleatorio para establecer el contenido más visitado como vecindario clave y, a continuación, construye una convolución basada en él.

Como a menudo hay solapamiento en los vecindarios k-hop, la convolución local en los nodos da lugar a cálculos repetidos. Para evitar esto, en cada paso agregado PinSage mapea todos los nodos sin cálculos repetidos, luego los vincula a los nodos de nivel superior correspondientes y, por último, recupera las incrustaciones de los nodos de nivel superior.

Biblioteca de grafos profundos: Un paquete python escalable para el aprendizaje profundo en grafos

dgl-framework-building-graph-based-recommender-milvus.png dgl-framework-construccion-recomendador-basado-en-graficos-milvus.png

Deep Graph Library (DGL) es un paquete de Python diseñado para construir modelos de redes neuronales basados en grafos sobre los marcos de aprendizaje profundo existentes (por ejemplo, PyTorch, MXNet, Gluon, etc.). DGL incluye una interfaz backend fácil de usar, lo que facilita su implantación en frameworks basados en tensores y que soportan la generación automática. El algoritmo PinSage mencionado anteriormente está optimizado para su uso con DGL y PyTorch.

how-does-milvus-work.png cómo-funciona-milvus.png

Milvus es una base de datos vectorial de código abierto creada para potenciar la búsqueda de similitudes vectoriales y las aplicaciones de inteligencia artificial (IA). A grandes rasgos, el uso de Milvus para la búsqueda de similitudes funciona de la siguiente manera:

  1. Se utilizan modelos de aprendizaje profundo para convertir datos no estructurados en vectores de características, que se importan a Milvus.
  2. Milvus almacena e indexa los vectores de características.
  3. A petición, Milvus busca y devuelve los vectores más similares a un vector de entrada.

Creación de un sistema de recomendación basado en grafos con Milvus

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

3-building-graph-based-recommender-system.png 3-construir-sistema-de-recomendación-basado-en-grafos.jpg

Construir un sistema de recomendación basado en grafos con Milvus implica los siguientes pasos:

Paso 1: Preprocesar los datos

El preprocesamiento de datos consiste en convertir los datos brutos en un formato más fácilmente comprensible. Este ejemplo utiliza los conjuntos de datos abiertos MovieLens[5] (m1-1m), que contienen 1.000.000 de valoraciones de 4.000 películas aportadas por 6.000 usuarios. Estos datos fueron recopilados por GroupLens e incluyen descripciones de películas, valoraciones de películas y características de los usuarios.

Tenga en cuenta que los conjuntos de datos de MovieLens utilizados en este ejemplo requieren una mínima limpieza u organización de los datos. Sin embargo, si utiliza conjuntos de datos diferentes, su experiencia puede variar.

Para empezar a crear un sistema de recomendación, cree un gráfico bipartito usuario-película con fines de clasificación utilizando los datos históricos 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 con 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 la película (256-d por defecto). A continuación, 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 la película 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)

Obtenga las incrustaciones correspondientes en Milvus basándose en los ID de las películas y, a continuación, utilice Milvus para realizar una búsqueda de similitud con estas incrustaciones. A continuación, identifique la información de la película 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 recomendará ahora las películas más similares a las consultas de búsqueda del usuario. Este es el flujo de trabajo general para crear un sistema de recomendación. Para probar y desplegar rápidamente sistemas de recomendación y otras aplicaciones de IA, pruebe el Milvus bootcamp.

Milvus puede hacer más que sistemas de recomendación

Milvus es una potente herramienta capaz de alimentar una amplia gama de aplicaciones de inteligencia artificial y búsqueda de similitud vectorial. Para saber más sobre el proyecto, consulte los siguientes recursos:

  • Lea nuestro blog.
  • Interactúe con nuestra comunidad de código abierto en Slack.
  • Utilice o contribuya a la base de datos vectorial más popular del mundo en GitHub.

Like the article? Spread the word

Sigue Leyendo