Introduzione all'algoritmo NCF integrato

Questo tutorial illustra la formazione Filtro neurale collaborativo (NCF) sul 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 milioni)

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. Tutti i voti sono contenuti nel file "ratings.dat" senza un'intestazione riga e hanno il seguente formato:

UserID::MovieID::Rating::Timestamp

  • Gli User-ID vanno da 1 a 6040.
  • I valori MovieID sono compresi tra 1 e 3952.
  • Le valutazioni vengono espresse su una scala a cinque stelle (solo valutazioni a 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 su 26.744 film di 138493 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 fatte su una scala a 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 variabili di ambiente per l'URI a un bucket Cloud Storage in del tuo progetto Google Cloud e una directory per archiviare i dati di sincronizzare la directory di una VM con un 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 pre-elaborazione richiedono circa 25 minuti e genera 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

Invio di un job di addestramento

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

Argomenti generali per il job di addestramento:

Argomenti del job di addestramento
Argomento Descrizione
job-id ID univoco del job di addestramento. Puoi utilizzarlo per trovare i log relativi allo stato del job di addestramento dopo l'invio.
job-dir Percorso Cloud Storage in cui AI Platform Training salva i file di addestramento dopo aver completato con successo un job di addestramento.
scale-tier Specifica i tipi di macchina 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 archiviati 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 Tasso di apprendimento utilizzato dall'ottimizzatore Adam.
beta1 0,783529 Iperparametro di beta 1 per l'ottimizzatore di Adam.
beta2 0,909003 Iperparametro di beta 2 per l'ottimizzatore di Adam.
epsilon 1,45439e-07 Iperparametro Epsilon per l'ottimizzatore di Adam.
num_factors 64 Dimensioni di incorporamento del modello MF.
hr_threshold 0,635 Valore della metrica di valutazione del RU a cui interrompere l'addestramento.
layers 256,256,128,64 Dimensioni degli strati nascosti per MLP. Formatta come numeri interi separati da virgole.
keras_use_ctl Vero Usa il loop di addestramento Keras personalizzato nell'addestramento del modello.

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

Esegui il job di addestramento

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

    Vai a AI Platform

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

  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 il 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 la macchina BASIC_TPU o BASIC_GPU di testo.

  7. Fai clic su Invia per avviare il job.

Informazioni sulla directory dei job

Dopo aver completato con successo un job di addestramento, AI Platform Training crea un modello addestrato nel bucket Cloud Storage, insieme artefatti. All'interno di JOB_DIR puoi trovare la seguente struttura di directory:

  • model/ (una directory SavedModel di TensorFlow)
    • saved_model.pb
    • asset/
    • variables/
  • summaries/ (logging from training and evaluation)
    • eval/
    • addestramento/
  • 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 modello e Risorse della versione. Un modello AI Platform Prediction è un container per più versioni del tuo modello di machine learning.

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

Scopri di più su come eseguire il deployment di 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 della tua job oppure fai 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 tua versione. Versione richiede qualche minuto. Quando la versione è pronta, viene visualizzato un segno di spunta accanto al nome della versione.

  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

Ricevere previsioni online

Quando richiedi previsioni, devi formattare i dati di input come JSON in 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 il pulsante Testa e Usa.

  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