Beliebte Suchanfragen

Cloud Native

DevOps

IT-Security

Agile Methoden

Java

//

Schnelles Training eines Recommendation-Modells durch BigQuery ML

26.7.2021 | 11 Minuten Lesezeit

Machine Learning (ML) kann nur durch Modelle in der Produktion Business Value erzeugen. Allerdings kann die Zeitspanne zwischen der Entwicklung der nächsten Iteration eines Modells und dessen Einsatz in einer Produktionsumgebung massiv sein. Dies gilt auch, wenn ihr gerade erst mit der Einführung des maschinellen Lernens in eurem Unternehmen beginnt und das allererste Modell erstellen wollt. Denn zu einem ML-System in Produktion gehört mehr als bloß der Algorithmus, der die Daten verarbeitet [1] (siehe Abbildung 1). Unserer Erfahrung nach wird häufig überproportional viel in die „ML-Code“-Logik investiert. Wir wollten wissen, inwiefern der BigQuery-ML-(BQML-)Dienst auf der Google Cloud Platform (GCP) Data Scientists und Data Engineers bei der Entwicklung eines ML-Modells für Recommendations unterstützen kann.

Abbildung 1: Nur ein kleiner Teil von ML-Systemen besteht aus dem eigentlichen ML-Code. Die notwendige, umliegende Infrastruktur ist komplex.

Wir sehen uns ein typisches Beispiel aus der Praxis an: Recommendation Engines. Ihr Einsatz auf dem Markt ist umfassend, bildet einen wichtigen Bestandteil für E-Commerce-Geschäftsmodelle und ist auch für viele andere Branchen relevant. Die Fähigkeit, eine solche Engine schnell und in hoher Qualität zu implementieren, erzeugt daher einen direkten Mehrwert für digitale Produkte.

Wir sehen diesen Artikel in einer Reihe mit Artikeln unserer Kollegen Marcel Mikl („Wie man Data-Science-Projekte nicht in die PoC-Sackgasse manövriert“ – zuerst erschienen im Softwerker Vol. 14) [3], Nico Axtmann („Data Science in der Praxis: Häufige Fehler und Vorgehen“) [4] und Roman Seyffarth (“Machine learning: Moving from experiments to production”) [5].

Dieser Artikel ist zuerst erschienen in unserem Softwerker Magazin Vol. 15, „Weniger ist mehr“, unter dem Titel „BigQuery ML für Recommendations auf dem Prüfstand“. Für die Veröffentlichung auf diesem Blog wurde dieser überarbeitet und in zwei Posts geteilt, diesen hier mit Technik-Fokus und einen mit Business-Fokus. Timo Böhm hat in seinem begleitenden Post mit Business-Fokus die Vorteile der Nutzung von BigQuery ML bezüglich der Time-to-Market untersucht. 

Recommendations mit SQL mit BigQuery ML (BQML) erstellen

Im Allgemeinen wirbt Google für BigQuery als „serverloses, hochskalierbares und kostengünstiges Data Warehouse“ [6]. Für unseren Zweck konzentrieren wir uns auf dessen ML-Fähigkeiten, die über Standard-SQL-Abfragen (!) integriert werden. BQML bietet dazu einen ständig wachsenden Satz von trainierbaren, parametrisierbaren Modellen (wie lineare Regression, K-Means, Matrixfaktorisierung und sogar „Boosted Trees“ und Deep-Learning-Modelle) [7]. Diese können per Mausklick zum Serverendpoint für Echtzeit-Serving exportiert werden [8].

Zunächst möchten wir darüber informieren, wie der Algorithmus funktioniert. Dann geben wir einen architektonischen Überblick und gehen anschließend in die Implementierungsdetails.

Der Algorithmus: Matrix-Faktorisierung 

In diesem Artikel konzentrieren wir uns auf das kollaborative Filtern („Collaborative Filtering“). Diese Gruppe von Algorithmen baut auf Informationen auf Benutzerebene und deren Interaktion mit bestimmten Inhalten, Elementen oder Diensten auf, um daraus Empfehlungen abzuleiten. Dabei fokussieren wir uns auf eine spezifische Implementierung: die Matrix-Faktorisierung.

Wir werden hier nicht auf die mathematischen Details eingehen, so dass es ausreicht zu wissen, dass die Matrixfaktorisierung alle verfügbaren Informationen gleichzeitig zur Vorhersage nutzt. Das heißt, die unbekannte Bewertung eines Benutzers wird auf der Grundlage von Benutzern mit ähnlichen Mustern vorhergesagt. Input und Output dieses Ansatzes sehen aus wie in Abbildung 2:

Abbildung 2: Matrix-Faktorisierung veranschaulicht, Credits an Google [9].

Architektur

Google hat BigQuery so konzipiert, dass es für viele Anwendungsfälle autark ist. Das heißt, es enthält den Datensatz, den wir für das Training eines ML-Modells verwenden, enthält Funktionen zur Transformation der Daten und erstellt und evaluiert das ML-Modell selbst. Batch-Vorhersagen können die Data-Science-Teams direkt in BigQuery durch SQL-Statements vornehmen. Im Falle von Online-Vorhersagen kann das Modell zu GCPs „AI Platform“ exportiert und von dort gemanaged mit Autoscaling über einen API Endpoint Prädiktionen liefern [10] (siehe Abbildung 3).

Abbildung 3: Batch- und Online-Prädiktion mit einem BQML-Modell.

Datensatz

Für unseren Test verwenden wir einen Webmarketing-Datensatz, der auf GCP öffentlich verfügbar ist. Die Daten wurden von der Webseite der österreichischen Zeitung https://kurier.at/ gesammelt. Laut Wikipedia ist sie eine überregionale österreichische Tageszeitung,deren Onlinepräsenz bereits seit 1996 existiert. Der Datensatz erfasst rund 280.000 Benutzerinteraktionen mit Artikeln auf der Website und enthält die Dauer jedes Besuchs. Unser Ziel ist es, diese Daten zu nutzen, um auf der Grundlage der impliziten Präferenzen der Nutzer weitere Artikel zu empfehlen.

Arbeitsschritte 

Wir verwenden das offizielle BQML Tutorial von Google als Ausgangpunkt [11]. Der Datenimport und das Modelltraining können durch reines SQL in der BigQuery GUI ausgeführt werden. Wir werden folgende Schritte näher erläutern:

  1. Datenimport
  2. Modelltraining
  3. Modellevaluation
  4. Batch-Prädiktion 
  5. Online-Prädiktion

Wir gehen nun im Einzelnen auf die Schritte ein.

Datenimport 

Der Datenimport ist ein längeres SQL-Statement, das hier zu viel Platz benötigen würde. Wir verweisen gerne auf das offizielle Google Tutorial. Die Daten werden in die Tabelle bqml_tutorial.analytics_session_data geladen und sehen aus wie in Abbildung 4.

Abbildung 4: Auszug der eingeladenen Daten. Hinter der visitorId verbirgt sich ein Nutzer der Website, und hinter einer contentId verbergen sich Artikel der Zeitung. session_duration ist die Dauer in Millisekunden, die der Nutzer auf der Seite verbracht hat. 

Modelltraining 

Das Modelltraining funktioniert ebenfalls durch ein SQL-Statement (siehe Codesnippet 1). Keine Provision von Maschinen und kein Coding abseits von SQL ist dafür notwendig. Wir skalieren das Rating auf das Intervall [0,1]. Als Daumenregel schneiden wir alle Sessionlängen bei 277.190 ms ab, um die Ausreißer nach oben zu eliminieren (z. B. jemand hatte das Browserfenster die ganze Nacht geöffnet). 277 Sekunden entspricht dem 90 % Quantil. Das bedeutet, dass 90 Prozent der Sessionlängen einer visitorId auf einer contentId kürzer war als diese Zeitspanne. Für die restlichen Parameter, Regularisierung und Anzahl Faktoren (in Abbildung 4 mit „k“ bezeichnet), haben wir einfach die von Google angegebenen Standardwerte angenommen.

1CREATE OR REPLACE MODEL
2  bqml_tutorial.my_implicit_mf_model
3  OPTIONS (
4    model_type='matrix_factorization',
5    feedback_type='implicit',
6    user_col='visitorId',
7    item_col='contentId',
8    rating_col='rating',
9    l2_reg=1.0,  -- Default
10    num_factors=18) AS  -- calculated default
11SELECT
12  visitorId,
13  contentId,
14  IF ((session_duration / 277190) >= 1,
15      1, session_duration / 277190) AS rating
16FROM
17  bqml_tutorial.analytics_session_data

