Comienza a usar el algoritmo integrado NCF

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

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de AI Platform Training & Prediction.

    Habilita la API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de AI Platform Training & Prediction.

    Habilita la API

  8. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

Prepara los datos

  1. En Cloud Shell, crea y activa un entorno virtual de Python:

    (vm)$  virtualenv ncf-env
    
    (vm)$  source ncf-env/bin/activate
    
  2. Instala el código de Model Garden de TensorFlow:

    (vm)$  pip install tf-models-official==2.3.0
    
  3. 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
    
  4. 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 Ruta de acceso de Cloud Storage en la que AI Platform Training guarda los archivos de entrenamiento después de 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

  1. En la consola de Google Cloud, ve a la página AI Platform:

    Ir a AI Platform

  2. En la sección Entrenamiento de modelos, selecciona Entrenar con un algoritmo integrado.

  3. En la lista desplegable, selecciona NCF. y, luego, en Siguiente.

  4. 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.

  5. 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.

  6. Asigna un nombre al trabajo de entrenamiento y usa el tipo de máquina BASIC_TPU o BASIC_GPU.

  7. 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:

gsutil ls -a $JOB_DIR/*

Implementa el modelo entrenado

AI Platform Prediction organiza los modelos entrenados mediante recursos de model y model. 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.

Consola

  1. 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.

  2. 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.

  3. Cuando el trabajo se haya completado correctamente, aparecerá el botón Implementar modelo en la parte superior. Haz clic en Implementar modelo.

  4. Selecciona “Implementar como modelo nuevo” y, luego, ingresa un nombre de modelo. Luego, haz clic en Confirmar.

  5. 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.

  6. 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.

  7. 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.

Consola

  1. 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.

  2. 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]
       }]
      }
    
  3. Haga clic en Test.

    Espera un momento. Se debería mostrar un vector de predicción.

¿Qué sigue?