In dieser Anleitung erfahren Sie, wie Sie ein Matrixfaktorisierungsmodell erstellen und es mit den Filmrezensionen der Kunden im Dataset movielens1m
trainieren. Anschließend verwenden Sie das Matrixfaktorisierungsmodell, um Filmempfehlungen für Nutzer zu generieren.
Die Verwendung von Kundenbewertungen zum Trainieren des Modells wird als Training mit explizitem Feedback bezeichnet. Matrixfaktorisierungsmodelle werden mit dem Algorithmus der alternierenden kleinsten Quadrate trainiert, wenn Sie explizites Feedback als Trainingsdaten verwenden.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset zum Speichern Ihres ML-Modells.
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorial
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.
Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
bq
Wenn Sie ein neues Dataset erstellen möchten, verwenden Sie den Befehl bq mk
mit dem Flag --location
. Eine vollständige Liste der möglichen Parameter finden Sie in der bq mk --dataset
-Befehlsreferenz.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorial
, wobei der Datenspeicherort aufUS
und die Beschreibung aufBigQuery ML tutorial dataset
festgelegt ist:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anstelle des Flags
--dataset
verwendet der Befehl die verkürzte Form-d
. Wenn Sie-d
und--dataset
auslassen, wird standardmäßig ein Dataset erstellt.Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
API
Rufen Sie die Methode datasets.insert
mit einer definierten Dataset-Ressource auf.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Movielens-Daten hochladen
Laden Sie die movielens1m
-Daten in BigQuery hoch.
Befehlszeile
So laden Sie die movielens1m
-Daten mit dem bq-Befehlszeilentool hoch:
Öffnen Sie Cloud Shell:
Laden Sie die Daten zu den Bewertungen in die Tabelle
ratings
hoch. Fügen Sie in der Befehlszeile die folgende Abfrage ein und drücken Sie dieEnter
-Taste:curl -O 'http://files.grouplens.org/datasets/movielens/ml-1m.zip' unzip ml-1m.zip sed 's/::/,/g' ml-1m/ratings.dat > ratings.csv bq load --source_format=CSV bqml_tutorial.ratings ratings.csv \ user_id:INT64,item_id:INT64,rating:FLOAT64,timestamp:TIMESTAMP
Laden Sie die Filmdaten in die Tabelle
movies
hoch. Fügen Sie in der Befehlszeile die folgende Abfrage ein und drücken Sie dieEnter
-Taste:sed 's/::/@/g' ml-1m/movies.dat > movie_titles.csv bq load --source_format=CSV --field_delimiter=@ \ bqml_tutorial.movies movie_titles.csv \ movie_id:INT64,movie_title:STRING,genre:STRING
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Erstellen Sie zuerst ein Client
-Objekt mit bqclient = google.cloud.bigquery.Client()
und laden Sie dann die movielens1m
-Daten in das Dataset, das Sie im vorherigen Schritt erstellt haben.
Modell erstellen
Erstellen Sie ein Matrixfaktorisierungsmodell und trainieren Sie es mit den Daten in der Tabelle ratings
. Das Modell wird trainiert, um eine Bewertung für jedes Nutzer/Artikel-Paar auf Grundlage der von Kunden bereitgestellten Filmbewertungen vorherzusagen.
SQL
Die folgende CREATE MODEL
-Anweisung verwendet diese Spalten, um Empfehlungen zu generieren:
user_id
: Die Nutzer-ID.item_id
: Die Film-ID.rating
: Die explizite Bewertung von 1 bis 5, die der Nutzer für den Artikel abgegeben hat.
So erstellen Sie das Modell:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_explicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'explicit', USER_COL = 'user_id', ITEM_COL = 'item_id', L2_REG = 9.83, NUM_FACTORS = 34) AS SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings`;
Die Abfrage dauert etwa 10 Minuten. Danach wird das Modell
mf_explicit
im Bereich Explorer angezeigt. Da die Abfrage eineCREATE MODEL
-Anweisung zum Erstellen eines Modells verwendet, werden keine Abfrageergebnisse ausgegeben.
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Die Ausführung des Codes dauert etwa 10 Minuten. Anschließend wird das Modell mf_explicit
im Bereich Explorer angezeigt.
Trainingsstatistiken abrufen
Optional können Sie die Trainingsstatistiken des Modells in derGoogle Cloud Console ansehen.
Ein Algorithmus für maschinelles Lernen erstellt ein Modell, indem er viele Iterationen des Modells mit unterschiedlichen Parametern erstellt und dann die Version des Modells auswählt, die den Verlust minimiert. Dieser Vorgang wird als empirische Risikominimierung bezeichnet. Anhand der Trainingsstatistiken des Modells können Sie den Verlust sehen, der mit jeder Iteration des Modells verbunden ist.
So rufen Sie die Trainingsstatistiken des Modells auf:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Klicken Sie im linken Bereich auf
Explorer:Wenn Sie den linken Bereich nicht sehen, klicken Sie auf
Linken Bereich maximieren, um ihn zu öffnen.Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und dann auf das Dataset
bqml_tutorial
.Klicken Sie auf den Tab Modelle.
Klicken Sie auf das
mf_explicit
-Modell und dann auf den Tab Training.Klicken Sie im Bereich Anzeigen als auf Tabelle. Die Antwort sollte in etwa so aussehen:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 11 | 0.3943 | 42.59 | +-----------+--------------------+--------------------+ | 10 | 0.3979 | 27.37 | +-----------+--------------------+--------------------+ | 9 | 0.4038 | 40.79 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
Die Spalte Trainingsdatenverlust enthält den Verlustmesswert, der berechnet wird, nachdem das Modell trainiert wurde. Da es sich um ein Matrixfaktorisierungsmodell handelt, wird in dieser Spalte die mittlere quadratische Abweichung angezeigt.
Mit der Funktion ML.TRAINING_INFO
können Sie auch Statistiken zum Modelltraining aufrufen.
Modell bewerten
Bewerten Sie die Leistung des Modells, indem Sie die vom Modell zurückgegebenen vorhergesagten Filmbewertungen mit den tatsächlichen Filmbewertungen der Nutzer aus den Trainingsdaten vergleichen.
SQL
Mit der ML.EVALUATE
-Funktion das Modell bewerten:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings` ));
Die Antwort sollte in etwa so aussehen:
+---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | 0.48494444327829156 | 0.39433706592870565 | 0.025437895793637522 | 0.39017059802629905 | 0.6840033369412044 | 0.6840033369412264 | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+
Ein wichtiger Messwert in den Bewertungsergebnissen ist der R2-Wert. Der R2-Wert ist ein statistisches Maß dafür, ob sich die Vorhersagen der linearen Regression den tatsächlichen Daten annähern. Der Wert
0
gibt an, dass das Modell keine der Abweichungen der Antwortdaten um den Mittelwert erklärt. Der Wert1
gibt an, dass das Modell alle Abweichungen der Antwortdaten um den Mittelwert erklärt.Weitere Informationen zur Ausgabe der
ML.EVALUATE
-Funktion finden Sie unter Ausgabe.
Sie können ML.EVALUATE
auch aufrufen, ohne die Eingabedaten anzugeben. Es werden dann die Bewertungsmesswerte verwendet, die während des Trainings berechnet wurden.
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Rufen Sie model.score()
auf, um das Modell zu bewerten.
Vorhergesagte Bewertungen für eine Teilmenge von Nutzer/Artikel-Paaren abrufen
Die vorhergesagte Bewertung für jeden Film für fünf Nutzer abrufen.
SQL
Mit der ML.RECOMMEND
-Funktion lassen sich vorhergesagte Bewertungen abrufen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id FROM `bqml_tutorial.ratings` LIMIT 5 ));
Die Antwort sollte in etwa so aussehen:
+--------------------+---------+---------+ | predicted_rating | user_id | item_id | +--------------------+---------+---------+ | 4.2125303962491873 | 4 | 3169 | +--------------------+---------+---------+ | 4.8068920531981263 | 4 | 3739 | +--------------------+---------+---------+ | 3.8742203494732403 | 4 | 3574 | +--------------------+---------+---------+ | ... | ... | ... | +--------------------+---------+---------+
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Rufen Sie model.predict()
auf, um die vorhergesagten Bewertungen abzurufen.
Empfehlungen generieren
Verwenden Sie die vorhergesagten Bewertungen, um die fünf am häufigsten empfohlenen Filme für jeden Nutzer zu generieren.
SQL
So generieren Sie Empfehlungen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Schreiben Sie die vorhergesagten Bewertungen in eine Tabelle. Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_explicit`);
Verknüpfen Sie die vorhergesagten Bewertungen mit den Filminformationen und wählen Sie die fünf besten Ergebnisse pro Nutzer aus. Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT user_id, ARRAY_AGG(STRUCT(movie_title, genre, predicted_rating) ORDER BY predicted_rating DESC LIMIT 5) FROM ( SELECT user_id, item_id, predicted_rating, movie_title, genre FROM `bqml_tutorial.recommend` JOIN `bqml_tutorial.movies` ON item_id = movie_id ) GROUP BY user_id;
Die Antwort sollte in etwa so aussehen:
+---------+-------------------------------------+------------------------+--------------------+ | user_id | f0_movie_title | f0_genre | predicted_rating | +---------+-------------------------------------+------------------------+--------------------+ | 4597 | Song of Freedom (1936) | Drama | 6.8495752907364009 | | | I Went Down (1997) | Action/Comedy/Crime | 6.7203235758772877 | | | Men With Guns (1997) | Action/Drama | 6.399407352232001 | | | Kid, The (1921) | Action | 6.1952890198126731 | | | Hype! (1996) | Documentary | 6.1895766097451475 | +---------+-------------------------------------+------------------------+--------------------+ | 5349 | Fandango (1985) | Comedy | 9.944574012151549 | | | Breakfast of Champions (1999) | Comedy | 9.55661860430112 | | | Funny Bones (1995) | Comedy | 9.52778917835076 | | | Paradise Road (1997) | Drama/War | 9.1643621767929133 | | | Surviving Picasso (1996) | Drama | 8.807353289233772 | +---------+-------------------------------------+------------------------+--------------------+ | ... | ... | ... | ... | +---------+-------------------------------------+------------------------+--------------------+
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.
Rufen Sie model.predict()
auf, um die vorhergesagten Bewertungen abzurufen.