Introduzione all'algoritmo NCF integrato

Questo tutorial illustra la procedura di addestramento del modello di filtro collaborativo neurale (NCF) nel set di dati MovieLens. Copre il pretrattamento dei dati, l'addestramento con l'algoritmo NCF integrato, il deployment del modello in AI Platform e la richiesta di una previsione dal modello di cui è stato eseguito il deployment.

Set di dati

Il tutorial utilizza i seguenti set di dati MovieLens per l'addestramento e la valutazione del modello:

  • ml-1m (abbreviazione di MovieLens 1 million)
  • ml-20m (abbreviazione di MovieLens 20 million)

ml-1m

Il set di dati ml-1m contiene 1.000.209 valutazioni anonime di circa 3.706 film effettuate da 6.040 utenti che si sono iscritti a MovieLens nel 2000. Tutte le valutazioni sono contenute nel file "ratings.dat" senza una riga di intestazione e sono nel seguente formato:

UserID::MovieID::Rating::Timestamp

  • Gli User-ID vanno da 1 a 6040.
  • MovieID va da 1 a 3952.
  • Le valutazioni vengono effettuate su una scala da 1 a 5 stelle (solo stelle intere).
  • Il timestamp è rappresentato in secondi dalla mezzanotte del 1° gennaio 1970 nel fuso orario UTC (Coordinated Universal Time).

ml-20m

Il set di dati ml-20m contiene 20.000.263 valutazioni di 26.744 film da parte di 138.493 utenti. Tutte le valutazioni sono contenute nel file "ratings.csv". Ogni riga di questo file dopo la riga di intestazione rappresenta una classificazione di un film da parte di un utente e ha il seguente formato:

userId,movieId,rating,timestamp

Le righe all'interno di questo file sono ordinate in primo luogo per userId. Le righe con lo stesso userId sono ordinate in base a movieId. Le valutazioni vengono assegnate su una scala di 5 stelle, con incrementi di mezza stella (da 0,5 a 5 stelle). Il timestamp è rappresentato in secondi dalla mezzanotte UTC (Tempo coordinato universale) del 1° gennaio 1970. Ogni utente ha almeno 20 valutazioni.

Obiettivi

  • Preparare il set di dati MovieLens
  • Esegui l'addestramento e la valutazione

Prima di iniziare

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the AI Platform Training & Prediction API.

    Enable the API

  8. In the Google Cloud console, activate Cloud Shell.

    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 i dati

  1. In Cloud Shell, crea e attiva un ambiente virtuale Python:

    (vm)$  virtualenv ncf-env
    (vm)$  source ncf-env/bin/activate
  2. Installa il codice di TensorFlow Model Garden:

    (vm)$  pip install tf-models-official==2.3.0
  3. Aggiungi le variabili di ambiente per l'URI a un bucket Cloud Storage nel Google Cloud tuo progetto e una directory per archiviare i dati all'interno di questo bucket. Sostituisci BUCKET_NAME con il nome del bucket.

    (vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
  4. Genera i dati di addestramento e valutazione per il set di dati ml-20m in 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}

Questo script genera e pre-elabora il set di dati in Cloud Shell. La pre-elaborazione converte i dati nel formato TFRecord richiesto dal modello. Il download e la preelaborazione richiedono circa 25 minuti e generano un output simile al seguente:

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

Invia un job di addestramento

Per inviare un job, devi specificare alcuni argomenti di addestramento di base e alcuni argomenti di base relativi all'algoritmo NCF.

Argomenti generali per il job di addestramento:

Argomenti dei job di addestramento
Argomento Descrizione
job-id ID univoco per il tuo job di addestramento. Puoi utilizzarlo per trovare i log relativi allo stato del job di addestramento dopo averlo inviato.
job-dir Percorso di Cloud Storage in cui AI Platform Training salva i file di addestramento dopo aver completato un job di addestramento riuscito.
scale-tier Specifica i tipi di macchine per l'addestramento. Utilizza BASIC per selezionare una configurazione di una sola macchina.
master-image-uri URI di Container Registry utilizzato per specificare il container Docker da usare per il job di addestramento. Utilizza il contenitore per l'algoritmo NCF integrato definito in precedenza come IMAGE_URI.
region Specifica la regione disponibile in cui eseguire il job di addestramento. Per questo tutorial, puoi utilizzare la regione us-central1.

Argomenti specifici per l'addestramento dell'algoritmo NCF integrato su MovieLens:

