CREATE MODEL-Anweisung für die Matrixfaktorisierung

CREATE MODEL-Anweisung für die Matrixfaktorisierung

Zum Erstellen eines Matrixfaktorisierungsmodells in BigQuery verwenden Sie die BigQuery ML-Anweisung CREATE MODEL und geben für MODEL_TYPE den Wert 'MATRIX_FACTORIZATION' an.

CREATE MODEL-Syntax

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
OPTIONS(MODEL_TYPE = 'MATRIX_FACTORIZATION'
  [, FEEDBACK_TYPE = {'EXPLICIT' | 'IMPLICIT'} ]
  [, NUM_FACTORS = int64_value ]
  [, USER_COL = string_value ]
  [, ITEM_COL = string_value ]
  [, RATING_COL = string_value ]
  [, WALS_ALPHA = float64_value ]
  [, L2_REG = float64_value ]
  [, MAX_ITERATIONS = int64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' } ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, DATA_SPLIT_COL = string_value ])
AS query_statement

CREATE MODEL

Erstellt ein neues BigQuery ML-Modell im angegebenen Dataset. Wenn der Modellname bereits vorhanden ist, gibt CREATE MODEL einen Fehler zurück.

CREATE MODEL IF NOT EXISTS

Erstellt ein neues BigQuery ML-Modell nur, wenn das Modell im angegebenen Dataset aktuell nicht vorhanden ist.

CREATE OR REPLACE MODEL

Erstellt ein neues BigQuery ML-Modell und ersetzt jedes vorhandene Modell mit dem gleichen Namen im angegebenen Dataset.

model_name

model_name ist der Name des BigQuery ML-Modells, das Sie erstellen oder ersetzen. Der Modellname muss pro Dataset eindeutig sein: Kein anderes Modell oder keine andere Tabelle darf denselben Namen haben. Der Modellname muss denselben Benennungsregeln wie eine BigQuery-Tabelle folgen. Ein Modellname kann Folgendes enthalten:

  • Bis zu 1.024 Zeichen
  • Groß- und Kleinbuchstaben, Zahlen und Unterstriche

model_name unterscheidet nicht zwischen Groß- und Kleinschreibung.

Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie die Projekt-ID dem Modellnamen im folgenden Format voran, einschließlich der Graviszeichen:

`[PROJECT_ID].[DATASET].[MODEL]`

Beispiel:

`myproject.mydataset.mymodel`

CREATE MODEL unterstützt die folgenden Optionen:

MODEL_TYPE

Syntax

MODEL_TYPE = 'MATRIX_FACTORIZATION'

Beschreibung

Gibt den Modelltyp an. Zum Erstellen eines Matrixfaktorisierungsmodells legen Sie für model_type den Wert 'MATRIX_FACTORIZATION' fest.

model_option_list

In model_option_list ist die Option model_type erforderlich. Alle anderen sind optional.

Matrixfaktorisierungsmodelle unterstützen die folgenden Optionen:

FEEDBACK_TYPE

Syntax

FEEDBACK_TYPE = { 'EXPLICIT' | 'IMPLICIT' }

Beschreibung

Gibt den Feedbacktyp für Matrixfaktorisierungsmodelle an. Der Feedbacktyp bestimmt den Algorithmus, der während des Trainings verwendet wird.

Es gibt zwei Arten von Bewertungen (Nutzerfeedback): 'EXPLICIT' und 'IMPLICIT'. Wählen Sie je nach Anwendungsfall den gewünschten Feedbacktyp in den Optionen zur Modellerstellung aus.

  • Wenn der Nutzer einem Artikel explizit eine Bewertung gegeben hat, z. B. von 1–5 bei Filmempfehlungen, geben Sie FEEDBACK_TYPE='EXPLICIT' an. Dadurch wird ein Modell mit dem Algorithmus der alternierenden kleinsten Quadrate trainiert.

  • Die meisten Probleme mit Produktempfehlungen treten auf, wenn kein explizites Nutzerfeedback vorhanden ist. In diesem Fall muss der Bewertungswert anhand der Nutzerinteraktion mit dem Artikel (z. B. Klicks, Seitenaufrufe und Käufe) vom System erstellt werden. Geben Sie in diesem Fall FEEDBACK_TYPE='IMPLICIT' an. Dadurch wird ein Modell mit dem Algorithmus der gewichteten alternierenden kleinsten Quadrate (WALS-Algorithmus) trainiert.

Weitere Informationen zu den Unterschieden zwischen den beiden Feedbacktypen und dazu, wann welcher Typ verwendet werden soll, finden Sie unter Weitere Informationen zu Feedbacktypen.

Argumente

Der Standardwert ist 'EXPLICIT'.

NUM_FACTORS

Syntax

NUM_FACTORS = int64_value

Beschreibung

Gibt die Anzahl der latenten Faktoren an, die für Matrixfaktorisierungsmodelle verwendet werden sollen.

Argumente

int64_value gehört zur Gruppe 'INT64'. Zulässige Werte sind 2 bis 200. Der Standardwert ist log2(n), wobei n die Anzahl der Trainingsbeispiele ist.

USER_COL

Syntax

USER_COL = string_value

Beschreibung

Der Name der Nutzerspalte für Matrixfaktorisierungsmodelle.

Argumente string_value gehört zur Gruppe 'STRING'. Der Standardwert ist 'user'.

ITEM_COL

Syntax

ITEM_COL = string_value

Beschreibung

Der Name der Artikelspalte für Matrixfaktorisierungsmodelle.

Argumente string_value gehört zur Gruppe 'STRING'. Der Standardwert ist 'item'.

RATING_COL

Syntax

RATING_COL = string_value

Beschreibung

Der Name der Bewertungsspalte für Matrixfaktorisierungsmodelle.

Argumente string_value gehört zur Gruppe 'STRING'. Der Standardwert ist 'rating'.

WALS_ALPHA

Syntax

WALS_ALPHA = float64_value

Beschreibung

Ein Hyperparameter für das Matrixfaktorisierungsmodell 'IMPLICIT'.

Weitere Informationen zu Feedbacktypen finden Sie auf dieser Seite.

Argumente float64_value gehört zur Gruppe 'FLOAT64'. Der Standardwert ist 40.

L2_REG

Syntax

L2_REG = float64_value

Beschreibung

Wert der angewendeten L2-Regularisierung.

Argumente

float64_value gehört zur Gruppe 'FLOAT64'. Der Standardwert ist 1,0.

MAX_ITERATIONS

Syntax

MAX_ITERATIONS = int64_value

Beschreibung

Die maximale Anzahl der Trainingsdurchläufe oder -schritte.

Argumente

int64_value gehört zur Gruppe 'INT64'. Der Standardwert ist 20.

EARLY_STOP

Syntax

EARLY_STOP = { TRUE | FALSE }

Beschreibung

Gibt an, ob das Training nach dem ersten Durchlauf beendet werden soll, wenn die relative Verlustverbesserung kleiner als der für MIN_REL_PROGRESS angegebene Wert ist.

Argumente

Der Wert ist ein BOOL. Der Standardwert ist TRUE.

MIN_REL_PROGRESS

Syntax

MIN_REL_PROGRESS = float64_value

Beschreibung

Die minimale relative Verlustverbesserung, die für die Fortsetzung des Trainings erforderlich ist, wenn EARLY_STOP auf "true" gesetzt ist. Beispiel: Ein Wert von 0,01 gibt an, dass der Verlust bei jedem Durchlauf um 1 % reduziert werden muss, damit das Training fortgesetzt werden kann.

Argumente

float64_value gehört zur Gruppe 'FLOAT64'. Der Standardwert ist 0,01.

DATA_SPLIT_METHOD

Syntax

DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' }

Beschreibung

Methode, um Eingabedaten in Trainings- und Auswertungs-Datasets aufzuteilen. Trainingsdaten werden zum Trainieren des Modells verwendet. Mithilfe von Bewertungsdaten soll eine Überanpassung vermieden werden, indem das Training vorzeitig beendet wird.

Argumente

Nimmt die folgenden Werte an:

'AUTO_SPLIT': Die Strategie zur automatischen Aufteilung ist so definiert:

  • Wenn die Eingabedaten weniger als 500 Zeilen enthalten, werden alle Zeilen als Trainingsdaten verwendet.
  • Wenn die Eingabedaten zwischen 500 und 50.000 Zeilen enthalten, werden 20 % der Daten durch eine RANDOM-Aufteilung als Bewertungsdaten verwendet.
  • Wenn die Eingabedaten mehr als 50.000 Zeilen enthalten, werden nur 10.000 davon durch eine RANDOM-Aufteilung als Bewertungsdaten verwendet.

'RANDOM': Teilt Daten nach dem Zufallsprinzip auf. Eine zufällige Aufteilung ist deterministisch: Unterschiedliche Trainingsläufe führen zu denselben Aufteilungsergebnissen, wenn die zugrunde liegenden Trainingsdaten gleich bleiben.

'CUSTOM': Teilt Daten mithilfe einer vom Kunden bereitgestellten Spalte vom Typ BOOL auf. Die Zeilen mit dem Wert TRUE werden als Bewertungsdaten verwendet. Die Zeilen mit dem Wert FALSE werden als Trainingsdaten verwendet.

'SEQ': Teilt die Daten mithilfe einer vom Kunden bereitgestellten Spalte sequenziell auf. Die Spalte kann einen beliebigen sortierbaren Datentyp haben: NUMERIC, STRING oder TIMESTAMP. Alle Zeilen mit aufgeteilten Werten, die kleiner als der Grenzwert sind, werden als Trainingsdaten verwendet. Die restlichen Zeilen, einschließlich NULLs, werden als Bewertungsdaten verwendet.

'NO_SPLIT': Verwendet alle Daten als Trainingsdaten.

DATA_SPLIT_EVAL_FRACTION

Syntax

DATA_SPLIT_EVAL_FRACTION = float64_value

Beschreibung

Diese Option wird für Aufteilungen vom Typ 'RANDOM' und 'SEQ' verwendet. Sie gibt den Anteil der zur Bewertung verwendeten Daten mit einer Genauigkeit von zwei Dezimalstellen an.

Argumente

float64_value gehört zur Gruppe 'FLOAT64'. Der Standardwert ist 0,2.

DATA_SPLIT_COL

Syntax

DATA_SPLIT_COL = string_value

Beschreibung

Gibt die Spalte an, die zum Aufteilen der Daten verwendet wird. Diese Spalte kann nicht als Feature oder Label verwendet werden und wird automatisch von den Features ausgeschlossen.

  • Wenn der Wert von DATA_SPLIT_METHOD auf 'CUSTOM' gesetzt ist, muss die entsprechende Spalte vom Typ BOOL sein. Die Zeilen mit TRUE- oder NULL-Werten werden als Bewertungsdaten verwendet. Zeilen mit FALSE-Werten werden als Trainingsdaten verwendet.

  • Wenn der Wert von DATA_SPLIT_METHOD auf 'SEQ' gesetzt ist, werden die letzten n Zeilen aufsteigend in der entsprechenden Spalte als Bewertungsdaten verwendet, wobei n der für DATA_SPLIT_EVAL_FRACTION angegebene Wert ist. Die ersten Zeilen werden als Trainingsdaten verwendet.

Informationen zu unterstützten Eingabetypen finden Sie unter Unterstützte Eingabetypen für DATA_SPLIT_COL.

Argumente

string_value gehört zur Gruppe 'STRING'.

query_statement

Die Klausel AS query_statement gibt die Standard-SQL-Abfrage an, die zum Erstellen der Trainingsdaten verwendet wird. Informationen zur unterstützten SQL-Syntax der query_statement-Klausel finden Sie unter Standard-SQL-Abfragesyntax.

Bei Matrixfaktorisierungsmodellen muss query_statement genau drei Spalten enthalten (user, item und rating), es sei denn, der Nutzer gibt eine DATA_SPLIT_METHOD-Methode an. Für diese ist eine DATA_SPLIT_COL-Spalte erforderlich.

Unterstützte Eingaben

Die Anweisung CREATE MODEL unterstützt die im Folgenden aufgeführten Datentypen für die Nutzer-, Artikel- und Bewertungsspalten.

Unterstützte Datentypen für Eingaben in Matrixfaktorisierungsmodellen

BigQuery ML unterstützt verschiedene Standard-SQL-Datentypen für die Eingabespalten der Matrixfaktorisierung. Für alle Spalten werden folgende Datentypen unterstützt:

Matrix factorization input column Supported types
user Jeder gruppierbare Datentyp
item Jeder gruppierbare Datentyp
rating INT64
NUMERIC
FLOAT64

Weitere Informationen zu Feedbacktypen

Ein wichtiger Aspekt beim Erstellen eines guten Matrixfaktorisierungsmodells für Empfehlungen ist, dass die Daten mit dem Algorithmus trainiert werden, der am besten für sie geeignet ist. Bei Matrixfaktorisierungsmodellen gibt es zwei verschiedene Möglichkeiten für die Bewertung eines Nutzer/Artikel-Paars.

Bewertungen, die der Nutzer eingeben und festlegen musste, gelten als explizites Feedback. Eine niedrige explizite Bewertung deutet darauf hin, dass der Nutzer einen Artikel sehr negativ wahrnimmt, während eine hohe explizite Bewertung darauf hinweist, dass der Artikel dem Nutzer gefallen hat. Film-Streaming-Websites, auf denen Nutzer Bewertungen abgeben, sind Beispiele für Datasets mit expliziten Labels. Bei Problemen mit explizitem Feedback verwenden wir den Algorithmus der alternierenden kleinsten Quadrate, der auch als ALS (vom Englischen "Alternating Least Squares") bezeichnet wird. Der ALS-Algorithmus versucht, die folgende Verlustfunktion zu minimieren:

$$ Verlust = \sum_{u, i \in \text{beobachtete Bewertungen}} (r_{ui} - x^T_uy_i)^2 + \lambda(\sum_u||x_u||^2 + \sum_i||y_i||^2)$$

Dabei gilt:

\(r_{ui} = \) Bewertung, die der Nutzer \(u\) dem Artikel \(i\) gegeben hat
\(x_u = \) Gewichtungsvektor für latente Faktoren für Nutzer \(u\). Entspricht der Länge von NUM_FACTORS.
\(y_i = \) Gewichtungsvektor für latente Faktoren für Artikel \(i\). Entspricht der Länge von NUM_FACTORS.
\(\lambda = \) L2_REG

Die meisten Daten werden jedoch eher selten von Nutzern mit Labels versehen. Oft sind die Klickrate oder die Dauer der Interaktion die einzigen Messwerte für ein Unternehmen, um festzustellen, ob einem Nutzer ein Artikel oder ein Film gefallen hat. Diese Werte können häufig als eine Art Ersatzbewertung verwendet werden. Sie sind aber nicht unbedingt ein eindeutiger Hinweis darauf, ob einem Nutzer etwas gefällt oder nicht gefällt. Die Daten in diesen Datasets gelten als implizites Feedback. Bei Problemen mit implizitem Feedback verwenden wir eine Variante dieses Algorithmus, die als gewichtete alternierende kleinste Quadrate bzw. WALS (Weighted-Alternating Least Squares) bezeichnet wird (siehe http://yifanhu.net/PUB/cf.pdf). Dieser Ansatz nutzt diese Ersatzbewertungen als Konfidenzwerte für die Beobachtung eines Nutzers für einen Artikel. WALS versucht, die folgende Verlustfunktion zu minimieren:

$$ Verlust = \sum_{u, i} c_{ui}(p_{ui} - x^T_uy_i)^2 + \lambda(\sum_u||x_u||^2 + \sum_i||y_i||^2) $$

Die Funktion verwendet dabei zusätzlich zu den oben definierten Variablen die folgenden Variablen:

\(p_{ui} = 1\) wenn \(r_{ui} > 0\) und \(p_{ui} = 0\) wenn \(r_{ui} < 0\)
\(c_{ui} = 1 + \alpha r_{ui}\)
\(\alpha = \) WALS_ALPHA

Bei der expliziten Matrixfaktorisierung umfasst die Eingabe in der Regel Ganzzahlen innerhalb eines bekannten festen Bereichs. Bei der impliziten Matrixfaktorisierung können die Eingabebewertungen Double- oder Ganzzahlen sein, die sich über einen größeren Bereich erstrecken. Achten Sie darauf, dass die Eingabebewertungen keine Ausreißer enthalten, und skalieren Sie die Eingabebewertungen, wenn das Modell schlechte Ergebnisse liefert.

Bekannte Beschränkungen

CREATE MODEL-Anweisungen für Matrixfaktorisierungsmodelle müssen folgenden Regeln entsprechen:

  •  Wenn der Fehler "Modell ist zu groß (über 100 MB)" ausgegeben wird, überprüfen Sie die Eingabedaten. Dieser Fehler tritt auf, wenn für einen einzelnen Nutzer oder einen einzelnen Artikel zu viele Bewertungen vorliegen. Möglicherweise können Sie den Fehler beheben, wenn Sie die Nutzer- oder Artikelspalten in einen INT64-Wert hashen oder die Datengröße reduzieren. Eine allgemeine Formel zur Bestimmung, ob dieser Fehler auftritt, lautet so:

    max(num_rated_user, num_rated_item) < 100 million

    Dabei steht num_rated_user für die maximale Anzahl an Artikelbewertungen, die ein einzelner Nutzer eingegeben hat, und "num_rated_items" für die maximale Anzahl an Nutzerbewertungen für einen bestimmten Artikel.

Beispiele für CREATE MODEL

Mit dem folgenden Beispiel werden Modelle mit dem Namen mymodel in mydataset in Ihrem Standardprojekt erstellt:

Matrixfaktorisierungsmodell mit explizitem Feedback trainieren

Mit diesem Beispiel wird ein Matrixfaktorisierungsmodell mit explizitem Feedback erstellt:

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='MATRIX_FACTORIZATION') AS
SELECT
  user,
  item,
  rating
FROM
  `mydataset.mytable`

Matrixfaktorisierungsmodell mit implizitem Feedback trainieren

In diesem Beispiel wird ein Matrixfaktorisierungsmodell mit implizitem Feedback erstellt.

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='MATRIX_FACTORIZATION',
         FEEDBACK_TYPE='IMPLICIT') AS
SELECT
  user,
  item,
  rating
FROM
  `mydataset.mytable`

Nächste Schritte