In dieser Anleitung erfahren Sie, wie Sie Neuronale kollaborative Filterung MovieLens-Dataset verwenden. Es werden die Vorverarbeitung der Daten, das Training mit dem integrierten NCF-Algorithmus, das Bereitstellen des Modells in AI Platform und das Anfordern einer Vorhersage vom bereitgestellten Modell behandelt.
Dataset
In dieser Anleitung werden die folgenden MovieLens-Datasets für das Modelltraining und die Bewertung verwendet:
- ml-1m (kurz für MovieLens: 1 Million)
- ml-20m (kurz für MovieLens 20 Millionen)
ml-1m
Das ml-1m-Dataset enthält 1.000.209 anonyme Bewertungen von ungefähr 3.706 Filmen von 6.40 Nutzern, die im Jahr 2000 MovieLens beigetreten sind. Alle Bewertungen sind in der Datei "ratings.dat" ohne Kopfzeile enthalten und haben folgendes Format:
UserID::MovieID::Rating::Timestamp
- Nutzer-IDs zwischen 1 und 6040.
- Die MovieIDs reichen von 1 bis 3952.
- Die Bewertungen werden auf einer Skala von 5 Sternen bewertet (nur Bewertungen mit ganzen Sternen).
- Der Zeitstempel wird in Sekunden seit Mitternacht der koordinierten Weltzeit (UTC) vom 1. Januar 1970 dargestellt.
ml-20m
Das ml-20m-Dataset enthält 20.000.263 Bewertungen von 26.744 Filmen von 138493 Nutzern. Alle Bewertungen sind in der Datei "ratings.csv" enthalten. Jede Zeile dieser Datei nach der Kopfzeile stellt eine Bewertung eines Films von einem Nutzer im folgenden Format dar:
userId,movieId,rating,timestamp
Die Zeilen in dieser Datei werden zuerst nach userId sortiert. Zeilen mit derselben userId werden nach movieId sortiert. Die Bewertungen werden auf einer 5-Sterne-Skala mit 0,5 bis 5,0 Sternen dargestellt. Der Zeitstempel wird in Sekunden seit Mitternacht der koordinierten Weltzeit (UTC) vom 1. Januar 1970 dargestellt. Jeder Nutzer hat mindestens 20 Bewertungen.
Ziele
- MovieLens-Dataset vorbereiten
- Training und Bewertung
Hinweis
- 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.
Daten vorbereiten
Erstellen und aktivieren Sie in Cloud Shell eine virtuelle Python-Umgebung:
(vm)$ virtualenv ncf-env
(vm)$ source ncf-env/bin/activate
Installieren Sie den TensorFlow Model Garden-Code:
(vm)$ pip install tf-models-official==2.3.0
Fügen Sie Umgebungsvariablen für den URI zu einem Cloud Storage-Bucket in Ihrem Google Cloud-Projekt und einem Verzeichnis zum Speichern von Daten in diesem Bucket hinzu. Ersetzen Sie BUCKET_NAME durch Ihren Bucket-Namen.
(vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
Generieren Sie Trainings- und Evaluationsdaten für das ml-20m-Dataset 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}
Dieses Skript generiert und verarbeitet das Dataset in Cloud Shell. Bei der Vorverarbeitung werden die Daten für das Modell in das TFRecord-Format konvertiert. Der Download und die Vorverarbeitung dauern ungefähr 25 Minuten und generieren eine Ausgabe ähnlich der folgenden:
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
Trainingsjob senden
Zum Senden eines Jobs müssen Sie sowohl für das Training als auch den NCF-Algorithmus einige grundlegende Argumente angeben.
Allgemeine Argumente für den Trainingsjob:
Argumente für Trainingsjobs | |
---|---|
Argument | Beschreibung |
job-id |
Eindeutige ID für den Trainingsjob; anhand dieser ID können Sie nach dem Senden des Trainingsjobs nach Logs zu seinem Status suchen. |
job-dir |
Cloud Storage-Pfad, in dem AI Platform Training nach Abschluss eines erfolgreichen Trainingsjobs die Trainingsdateien speichert. |
scale-tier |
Gibt Maschinentypen für das Training an. Verwenden Sie BASIC , um eine Konfiguration mit nur einer Maschine auszuwählen.
|
master-image-uri |
Container Registry-URI zur Angabe des Docker-Containers, der für den Trainingsjob genutzt werden soll. Verwenden Sie den Container für den integrierten NCF-Algorithmus, der zuvor als IMAGE_URI definiert wurde.
|
region |
Geben Sie die verfügbare Region an, in der Ihr Trainingsjob ausgeführt werden soll. In dieser Anleitung können Sie die Region us-central1 verwenden.
|
Spezifische Argumente für das integrierte NCF-Algorithmustraining bei MovieLens:
Algorithmusargumente | ||
---|---|---|
Argument | Wert, der für diese Anleitung verwendet werden soll | Beschreibung |
train_dataset_path |
${DATA_DIR}/training_cycle_*/* | Cloud Storage-Pfad zu den gespeicherten Trainingsdaten. |
eval_dataset_path |
${DATA_DIR}/eval_data/* | Cloud Storage-Pfad zu den gespeicherten Bewertungsdaten. |
input_meta_data_path |
${DATA_DIR}/metadata | Cloud Storage-Pfad zum gespeicherten Eingabeschema. |
train_epochs |
3 | Anzahl der auszuführenden Trainingsphasen. |
batch_size |
99000 | Batchgröße für das Training. |
eval_batch_size |
160000 | Batchgröße für Bewertung. |
learning_rate |
0,00382059 | Lernrate, die vom Adam-Optimierungstool verwendet wird. |
beta1 |
0,783529 | Beta 1-Hyperparameter für das Adam-Optimierungstool. |
beta2 |
0,909003 | Beta 2-Hyperparameter für das Adam-Optimierungstool. |
epsilon |
1.45439e-07 | Epsilon-Hyperparameter für das Adam-Optimierungstool. |
num_factors |
64 | Einbettungsgröße des MF-Modells. |
hr_threshold |
0,635 | HR-Bewertungsmesswert, an dem das Training beendet werden soll. |
layers |
256.256.128.64 | Größen der ausgeblendeten Ebenen für MLP. Als kommagetrennte Ganzzahl formatieren. |
keras_use_ctl |
Wahr | Benutzerdefinierte Keras-Trainingsschleife beim Modelltraining verwenden. |
Eine ausführliche Liste aller anderen Flags für den NCF-Algorithmus finden Sie in der Referenz zum integrierten NCF.
Trainingsjob ausführen
Rufen Sie in der Google Cloud Console die Seite AI Platform auf:
Wählen Sie unter Modelltraining die Option Mit einem integrierten Algorithmus trainieren aus.
Wählen Sie in der Drop-down-Liste NCF aus. Klicken Sie auf Weiter.
Klicken Sie auf Durchsuchen, um die Trainings- und Bewertungs-Datasets in Ihrem Cloud Storage-Bucket zu markieren und das Ausgabeverzeichnis auszuwählen. Klicken Sie auf Weiter.
Verwenden Sie auf der Seite Algorithmusargumente die Argumentwerte in der Tabelle im vorherigen Abschnitt, um den Trainingsjob zu konfigurieren.
Geben Sie einen Namen für den Trainingsjob ein und verwenden Sie den Maschinentyp
BASIC_TPU
oderBASIC_GPU
.Klicken Sie auf Senden, um den Job zu starten.
Struktur des Jobverzeichnisses
Nach erfolgreicher Ausführung eines Trainingsjobs erstellt AI Platform Training ein trainiertes Modell sowie einige andere Artefakte in Ihrem Cloud Storage-Bucket. Ihr JOB_DIR
hat folgende Verzeichnisstruktur:
- model/ (TensorFlow SavedModel-Verzeichnis)
- saved_model.pb
- assets/
- variables/
- summaries/ (Logging aus Training und Bewertung)
- eval/
- train/
- Verschiedene Prüfpunktdateien (beim Training erstellt und verwendet)
- checkpoint
- ctl_checkpoint-1.data-00000-of-00002
- …
- ctl_checkpoint-1.index
Prüfen Sie, ob die Verzeichnisstruktur in Ihrem JOB_DIR
mit der in der vorherigen Liste beschriebenen Struktur übereinstimmt:
gcloud storage ls -a $JOB_DIR/*
Trainiertes Modell bereitstellen
AI Platform Prediction verwaltet Ihre trainierten Modelle mithilfe von Modell- und Versionsressourcen. Ein AI Platform Prediction-Modell ist ein Container für die Versionen Ihres Modells für maschinelles Lernen.
Zum Bereitstellen eines Modells erstellen Sie eine Modellressource in AI Platform Prediction und erstellen eine Version dieses Modells. Mit dem Modell und der Version fordern Sie anschließend Onlinevorhersagen an.
Weitere Informationen dazu, wie Sie Modelle in AI Platform Prediction bereitstellen
Console
Auf der Seite Jobs sind alle Trainingsjobs aufgelistet. Klicken Sie auf den Namen des gerade gesendeten Trainingsjobs.
Auf der Seite Jobdetails sehen Sie den allgemeinen Fortschritt Ihres Jobs. Sie können auch auf Logs ansehen klicken, um eine detailliertere Ansicht des Fortschritts aufzurufen.
Wenn die Jobausführung erfolgreich war, wird oben die Schaltfläche Modell bereitstellen eingeblendet. Klicken Sie auf Modell bereitstellen.
Wählen Sie „Als neues Modell bereitstellen“ aus und geben Sie einen Modellnamen ein. Klicken Sie anschließend auf Bestätigen.
Geben Sie auf der Seite Version erstellen einen Versionsnamen wie
v1
ein und übernehmen Sie für alle anderen Felder die Standardeinstellungen. Klicken Sie auf Speichern.Auf der Seite Modelldetails wird der Versionsname angezeigt. Es dauert einige Minuten, bis die Version erstellt ist. Wenn die Version fertig ist, wird neben dem Versionsnamen ein Häkchen angezeigt.
Klicken Sie auf den Versionsnamen (
v1
), um die Seite Versionsdetails aufzurufen. Im nächsten Schritt dieser Anleitung senden Sie eine Vorhersageanfrage.
Onlinevorhersagen abrufen
Wenn Sie Vorhersagen anfordern, müssen Sie die Eingabedaten im JSON-Format auf eine Weise formatieren, die das Modell erwartet. In aktuellen NCF-Modellen werden Eingaben nicht automatisch vorverarbeitet.
Console
Auf der Seite Versionsdetails für die gerade erstellte Version "v1" können Sie eine Beispielvorhersageanfrage senden.
Wählen Sie den Tab Test und Nutzung aus.
Kopieren Sie das folgende Beispiel in das Eingabefeld:
{ "instances": [{ "duplicate_mask": [0], "item_id": [1], "train_labels": [true], "user_id": [1], "valid_point_mask": [false] }] }
Klicken Sie auf Test.
Warten Sie, bis der Vorhersagevektor zurückgegeben wird.