Empfehlungen basierend auf explizitem Feedback mit einem Matrixfaktorisierungsmodell erstellen


In dieser Anleitung erfahren Sie, wie Sie ein Matrixfaktorisierungsmodell erstellen und anhand der Filmbewertungen von Kunden im Dataset movielens1m trainieren. Anschließend verwenden Sie das Matrixfaktorisierungsmodell, um Filmempfehlungen für Nutzer zu generieren.

Wenn Sie vom Kunden bereitgestellte Bewertungen zum Trainieren des Modells verwenden, wird dies als Training mit expliziten Feedback bezeichnet. Matrixfaktorisierungsmodelle werden mit dem Algorithmus der alternierenden kleinsten Quadrate trainiert, wenn Sie explizites Feedback als Trainingsdaten verwenden.

Lernziele

In dieser Anleitung werden Sie durch die folgenden Aufgaben geführt:

  • Mit der Anweisung CREATE MODEL ein Matrixfaktorisierungsmodell erstellen
  • Bewerten Sie das Modell mit der ML.EVALUATE-Funktion.
  • Filmvorschläge für Nutzer generieren, indem das Modell mit der ML.RECOMMEND-Funktion verwendet wird

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • BigQuery
  • BigQuery ML

Weitere Informationen zu den Kosten für BigQuery finden Sie auf der Seite BigQuery-Preise.

Weitere Informationen zu den Kosten für BigQuery ML finden Sie unter BigQuery ML-Preise.

Hinweis

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery ist in neuen Projekten automatisch aktiviert. Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu

    Enable the BigQuery API.

    Enable the API

    .

Erforderliche Berechtigungen

  • Sie benötigen die IAM-Berechtigung bigquery.datasets.create, um das Dataset zu erstellen.
  • Zum Erstellen der Verbindungsressource benötigen Sie die folgenden Berechtigungen:

    • bigquery.connections.create
    • bigquery.connections.get
  • Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:

    • bigquery.models.getData
    • bigquery.jobs.create

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

    Dataset erstellen

  4. 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.

      Die öffentlichen Datasets sind am multiregionalen Standort US gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.

    • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.

      Seite "Dataset erstellen"

MovieLens-Daten hochladen

Laden Sie die movielens1m-Daten mit dem bq-Befehlszeilentool in BigQuery hoch.

So laden Sie die movielens1m-Daten hoch:

  1. Öffnen Sie Cloud Shell:

    Cloud Shell aktivieren

  2. Laden Sie die Bewertungsdaten in die Tabelle ratings hoch. Fügen Sie die folgende Abfrage in die Befehlszeile ein und drücken Sie die Taste Enter:

    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
    
  3. Laden Sie die Filmdaten in die Tabelle movies hoch. Fügen Sie in der Befehlszeile die folgende Abfrage ein und drücken Sie die Enter:

    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
    

Modell erstellen

Erstellen Sie ein Matrixfaktorisierungsmodell und trainieren Sie es anhand der Daten in der Tabelle ratings. Das Modell wird darauf trainiert, anhand der von Kunden bereitgestellten Filmbewertungen eine Bewertung für jedes Nutzer/Artikel-Paar vorherzusagen.

Die folgende CREATE MODEL-Anweisung generiert Empfehlungen anhand der folgenden Spalten:

  • 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:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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. Anschließend wird das Modell mf_explicit im Bereich Explorer angezeigt. Da die Abfrage eine CREATE MODEL-Anweisung zum Erstellen eines Modells verwendet, werden keine Abfrageergebnisse ausgegeben.

Trainingsstatistiken abrufen

Optional können Sie sich die Trainingsstatistiken des Modells in der Google Cloud Console ansehen.

Ein Algorithmus für maschinelles Lernen erstellt ein Modell, indem er viele Iterationen des Modells mit verschiedenen 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:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt, maximieren Sie das Dataset bqml_tutorial und maximieren Sie dann den Ordner Modelle.

  3. Klicken Sie auf das Modell mf_explicit und dann auf den Tab Training.

  4. Klicken Sie im Bereich 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, enthält diese Spalte den mittleren quadratischen Fehler.

Sie können auch die Funktion ML.TRAINING_INFO verwenden, um Statistiken zum Modelltraining aufzurufen.

Modell bewerten

Bewerten Sie die Leistung des Modells mit der Funktion ML.EVALUATE. Die Funktion ML.EVALUATE wertet die vom Modell zurückgegebenen vorhergesagten Filmbewertungen anhand der tatsächlichen Filmbewertungen der Nutzer aus den Trainingsdaten aus.

So bewerten Sie das Modell:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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 Wert 1 gibt an, dass das Modell alle Abweichungen der Antwortdaten um den Mittelwert erklärt.

    Weitere Informationen zur Ausgabe der Funktion ML.EVALUATE finden Sie unter Matrixfaktorisierungsmodelle.

Sie können ML.EVALUATE auch aufrufen, ohne die Eingabedaten anzugeben. Es werden dann die Bewertungsmesswerte verwendet, die während des Trainings berechnet wurden.

Vorhergesagte Bewertungen für eine Teilmenge von Nutzer/Artikel-Paaren abrufen

Mit dem ML.RECOMMEND können Sie die prognostizierte Bewertung für jeden Film für fünf Nutzer abrufen.

So rufen Sie die geschätzten Bewertungen ab:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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    |
    +--------------------+---------+---------+
    | ...                | ...     | ...     |
    +--------------------+---------+---------+
    

Empfehlungen generieren

Verwenden Sie die vorhergesagten Bewertungen, um die fünf am häufigsten empfohlenen Filme für jeden Nutzer zu generieren.

So generieren Sie Empfehlungen:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Schreiben Sie die prognostizierten 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`);
  3. 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  |
    +---------+-------------------------------------+------------------------+--------------------+
    | ...     | ...                                 | ...                    | ...                |
    +---------+-------------------------------------+------------------------+--------------------+
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  • Sie können das von Ihnen erstellte Projekt löschen.
  • Sie können das Projekt aber auch behalten und das Dataset löschen.

Dataset löschen

Wenn Sie Ihr Projekt löschen, werden alle Datasets und Tabellen entfernt. Wenn Sie das Projekt wieder verwenden möchten, können Sie das in dieser Anleitung erstellte Dataset löschen:

  1. Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.

    Zur Seite "BigQuery"

  2. Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.

  3. Klicken Sie rechts im Fenster auf Delete dataset (Dataset löschen). Dadurch werden das Dataset, die Tabelle und alle Daten gelöscht.

  4. Bestätigen Sie im Dialogfeld Dataset löschen den Löschbefehl. Geben Sie dazu den Namen des Datasets (bqml_tutorial) ein und klicken Sie auf Löschen.

Projekt löschen

So löschen Sie das Projekt:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte