En este instructivo, se explica cómo entrenar el modelo de filtrado colaborativo neuronal (NCF) en el conjunto de datos de MovieLens. Se abarcan el procesamiento previo de los datos, el entrenamiento mediante el algoritmo integrado NCF, la implementación del modelo en AI Platform y la solicitud de una predicción del modelo implementado.
Conjunto de datos
En el instructivo, se usan los siguientes conjuntos de datos de MovieLens para el entrenamiento y la evaluación de modelos:
- ml-1m (abreviatura de MovieLens 1 million)
- ml-20m (abreviatura de MovieLens 20 million)
ml-1m
El conjunto de datos ml-1m contiene 1,000,209 calificaciones anónimas de aproximadamente 3,706 películas realizadas por 6,040 usuarios que se unieron a MovieLens en 2,000. Todas las calificaciones se encuentran en el archivo “ratings.dat” sin una fila de encabezado y tienen el siguiente formato:
UserID::MovieID::Rating::Timestamp
- El rango de UserIDs varía entre 1 y 6,040.
- El rango del MovieID varía entre 1 y 3,952.
- Las calificaciones se establecen a una escala de 5 estrellas (solo calificaciones completas).
- La marca de tiempo se representa en segundos a partir de la medianoche, hora universal coordinada (UTC), del 1 de enero de 1970.
ml-20m
El conjunto de datos de ml-20m contiene 20,000,263 calificaciones de 26,744 películas por parte de 138,493 usuarios. Todas las calificaciones se incluyen en el archivo “ratings.csv”. Cada línea de este archivo después de la fila de encabezado representa una calificación de una película por parte de un usuario y tiene el siguiente formato:
userId,movieId,rating,timestamp
Las líneas en este archivo se ordenan primero por ID de usuario. Las filas con el mismo ID de usuario se ordenan por ID de película. Las calificaciones se realizan en una escala de 5 estrellas con incrementos de media estrella (0.5 estrellas a 5.0 estrellas). La marca de tiempo se representa en segundos a partir de la medianoche, hora universal coordinada (UTC), del 1 de enero de 1970. Cada usuario tiene, al menos, 20 calificaciones.
Objetivos
- Preparar el conjunto de datos de MovieLens
- Ejecutar el entrenamiento y la evaluación
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Prepara los datos
En Cloud Shell, crea y activa un entorno virtual de Python:
(vm)$ virtualenv ncf-env
(vm)$ source ncf-env/bin/activate
Instala el código de Model Garden de TensorFlow:
(vm)$ pip install tf-models-official==2.3.0
Agrega variables de entorno para el URI a un bucket de Cloud Storage en tu proyecto de Google Cloud y un directorio para almacenar datos en este bucket. Reemplaza BUCKET_NAME por el nombre de tu bucket:
(vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
Genera datos de entrenamiento y evaluación para el conjunto de datos ml-20m en DATA_DIR:
(vm)$ python -m official.recommendation.create_ncf_data \ --dataset ml-20m \ --num_train_epochs 4 \ --meta_data_file_path ${DATA_DIR}/metadata \ --eval_prebatch_size 160000 \ --data_dir ${DATA_DIR}
Esta secuencia de comandos genera y procesa de forma previa el conjunto de datos en Cloud Shell. El procesamiento previo convierte los datos en el formato TFRecord que requiere el modelo. La descarga y el procesamiento previo tardan aproximadamente 25 minutos y generan un resultado similar al siguiente:
I0804 23:03:02.370002 139664166737728 movielens.py:124] Successfully downloaded /tmp/tmpicajrlfc/ml-20m.zip 198702078 bytes I0804 23:04:42.665195 139664166737728 data_preprocessing.py:223] Beginning data preprocessing. I0804 23:04:59.084554 139664166737728 data_preprocessing.py:84] Generating user_map and item_map... I0804 23:05:20.934210 139664166737728 data_preprocessing.py:103] Sorting by user, timestamp... I0804 23:06:39.859857 139664166737728 data_preprocessing.py:194] Writing raw data cache. I0804 23:06:42.375952 139664166737728 data_preprocessing.py:262] Data preprocessing complete. Time: 119.7 sec. %lt;BisectionDataConstructor(Thread-1, initial daemon)> General: Num users: 138493 Num items: 26744 Training: Positive count: 19861770 Batch size: 99000 Batch count per epoch: 1004 Eval: Positive count: 138493 Batch size: 160000 Batch count per epoch: 866 I0804 23:07:14.137242 139664166737728 data_pipeline.py:887] Negative total vector built. Time: 31.8 seconds I0804 23:11:25.013135 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 250.9 seconds I0804 23:15:46.391308 139664166737728 data_pipeline.py:674] Eval construction complete. Time: 261.4 seconds I0804 23:19:54.345858 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 248.0 seconds I0804 23:24:09.182484 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 254.8 seconds I0804 23:28:26.224653 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 257.0 seconds
Envía un trabajo de entrenamiento
Para enviar un trabajo, debes especificar algunos argumentos de entrenamiento básicos y algunos argumentos básicos relacionados con el algoritmo NCF.
Argumentos generales para el trabajo de entrenamiento:
Argumentos del trabajo de entrenamiento | |
---|---|
Argumento | Descripción |
job-id |
ID único para el trabajo de entrenamiento. Puedes usarlo para buscar registros del estado de tu trabajo de entrenamiento una vez que lo hayas enviado. |
job-dir |
Es la ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento tras completar un trabajo de entrenamiento de forma correcta. |
scale-tier |
Especifica los tipos de máquinas para el entrenamiento. Usa BASIC para seleccionar una configuración de una sola máquina.
|
master-image-uri |
El URI de Container Registry usado para especificar qué contenedor de Docker se usará en el trabajo de entrenamiento. Usa el contenedor para el algoritmo integrado NCF definido anteriormente como IMAGE_URI .
|
region |
Especifica la región disponible en la que se ejecuta tu trabajo de entrenamiento. Para este instructivo, puedes usar la región us-central1 .
|
Argumentos específicos del entrenamiento del algoritmo integrado NCF en MovieLens:
Argumentos del algoritmo | ||
---|---|---|
Argumento | Valor que se usará en este instructivo | Descripción |
train_dataset_path |
${DATA_DIR}/training_cycle_*/* | La ruta de acceso de Cloud Storage donde se almacenan los datos de entrenamiento. |
eval_dataset_path |
${DATA_DIR}/eval_data/* | La ruta de acceso de Cloud Storage donde se almacenan los datos de evaluación. |
input_meta_data_path |
${DATA_DIR}/metadata | La ruta de acceso de Cloud Storage donde se almacena el esquema de entrada. |
train_epochs |
3 | Cantidad de ciclos de entrenamiento que se ejecutarán. |
batch_size |
99000 | Tamaño del lote para el entrenamiento. |
eval_batch_size |
160000 | Tamaño del lote para la evaluación. |
learning_rate |
0.00382059 | Tasa de aprendizaje que usa el optimizador Adam. |
beta1 |
0.783529 | Hiperparámetro beta 1 para el optimizador Adam. |
beta2 |
0.909003 | Hiperparámetro beta 2 para el optimizador Adam. |
epsilon |
1.45439e-07 | Hiperparámetro Epsilon para el optimizador Adam |
num_factors |
64 | Tamaño de incorporación del modelo MF. |
hr_threshold |
0.635 | Valor de la métrica de evaluación HR en el que se debe detener el entrenamiento. |
layers |
256,256,128,64 | Tamaños de las capas ocultas para MLP. Aplica el formato como números enteros separados por comas. |
keras_use_ctl |
True | Usa el ciclo de entrenamiento personalizado de Keras en el entrenamiento de modelos |
Para obtener una lista detallada de todas las marcas de algoritmo NCF, consulta la referencia de NCF integrado.
Ejecuta el trabajo de entrenamiento
En la consola de Google Cloud, ve a la página AI Platform:
En la sección Entrenamiento de modelos, selecciona Entrenar con un algoritmo integrado.
En la lista desplegable, selecciona NCF. y, luego, en Siguiente.
Usa el botón Explorar para seleccionar los conjuntos de datos de entrenamiento y evaluación en tu bucket de Cloud Storage y elige el directorio de salida. Haz clic en Siguiente.
En la página Argumentos del algoritmo, usa los valores de los argumentos de la tabla de la sección anterior para configurar el trabajo de entrenamiento.
Asigna un nombre al trabajo de entrenamiento y usa el tipo de máquina
BASIC_TPU
oBASIC_GPU
.Haz clic en Enviar para iniciar tu trabajo.
Conoce tu directorio de trabajos
Después de completar con éxito un trabajo de entrenamiento, AI Platform Training crea un modelo entrenado en el bucket de Cloud Storage, junto con otros artefactos. Encontrarás la siguiente estructura de directorio dentro de tu JOB_DIR
:
- model/ (un directorio de modelo guardado de TensorFlow)
- saved_model.pb
- assets/
- variables/
- summaries/ (registro de entrenamiento y evaluación)
- eval/
- train/
- varios archivos de punto de control (creados y usados durante el entrenamiento)
- checkpoint
- ctl_checkpoint-1.data-00000-of-00002
- …
- ctl_checkpoint-1.index
Confirma que la estructura de directorio en JOB_DIR
coincida con la estructura descrita en la lista anterior:
gcloud storage ls -a $JOB_DIR/*
Implementa el modelo entrenado
AI Platform Prediction organiza los modelos entrenados mediante recursos de modelo y versión. Un modelo de AI Platform Prediction es un contenedor para las versiones del modelo de aprendizaje automático.
Para implementar un modelo, crea un recurso de modelo en AI Platform Prediction, crea una versión de ese modelo y, luego, usa el modelo y la versión para solicitar predicciones en línea.
Obtén más información sobre cómo implementar modelos en AI Platform Prediction.
Console
En la página Trabajos puedes encontrar una lista de todos tus trabajos de entrenamiento. Haz clic en el nombre del trabajo de entrenamiento que acabas de enviar.
En la página Detalles del trabajo puedes ver el progreso general de tu trabajo, o haz clic en Ver registros para obtener una vista más detallada de su progreso.
Cuando el trabajo se haya completado correctamente, aparecerá el botón Implementar modelo en la parte superior. Haz clic en Implementar modelo.
Selecciona “Implementar como modelo nuevo” y, luego, ingresa un nombre de modelo. Luego, haz clic en Confirmar.
En la página Crear versión, ingresa un nombre de versión, como
v1
, y deja todos los otros campos con su configuración predeterminada. Haz clic en Guardar.En la página Detalles del modelo, se muestra el nombre de tu versión. La versión lleva unos minutos en crearse. Cuando la versión esté lista, se mostrará un ícono de marca de verificación junto al nombre de la versión.
Haz clic en el nombre de la versión (
v1
) para navegar a la página Detalles de la versión. En el siguiente paso de este instructivo, enviarás una solicitud de predicción.
Obtén predicciones en línea
Cuando solicitas predicciones, debes dar formato a los datos de entrada como JSON de la manera que el modelo prevé. Los modelos actuales de NCF no realizan el procesamiento previo de las entradas de forma automática.
Console
En la página Detalles de la versión de “v1”, que es la versión que acabas de crear, puedes enviar una solicitud de predicción de muestra.
Selecciona la pestaña Probar y usar.
Copia la siguiente muestra en el campo de entrada:
{ "instances": [{ "duplicate_mask": [0], "item_id": [1], "train_labels": [true], "user_id": [1], "valid_point_mask": [false] }] }
Haga clic en Test.
Espera un momento. Se debería mostrar un vector de predicción.
¿Qué sigue?
- Obtén más información sobre el uso del algoritmo integrado NCF.