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
- 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 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
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
Nella console Google Cloud, vai alla pagina Piattaforma AI:
Nella sezione Addestramento del modello, seleziona Addestramento con un algoritmo integrato.
Nell'elenco a discesa, seleziona NCF. Fai clic su Avanti.
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.
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 il tipo di macchina
BASIC_TPU
oBASIC_GPU
.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
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 del job o fare 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 versione. La creazione della versione richiede alcuni minuti. Quando la versione è pronta, accanto al nome viene visualizzata un'icona con un segno di spunta.
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
Nella pagina Dettagli versione per "v1", la versione appena creata, puoi inviare una richiesta di previsione di esempio.
Seleziona la scheda Testa e utilizza.
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.