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
- 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 i dati
In Cloud Shell, crea e attiva un ambiente virtuale Python:
(vm)$ virtualenv ncf-env
(vm)$ source ncf-env/bin/activate
Installa il codice di TensorFlow Model Garden:
(vm)$ pip install tf-models-official==2.3.0
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
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
Nella console Google Cloud, vai alla pagina di AI Platform:
Nella sezione Addestramento del modello, seleziona Addestra con un modello algoritmo.
Nell'elenco a discesa, seleziona NCF. Fai clic su Avanti.
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.
Nella pagina Argomenti dell'algoritmo, utilizza i valori degli argomenti nella tabella della sezione precedente per configurare il job di addestramento.
Assegna un nome al job di addestramento e utilizza la macchina
BASIC_TPU
oBASIC_GPU
di testo.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
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.
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.
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.
Seleziona "Esegui il deployment come nuovo modello" e inserisci un nome per il modello. Poi, fai clic su Conferma.
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.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.
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
Nella pagina Dettagli versione per "v1", la versione appena creata, puoi inviare una richiesta di previsione di esempio.
Seleziona il pulsante Testa e Usa.
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] }] }
Fai clic su Test.
Attendi un istante e dovrebbe essere restituito un vettore di previsione.
Passaggi successivi
- Scopri di più sull'utilizzo dell'algoritmo NCF integrato.