Codesnippet 1: Erstellen eines matrix_factorization Modells in BigQuery.

Das Training für einen Datensatz von 280.000 Nutzer-Artikel-Interaktionen hat in unserem Fall 9 Minuten gedauert. Wir können in Abbildung 5 sehen, dass das Modell konvergiert ist.

Abbildung 5: Wir sehen, dass das Modell konvergiert ist (Loss sinkt und stagniert auf einem Level). In unserem Fall hat das Training frühzeitig gestoppt („Early Stopping“), weil keine Verbesserung mehr zu sehen war.

Modellevaluation 

Jedes maschinelle Lernmodell kann aus zwei verschiedenen Perspektiven evaluiert werden:

  1. Basierend auf ML-Metriken [12]
  2. Basierend auf Business-Metriken, wie z. B. Clickthrough Rate, Conversion Rate, Average Basket Size [13].

BQML bietet ML-Metriken direkt an (siehe Abbildung 6). Business-Metriken sind zum jetzigen Zeitpunkt noch nicht verfügbar. Spätestens mit Rollout des MVP sollte jedoch gesichert werden, dass der Einfluss des Recommenders aus einer Geschäftsperspektive gemessen werden kann.

Abbildung 6: Metriken des trainierten Modells werden in der BigQuery UI dargestellt.

Wir werden hier nicht im Detail auf die Iteration eingehen und uns an den naiven Ansatz mit Standardparametern halten. Es gäbe zwei verbesserungswürdige Bereiche:

  1. Unser Weg zur Normalisierung der Sitzungsdauer könnte verbessert werden, indem wir die Daten genauer untersuchen und vielleicht auch andere Faktoren berücksichtigen, z. B. die Länge des betrachteten Artikels. 
  2. Ein Hyperparameter-Tuning (Regularisierung und Anzahl Faktoren) würde die Ergebnisse sicherlich weiter verbessern, auch wenn es schwer zu sagen ist, wie sehr.

Im Allgemeinen sind wir zufrieden, dass das Modell konvergiert ist und die Metriken nicht komplett unrealistisch aussehen („Mean average Precision“ sollte in [0,1] und „Normalized discounted cumulative gain“ in [0,100] liegen, wobei größer gleich besser gilt).

Batch-Prädiktion

Die Batch-Prädiktion kann via SQL durchgeführt werden (siehe Codesnippet 2). Beispielsweise gibt folgende SQL-Query nach nur wenigen Sekunden eine Tabelle mit den Top-5-Artikeln (contentId) je visitorId zurück:

1CREATE TABLE 
2  bqml_tutorial.top_5_contentIds_per_visitorId
3AS
4SELECT
5  visitorId,
6  ARRAY_AGG(
7    STRUCT(contentId, predicted_rating_confidence)
8    ORDER BY predicted_rating_confidence DESC
9    LIMIT 5) AS recommendations
10FROM (
11  SELECT *
12  FROM ML.RECOMMEND(
13    MODEL bqml_tutorial.my_implicit_mf_model
14  )
15)
16GROUP BY visitorId

Codesnippet 2: Batch-Prädiktion in SQL

Online-Prädiktion

Um die Online-Prädiktion zu ermöglichen, müssen wir das Modell zunächst aus BigQuery exportieren, und dann in GCP „AI Platform“ importieren.

Das Modell kann einfach über die GUI oder durch ein Skript in den Google Cloud Storage (GCS) exportiert werden (siehe Abbildung 7). Man sieht dann, dass das trainierte Modell ein Tensorflow-Model ist (Abbildung 8).

Abbildung 7: Die “Export Model”-Funktionalität von BQML

Abbildung 8: Das exportierte Modell liegt in einem Standard-Tensorflow-Format vor [14].

Dann muss man folgendem Prozess folgen, um das Modell für Online-Prädiktion zu deployen (Abbilung 9):

Gehe zu AI Platform -> Models -> Create Model -> Create Version -> Link zum Model auf GCS. Anschließend erscheint das Modell auf der GCP AI Platform und kann nach nur wenigen Minuten über einen Endpoint abgefragt werden.