Argomenti degli algoritmi
Argomento Valore da utilizzare per questo tutorial Descrizione
train_dataset_path ${DATA_DIR}/training_cycle_*/* Percorso di Cloud Storage in cui sono memorizzati i dati di addestramento.
eval_dataset_path ${DATA_DIR}/eval_data/* Percorso di Cloud Storage in cui sono memorizzati i dati di valutazione.
input_meta_data_path ${DATA_DIR}/metadata Percorso di Cloud Storage in cui è memorizzato lo schema di input.
train_epochs 3 Numero di epoche di addestramento da eseguire.
batch_size 99000 Dimensione del batch per l'addestramento.
eval_batch_size 160000 Dimensioni del batch per la valutazione.
learning_rate 0,00382059 Il tasso di apprendimento utilizzato dall'ottimizzatore Adam.
beta1 0,783529 Iperparametro beta 1 per l'ottimizzatore Adam.
beta2 0,909003 Iperparametro beta 2 per l'ottimizzatore Adam.
epsilon 1,45439e-07 Iperparametro epsilon per l'ottimizzatore Adam.
num_factors 64 Dimensioni dell'embedding del modello MF.
hr_threshold 0,635 Valore della metrica di valutazione HR a cui deve interrompersi l'addestramento.
layers 256,256,128,64 Dimensioni degli strati nascosti per MLP. Formatta come numeri interi separati da virgole.
keras_use_ctl Vero Utilizzare il loop di addestramento Keras personalizzato nell'addestramento del modello.

Per un elenco dettagliato di tutti gli altri flag dell'algoritmo NCF, consulta il riferimento all'NCF integrato.

Esegui il job di addestramento

  1. Nella console Google Cloud, vai alla pagina Piattaforma AI:

    Vai ad AI Platform

  2. Nella sezione Addestramento del modello, seleziona Addestramento con un algoritmo integrato.

  3. Nell'elenco a discesa, seleziona NCF. Fai clic su Avanti.

  4. Utilizza il pulsante Sfoglia per selezionare i set di dati di addestramento e valutazione nel tuo bucket Cloud Storage e scegli la directory di output. Fai clic su Avanti.

  5. Nella pagina Argomenti dell'algoritmo, utilizza i valori degli argomenti nella tabella della sezione precedente per configurare il job di addestramento.

  6. Assegna un nome al job di addestramento e utilizza il tipo di macchina BASIC_TPU o BASIC_GPU.

  7. Fai clic su Invia per avviare il job.

Informazioni sulla directory dei job

Al termine di un job di addestramento, AI Platform Training crea un modello addestrato nel tuo bucket Cloud Storage, insieme ad alcuni altri gli artefatti. All'interno di JOB_DIR puoi trovare la seguente struttura di directory:

  • model/ (una directory SavedModel di TensorFlow)
    • saved_model.pb
    • assets/
    • variables/
  • summaries/ (logging from training and evaluation)
    • eval/
    • train/
  • vari file checkpoint (creati e utilizzati durante l'addestramento)
    • posto di blocco
    • ctl_checkpoint-1.data-00000-of-00002
    • ctl_checkpoint-1.index

Verifica che la struttura della directory in JOB_DIR corrisponda a quella descritta nell'elenco precedente:

gcloud storage ls -a $JOB_DIR/*

Esegui il deployment del modello addestrato

AI Platform Prediction organizza i modelli addestrati utilizzando le risorse model e version. Un modello di previsione di AI Platform è un contenitore per le versioni del tuo modello di machine learning.

Per eseguire il deployment di un modello, crea una risorsa modello in AI Platform Prediction, crea una versione del modello e poi utilizza il modello e la versione per richiedere le previsioni online.

Scopri di più su come eseguire il deployment dei modelli in AI Platform Prediction.

Console

  1. Nella pagina Job puoi trovare un elenco di tutti i tuoi job di addestramento. Fai clic sul nome del job di addestramento che hai appena inviato.

  2. Nella pagina Dettagli job, puoi visualizzare l'avanzamento generale del job o fare clic su Visualizza log per una visualizzazione più dettagliata dell'avanzamento.

  3. Se il job ha esito positivo, nella parte superiore viene visualizzato il pulsante Esegui il deployment del modello. Fai clic su Esegui il deployment del modello.

  4. Seleziona "Esegui il deployment come nuovo modello" e inserisci un nome per il modello. Poi, fai clic su Conferma.

  5. Nella pagina Crea versione, inserisci un nome per la versione, ad esempio v1, e lascia invariate le impostazioni predefinite di tutti gli altri campi. Fai clic su Salva.

  6. Nella pagina Dettagli modello viene visualizzato il nome della versione. La creazione della versione richiede alcuni minuti. Quando la versione è pronta, accanto al nome viene visualizzata un'icona con un segno di spunta.

  7. Fai clic sul nome della versione (v1) per passare alla pagina Dettagli della versione. Nel passaggio successivo di questo tutorial, invia una richiesta di previsione

Ottenere previsioni online

Quando richiedi le previsioni, devi formattare i dati di input come JSON nel modo previsto dal modello. I modelli NCF attuali non pre-elaborano automaticamente gli input.

Console

  1. Nella pagina Dettagli versione per "v1", la versione appena creata, puoi inviare una richiesta di previsione di esempio.

    Seleziona la scheda Testa e utilizza.

  2. Copia il seguente esempio nel campo di immissione:

     {
       "instances": [{
         "duplicate_mask": [0],
         "item_id": [1],
         "train_labels": [true],
         "user_id": [1],
         "valid_point_mask": [false]
       }]
      }
    
  3. Fai clic su Test.

    Attendi un istante e dovrebbe essere restituito un vettore di previsione.

Passaggi successivi