¡Tenemos una nueva versión de Recomendadores 1.2.0!
Tantos cambios desde nuestro último lanzamiento. Tenemos pruebas completas en Python 3.8 a 3.11 (alrededor de 1800 pruebas), rendimiento mejorado en muchos algoritmos, cuadernos revisados y muchas más mejoras.
El objetivo de Recommenders es ayudar a investigadores, desarrolladores y entusiastas a crear prototipos, experimentar y llevar a producción una gama de sistemas de recomendación clásicos y de última generación.
Recomendadores es un proyecto de la Fundación Linux de IA y Datos.
Este repositorio contiene ejemplos y mejores prácticas para crear sistemas de recomendación, proporcionados como cuadernos de Jupyter. Los ejemplos detallan nuestros aprendizajes en cinco tareas clave:
Los recomendadores proporcionan varias utilidades para respaldar tareas comunes, como cargar conjuntos de datos en el formato esperado por diferentes algoritmos, evaluar los resultados del modelo y dividir datos de entrenamiento/prueba. Se incluyen implementaciones de varios algoritmos de última generación para autoestudio y personalización en sus propias aplicaciones. Consulte la documentación de recomendadores.
Para obtener una descripción más detallada del repositorio, consulte los documentos en la página wiki.
Para conocer algunos de los escenarios prácticos en los que se han aplicado sistemas de recomendación, consulte escenarios.
Recomendamos conda para la gestión del entorno y VS Code para el desarrollo. Para instalar el paquete de recomendación y ejecutar un cuaderno de ejemplo en Linux/WSL:
# 1. Install gcc if it is not installed already. On Ubuntu, this could done by using the command
# sudo apt install gcc
# 2. Create and activate a new conda environment
conda create -n < environment_name > python=3.9
conda activate < environment_name >
# 3. Install the core recommenders package. It can run all the CPU notebooks.
pip install recommenders
# 4. create a Jupyter kernel
python -m ipykernel install --user --name < environment_name > --display-name < kernel_name >
# 5. Clone this repo within VSCode or using command line:
git clone https://github.com/recommenders-team/recommenders.git
# 6. Within VSCode:
# a. Open a notebook, e.g., examples/00_quick_start/sar_movielens.ipynb;
# b. Select Jupyter kernel <kernel_name>;
# c. Run the notebook.
Para obtener más información sobre la configuración en otras plataformas (p. ej., Windows y macOS) y diferentes configuraciones (p. ej., GPU, Spark y funciones experimentales), consulte la Guía de configuración.
Además del paquete principal, también se proporcionan varios extras, que incluyen:
[gpu]
: Necesario para ejecutar modelos de GPU.[spark]
: Necesario para ejecutar modelos Spark.[dev]
: Necesario para el desarrollo del repositorio.[all]
: [gpu]
| [spark]
| [dev]
[experimental]
: Modelos que no se prueban exhaustivamente y/o pueden requerir pasos adicionales en la instalación. La siguiente tabla enumera los algoritmos de recomendación disponibles actualmente en el repositorio. Los cuadernos están vinculados en la columna Ejemplo como Inicio rápido, que muestra un ejemplo del algoritmo fácil de ejecutar, o como Análisis profundo, que explica en detalle las matemáticas y la implementación del algoritmo.
Algoritmo | Tipo | Descripción | Ejemplo |
---|---|---|---|
Mínimos cuadrados alternos (ALS) | Filtrado colaborativo | Algoritmo de factorización matricial para retroalimentación explícita o implícita en grandes conjuntos de datos, optimizado para escalabilidad y capacidad informática distribuida. Funciona en el entorno PySpark. | Inicio rápido/inmersión profunda |
Descomposición asincrónica atenta de valores singulares (A2SVD) * | Filtrado colaborativo | Algoritmo de base secuencial que tiene como objetivo capturar las preferencias del usuario a largo y corto plazo utilizando un mecanismo de atención. Funciona en el entorno CPU/GPU. | Inicio rápido |
Clasificación personalizada Cornac/Bayesiana (BPR) | Filtrado colaborativo | Algoritmo de factorización matricial para predecir la clasificación de elementos con retroalimentación implícita. Funciona en el entorno de la CPU. | inmersión profunda |
Cornac/Autocodificador variacional bilateral (BiVAE) | Filtrado colaborativo | Modelo generativo para datos diádicos (p. ej., interacciones usuario-elemento). Funciona en el entorno CPU/GPU. | inmersión profunda |
Recomendación de incrustación de secuencia convolucional (Caser) | Filtrado colaborativo | Algoritmo basado en convoluciones que tiene como objetivo capturar tanto las preferencias generales del usuario como patrones secuenciales. Funciona en el entorno CPU/GPU. | Inicio rápido |
Red profunda de conocimiento (DKN) * | Filtrado basado en contenido | Algoritmo de aprendizaje profundo que incorpora un gráfico de conocimiento e incrustaciones de artículos para proporcionar noticias o recomendaciones de artículos. Funciona en el entorno CPU/GPU. | Inicio rápido/inmersión profunda |
Máquina de factorización extrema profunda (xDeepFM) * | Filtrado colaborativo | Algoritmo basado en aprendizaje profundo para comentarios implícitos y explícitos con características de usuario/elemento. Funciona en el entorno CPU/GPU. | Inicio rápido |
Sesgo de puntos de incrustación FastAI (FAST) | Filtrado colaborativo | Algoritmo de propósito general con incrustaciones y sesgos para usuarios y elementos. Funciona en el entorno CPU/GPU. | Inicio rápido |
LightFM/máquina de factorización | Filtrado colaborativo | Algoritmo de máquina de factorización para retroalimentaciones implícitas y explícitas. Funciona en el entorno de la CPU. | Inicio rápido |
LightGBM/Árbol de refuerzo de gradiente * | Filtrado basado en contenido | Algoritmo de árbol de aumento de gradiente para un entrenamiento rápido y un uso reducido de memoria en problemas basados en contenido. Funciona en entornos CPU/GPU/PySpark. | Inicio rápido en CPU/inmersión profunda en PySpark |
LuzGCN | Filtrado colaborativo | Algoritmo de aprendizaje profundo que simplifica el diseño de GCN para predecir retroalimentación implícita. Funciona en el entorno CPU/GPU. | inmersión profunda |
GeoIMC * | Filtrado colaborativo | Algoritmo de finalización de matrices que tiene en cuenta las características del usuario y del elemento mediante la optimización del gradiente conjugado de Riemann y sigue un enfoque geométrico. Funciona en el entorno de la CPU. | Inicio rápido |
gru | Filtrado colaborativo | Algoritmo de base secuencial que tiene como objetivo capturar las preferencias de los usuarios a largo y corto plazo utilizando redes neuronales recurrentes. Funciona en el entorno CPU/GPU. | Inicio rápido |
VAE multinomial | Filtrado colaborativo | Modelo generativo para predecir interacciones usuario/elemento. Funciona en el entorno CPU/GPU. | inmersión profunda |
Recomendación neuronal con representaciones de usuario a corto y largo plazo (LSTUR) * | Filtrado basado en contenido | Algoritmo de recomendación neuronal para recomendar artículos de noticias con modelado de intereses de usuario a corto y largo plazo. Funciona en el entorno CPU/GPU. | Inicio rápido |
Recomendación neuronal con aprendizaje atento de múltiples vistas (NAML) * | Filtrado basado en contenido | Algoritmo de recomendación neuronal para recomendar artículos de noticias con aprendizaje atento de múltiples vistas. Funciona en el entorno CPU/GPU. | Inicio rápido |
Filtrado neuronal colaborativo (NCF) | Filtrado colaborativo | Algoritmo de aprendizaje profundo con rendimiento mejorado para comentarios implícitos de usuario/elemento. Funciona en el entorno CPU/GPU. | Inicio rápido/inmersión profunda |
Recomendación Neural con Atención Personalizada (NPA) * | Filtrado basado en contenido | Algoritmo de recomendación neuronal para recomendar artículos de noticias con red de atención personalizada. Funciona en el entorno CPU/GPU. | Inicio rápido |
Recomendación neuronal con autoatención de múltiples cabezales (NRMS) * | Filtrado basado en contenido | Algoritmo de recomendación neuronal para recomendar artículos de noticias con autoatención de múltiples cabezas. Funciona en el entorno CPU/GPU. | Inicio rápido |
Recomendación del siguiente elemento (NextItNet) | Filtrado colaborativo | Algoritmo basado en convoluciones dilatadas y red residual que tiene como objetivo capturar patrones secuenciales. Considera tanto las interacciones como las características del usuario/elemento. Funciona en el entorno CPU/GPU. | Inicio rápido |
Máquinas Boltzmann restringidas (RBM) | Filtrado colaborativo | Algoritmo basado en redes neuronales para aprender la distribución de probabilidad subyacente para comentarios explícitos o implícitos de usuarios/elementos. Funciona en el entorno CPU/GPU. | Inicio rápido/inmersión profunda |
Finalización de matriz riemanniana de rango bajo (RLRMC) * | Filtrado colaborativo | Algoritmo de factorización matricial que utiliza la optimización de gradientes conjugados de Riemann con un pequeño consumo de memoria para predecir las interacciones usuario/elemento. Funciona en el entorno de la CPU. | Inicio rápido |
Algoritmo simple de recomendación (SAR) * | Filtrado colaborativo | Algoritmo basado en similitudes para comentarios implícitos de usuarios/elementos. Funciona en el entorno de la CPU. | Inicio rápido/inmersión profunda |
Recomendación secuencial autoatenta (SASRec) | Filtrado colaborativo | Algoritmo basado en transformador para recomendación secuencial. Funciona en el entorno CPU/GPU. | Inicio rápido |
Recomendador integrado de preferencia a corto y largo plazo (SLi-Rec) * | Filtrado colaborativo | Algoritmo de base secuencial que tiene como objetivo capturar las preferencias del usuario a largo y corto plazo utilizando un mecanismo de atención, un controlador consciente del tiempo y un controlador consciente del contenido. Funciona en el entorno CPU/GPU. | Inicio rápido |
Modelado de usuario secuencial (SUM) con reconocimiento de intereses múltiples * | Filtrado colaborativo | Un modelo de usuario secuencial basado en red de memoria mejorada que tiene como objetivo capturar los múltiples intereses de los usuarios. Funciona en el entorno CPU/GPU. | Inicio rápido |
Recomendación secuencial mediante transformador personalizado (SSEPT) | Filtrado colaborativo | Algoritmo basado en transformador para recomendación secuencial con incrustación de usuarios. Funciona en el entorno CPU/GPU. | Inicio rápido |
VAE estándar | Filtrado colaborativo | Modelo generativo para predecir interacciones usuario/elemento. Funciona en el entorno CPU/GPU. | inmersión profunda |
Descomposición de valor sorpresa/singular (SVD) | Filtrado colaborativo | Algoritmo de factorización matricial para predecir comentarios de calificación explícitos en conjuntos de datos pequeños. Funciona en el entorno CPU/GPU. | inmersión profunda |
Frecuencia de plazo: frecuencia de documento inversa (TF-IDF) | Filtrado basado en contenido | Algoritmo simple basado en similitudes para recomendaciones basadas en contenido con conjuntos de datos de texto. Funciona en el entorno de la CPU. | Inicio rápido |
Wabbit Vopal (VW) * | Filtrado basado en contenido | Algoritmos rápidos de aprendizaje en línea, ideales para escenarios donde las características/contexto del usuario cambian constantemente. Utiliza la CPU para el aprendizaje en línea. | inmersión profunda |
Amplio y profundo | Filtrado colaborativo | Algoritmo de aprendizaje profundo que puede memorizar interacciones de funciones y generalizar funciones del usuario. Funciona en el entorno CPU/GPU. | Inicio rápido |
xLearn/máquina de factorización (FM) y FM con reconocimiento de campo (FFM) | Filtrado colaborativo | Algoritmo rápido y eficiente en memoria para predecir etiquetas con características de usuario/artículo. Funciona en el entorno CPU/GPU. | inmersión profunda |
NOTA : * indica algoritmos inventados/aportados por Microsoft.
Los algoritmos y utilidades independientes o en incubación son candidatos para la carpeta contrib. Esto albergará contribuciones que tal vez no encajen fácilmente en el repositorio principal o que necesiten tiempo para refactorizar o madurar el código y agregar las pruebas necesarias.
Algoritmo | Tipo | Descripción | Ejemplo |
---|---|---|---|
SARplus * | Filtrado colaborativo | Implementación optimizada de SAR para Spark | Inicio rápido |
Proporcionamos un cuaderno de referencia para ilustrar cómo se pueden evaluar y comparar diferentes algoritmos. En este cuaderno, el conjunto de datos de MovieLens se divide en conjuntos de entrenamiento/prueba en una proporción de 75/25 mediante una división estratificada. Se entrena un modelo de recomendación utilizando cada uno de los algoritmos de filtrado colaborativo siguientes. Utilizamos valores de parámetros empíricos informados en la literatura aquí. Para las métricas de clasificación utilizamos k=10
(los 10 elementos más recomendados). Realizamos la comparación en una DSVM Azure NC6s_v2 estándar (6 vCPU, 112 GB de memoria y 1 GPU P100). Spark ALS se ejecuta en modo local independiente. En esta tabla mostramos los resultados en Movielens 100k, ejecutando los algoritmos durante 15 épocas.
algo | MAPA | nDCG@k | Precisión@k | recordar@k | RMSE | MAE | R 2 | Varianza explicada |
---|---|---|---|---|---|---|---|---|
ELA | 0.004732 | 0.044239 | 0.048462 | 0.017796 | 0.965038 | 0.753001 | 0.255647 | 0.251648 |
BiVAE | 0.146126 | 0,475077 | 0.411771 | 0.219145 | N / A | N / A | N / A | N / A |
BPR | 0,132478 | 0,441997 | 0.388229 | 0.212522 | N / A | N / A | N / A | N / A |
IA rápida | 0.025503 | 0.147866 | 0.130329 | 0.053824 | 0.943084 | 0,744337 | 0.285308 | 0.287671 |
LuzGCN | 0.088526 | 0.419846 | 0.379626 | 0,144336 | N / A | N / A | N / A | N / A |
FNC | 0.107720 | 0.396118 | 0,347296 | 0.180775 | N / A | N / A | N / A | N / A |
RAE | 0.110591 | 0,382461 | 0.330753 | 0.176385 | 1.253805 | 1.048484 | -0.569363 | 0.030474 |
SVD | 0.012873 | 0.095930 | 0.091198 | 0.032783 | 0.938681 | 0.742690 | 0.291967 | 0.291971 |
Este proyecto agradece contribuciones y sugerencias. Antes de contribuir, consulte nuestras pautas de contribución.
Este proyecto se adhiere a este Código de conducta para fomentar una comunidad acogedora e inspiradora para todos.
Estas pruebas son compilaciones nocturnas, que calculan las pruebas asincrónicas. main
es nuestra rama principal y staging
es nuestra rama de desarrollo. Usamos pytest para probar las utilidades de Python en los recomendadores y el ejecutor del cuaderno de recomendaciones para los cuadernos.
Para obtener más información sobre los canales de prueba, consulte la documentación de prueba.
Las pruebas de compilación nocturnas se ejecutan diariamente en AzureML.
Tipo de construcción | Rama | Estado | Rama | Estado | |
---|---|---|---|---|---|
Procesador Linux | principal | ![]() | puesta en escena | ![]() | |
GPU de Linux | principal | ![]() | puesta en escena | ![]() | |
Chispa de Linux | principal | ![]() | puesta en escena | ![]() |