Abbildung 9: Unser Modell liegt nun abholbereit auf einem Endpoint. Wir haben für das Deployment die Option „Autoscaling“ ausgewählt, d. h. es sollte theoretisch selbst eine stark nach oben schwankende Anzahl Requests bedienen können.

Reservierungen für BigQuery Slots

Wir weisen darauf hin, dass für das Training von BQML-Matrixfaktorisierung sogenannte “BigQuery Slots” reserviert werden müssen [15]. Die kleinste buchbare Einheit sind 100 Slots (Stand Juni 2021), die pro Stunde in Summe 4 Euro kosten. Man kann diese Slots aber sekündlich ordern und abbestellen. Es entsteht jedoch ein Overhead, die Nutzung und Buchung der Slots gewissenhaft zu monitoren, damit keine unnötigen Kosten entstehen. 

Qualität

Insbesondere bei Recommendation-Systemen sind das „Kaltstartverhalten“ und die Variation in den Recommendations Eigenschaften, auf die man achten sollte.

„Kaltstart

Das Kaltstart-Problem scheint für uns zufriedenstellend gelöst. Wir können frei erfundene visitorIds in das Modell geben, es kommen die vom Modell gefundenen Standard-Recommendations zurück. Neue Nutzer können also problemlos mit Recommendations versorgt werden. Obwohl es schwierig ist, zu einer endgültigen Schlussfolgerung zu kommen, erscheinen uns die Ergebnisse vernünftig. Die Top Ten der Standardempfehlungen kombinieren populäre Artikel mit anderen, was darauf hinweist, dass das Modell sowohl die allgemeine Popularität als auch die durchschnittlichen Präferenzen der Benutzer erfolgreich berücksichtigt.

Variation in den Recommendations  

Wir sind auch mit der Variation zwischen den Empfehlungen für bekannte Benutzer zufrieden. Beispielsweise drehen sich die Empfehlungen für einige Benutzer um Bildung, während andere Nachrichten über Prominente erhalten. Dies deutet darauf hin, dass unser Out-of-the-box-Modell in der Lage war, Cluster von Präferenzen innerhalb der Webseitenbesucher zu erkennen und in passende Empfehlungen umzusetzen.

Alternative und ergänzende Services

Die vollständig gemanagte „Recommendations AI“ [16] kann stattdessen als Alternative genutzt werden. Mehr Freiheit, aber auch mehr Aufwand würde es bedeuten, Googles Open-Source-Framework “TFX” (TensorFlow eXtended) [17] für „ML Production Pipelines“ zu nutzen. Zum Zeitpunkt der Erstellung dieses Artikels bietet TFX keine Matrixfaktorisierung an, aber es enthält alle Bausteine, um dies zu erreichen. Es kodiert die „Best Practices“ für Machine Learning Pipelines von Google. 

Ergänzend zu BQML bietet das GCP-Ökosystem Kubeflow [18] als Pipeline-Orchestrator für maschinelles Lernen an. Es kann BQML-Pipelines planen und daneben beliebige Pipelines hosten, auch viel mehr kundenspezifische ML-Lösungen oder TFX Pipelines. 

Fazit

In unserem Beispiel waren die Daten direkt in BigQuery zugänglich. Wie schnell die Daten für den gewünschten Use Case in BigQuery verfügbar sind, hängt jedoch von vielen Faktoren ab (z. B.langwierige unternehmensinterne Prozesse). Wir haben folgendes festgestellt:

Wie schnell können wir das Recommendation System zum Laufen bringen?

Unser erstes Modell war nach etwa einer Stunde für die Auswertung bereit, einschließlich Diskussionen über den besten Cut-off-Wert und die Einrichtung von Slots für die BigQuery-Berechnungen.

Wie einfach ist es, die Ergebnisse zu verbessern, d. h. wie bequem sind Iterationen?

Iterationen mit anderen Hyperparametern würden genauso schnell funktionieren wie das Einzeltraining. 

Wie viel Arbeit ist erforderlich, um die Ergebnisse in ein Produkt oder eine Dienstleistung zu integrieren?

Nach unserem eintägigen Test könnten wir bereits zwei Produkte zur Verprobung ausliefern:

  1. Ein Analysetool für die hauseigene Analyseabteilung. Einzige Voraussetzung ist, dass der Nutzer SQL beherrscht. 
  2. Unser durch AI Platform zur Verfügung gestellter Endpoint könnte jetzt durch andere Services konsumiert werden (wie z.B. eine Website). 

Aus unserer Sicht sind Dienste wie BigQuery ML ein großer Schritt zur Kommoditisierung und Kommerzialisierung von Machine Learning. Darüber hinaus ermöglichen sie eine hohe Entwicklungs- und Integrationsgeschwindigkeit. Uns hat der Service überzeugt. Der tatsächliche Arbeitsablauf hat unsere Erwartungen in punkto Geschwindigkeit und Benutzerfreundlichkeit sogar übertroffen.

Referenzen

[1]  „Hidden Technical Debt in Machine Learning Systems – NIPS ….“ https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf . Accessed 27 Jun. 2020.

[2] „Introduction to BigQuery ML | Google Cloud.“ . Accessed 27 Jun. 2020.

[3] „Wie man Data-Science-Projekte nicht in die PoC-Sackgasse ….“ 27 Mar. 2020, https://blog.codecentric.de/2020/03/wie-man-data-science-projekte-nicht-in-die-poc-sackgasse-manoevriert/ . Accessed 27 Jun. 2020.

[4] „Data Science in der Praxis: Häufige Fehler und Vorgehen – Blog.“ 29 Aug. 2019, https://blog.codecentric.de/2019/08/data-science-in-der-praxis-haeufige-fehler-und-vorgehen/ . Accessed 27 Jun. 2020.

[5]  „Machine learning: Moving from experiments to production – Blog.“ 19 Mar. 2019, https://blog.codecentric.de/en/2019/03/machine-learning-experiments-production/ . Accessed 27 Jun. 2020.

[6]  „BigQuery – Google Cloud.“ https://cloud.google.com/bigquery . Accessed 27 Jun. 2020.

[7] „REST Resource: models | BigQuery | Google Cloud.“ https://cloud.google.com/bigquery/docs/reference/rest/v2/models . Accessed 27 Jun. 2020.

[8]  „Exporting models | BigQuery ML | Google Cloud.“ https://cloud.google.com/bigquery-ml/docs/exporting-models . Accessed 27 Jun. 2020.

[9] „Building a Recommendation System in TensorFlow: Overview ….“ https://cloud.google.com/solutions/machine-learning/recommendation-system-tensorflow-overview . Accessed 27 Jun. 2020.

[10]  „Exporting a BigQuery ML model for online prediction | Google ….“ https://cloud.google.com/bigquery-ml/docs/export-model-tutorial . Accessed 27 Jun. 2020.

[11] „Using BigQuery ML to make recommendations from Google ….“ https://cloud.google.com/bigquery-ml/docs/bigqueryml-mf-implicit-tutorial . Accessed 27 Jun. 2020.

[12] „The ML.EVALUATE function | BigQuery ML | Google Cloud.“ https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-evaluate . Accessed 27 Jun. 2020.

[13]  „Measuring recommendation performance – Google Cloud.“ https://cloud.google.com/recommendations-ai/docs/recommender . Accessed 27 Jun. 2020.

[14] „Module: tf.saved_model | TensorFlow Core v2.2.0.“ https://www.tensorflow.org/api_docs/python/tf/saved_model . Accessed 28 Jun. 2020.

[15]  „Using BigQuery Flex Slots to run machine learning workloads ….“ 17 May. 2020, https://medium.com/google-cloud/using-bigquery-flex-slots-to-run-machine-learning-workloads-more-efficiently-7fc7f400f7a7 . Accessed 28 Jun. 2020.

[16] „Recommendations AI – Google Cloud.“ https://cloud.google.com/recommendations . Accessed 28 Jun. 2020.

[17]  „TensorFlow Extended (TFX) | ML Production Pipelines.“ https://www.tensorflow.org/tfx . Accessed 27 Jun. 2020.

[18]  „Kubeflow.“ https://www.kubeflow.org/ . Accessed 27 Jun. 2020.

Beitrag teilen

Gefällt mir

3

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen.

Wir helfen deinem Unternehmen.

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.