Empfehlungssystem in TensorFlow erstellen: Überblick

Dieser Artikel gibt einen Überblick über eine mehrteilige Reihe von Anleitungen, die Ihnen zeigen, wie Sie ein Empfehlungssystem mit TensorFlow und AI Platform auf der Google Cloud Platform (GCP) implementieren.

Dieser Überblick enthält Folgendes:

  • Theorie von Empfehlungssystemen basierend auf Matrixfaktorisierung
  • WALS-Algorithmus (Algorithmus der gewichteten alternierenden kleinsten Quadrate) für die Matrixfaktorisierung
  • Überblick über eine Reihe von Schritt-für-Schritt-Anleitungen zum Implementieren eines Empfehlungssystems auf der GCP

Das in den Anleitungen angewandte Empfehlungssystem verwendet den WALS-Algorithmus, also den Algorithmus der gewichteten alternierenden kleinsten Quadrate. Der WALS-Algorithmus ist im Paket contrib.factorization der TensorFlow-Codebasis enthalten. Er wird verwendet, um eine umfangreiche Matrix von Nutzer- und Elementbewertungen zu faktorisieren.

Anleitungen dieser Reihe

Dieser Überblick bezieht sich auf folgende Anleitungen:

Hintergrundtheorie von Empfehlungen

In diesem Artikel wird die Hintergrundtheorie des auf Matrixfaktorisierung basierenden kollaborativen Filterns beschrieben, das auf Empfehlungssysteme angewendet wird. Die folgenden Themen werden ausführlich behandelt (inklusive Links zu weiteren Informationsquellen):

  • Kollaboratives Filtern: Was ist kollaboratives Filtern und wie können Sie daraus gewonnene Erkenntnisse nutzen?
  • Matrixfaktorisierung: Was ist eine Bewertungsmatrix, was sind latente Faktoren und wie können Sie die Bewertungsmatrix mathematisch derart transformieren, dass diese berücksichtigt werden?
  • WALS-Methode zur Matrixfaktorisierung: Wie wird die Matrixfaktorisierung mit der WALS-Methode durchgeführt?

Kollaboratives Filtern für Empfehlungssysteme

Das kollaborative Filtern ist eine leistungsfähige Methode, Empfehlungen für Nutzer zu generieren. Beim kollaborativen Filtern werden Empfehlungen ausschließlich auf Basis des beobachteten Nutzerverhaltens gegeben. Es ist kein Zugriff auf Profildaten oder Inhalte erforderlich.

Diese Technik basiert auf den folgenden Beobachtungen:

  • Nutzer, die auf ähnliche Weise mit Elementen interagieren (z. B. dieselben Produkte kaufen oder dieselben Artikel ansehen), teilen eine oder mehrere verborgene Präferenzen.
  • Nutzer mit geteilten Präferenzen reagieren wahrscheinlich in gleicher Weise auf dieselben Elemente.

Durch das Zugrundelegen dieser wesentlichen Beobachtungen kann das Empfehlungssystem funktionieren, ohne die geteilten Nutzerpräferenzen genau zu bestimmen. Es genügt, dass solche Präferenzen vorhanden und aussagekräftig sind. Die Grundannahme ist, dass ein ähnliches Nutzerverhalten ähnliche grundlegende Präferenzen widerspiegelt. Daher kann ein Empfehlungssystem passende Vorschläge machen.

Angenommen, Nutzer 1 hat sich die Elemente A, B, C, D, E und F angesehen. Nutzer 2 hat sich die Elemente A, B, D, E und F, aber nicht C angesehen. Da die beiden Nutzer sich jeweils mindestens fünf der gleichen sechs Elemente angesehen haben, ist es wahrscheinlich, dass sie einige grundlegende Präferenzen teilen. Nutzer 1 fand an Element C Gefallen. Deshalb ist es wahrscheinlich, dass dieses auch Nutzer 2 gefallen würde, wenn es ihm bekannt wäre. Hier kommt das Empfehlungssystem ins Spiel: Nutzer 2 wird über das Element C informiert; somit wird sein Interesse geweckt.

Matrixfaktorisierung für kollaboratives Filtern

Das Problem der kollaborativen Filterung kann mithilfe der Matrixfaktorisierung gelöst werden. Angenommen, Sie haben eine Matrix, in der Nutzer-IDs und die Interaktionen der Nutzer mit Ihren Produkten dokumentiert sind. Jede Zeile entspricht einem einzelnen Nutzer und jede Spalte einem Element. Bei dem Element kann es sich um ein Produkt aus einem Katalog, einen Artikel oder ein Video handeln. Mit jedem Matrixeintrag wird die Bewertung oder Präferenz eines Nutzers für ein einzelnes Element festgehalten. Die Bewertung kann explizit oder implizit sein. Eine explizite Bewertung wird direkt aus Nutzerfeedback generiert, während eine implizite Bewertung anhand von Nutzerkäufen oder der Interaktionsdauer bezogen auf einen Artikel oder ein Video generiert wird.

Wenn ein Nutzer ein Element nie bewertet oder nie implizites Interesse daran gezeigt hat, ist der Matrixeintrag Null. Abbildung 1 zeigt eine Darstellung einer Bewertungsmatrix MovieLens.

MovieLens-Bewertungsmatrix
Abbildung 1: Die MovieLens-Bewertungsmatrix

Die Bewertungen im Dataset MovieLens reichen von 1 bis 5. Leere Bewertungseinträge haben den Wert 0, was bedeutet, dass ein bestimmter Nutzer das Element nicht bewertet hat.

Matrixfaktorisierungsmethode definieren

Eine Bewertungsmatrix besteht aus einer Matrix R, wobei die Einträge \(r_{ij}\) Bewertungen des Nutzers \(i\) für das Element \(j\) sind. Die entsprechenden Matrizen vieler Internetanwendungen sind sehr groß, da es um Millionen von Nutzern und Millionen von verschiedenen Elementen geht. Außerdem sind diese dünn besetzt. Dies bedeutet, dass jeder Nutzer typischerweise nur eine kleine Anzahl aller Elemente bewertet, aufgerufen oder gekauft hat. Die überwiegende Mehrheit der Matrixeinträge, oft mehr als 99 %, hat den Wert null.

Bei der Matrixfaktorisierungsmethode wird davon ausgegangen, dass es eine Reihe von Attributen gibt, die allen Elementen gemeinsam sind. Die Elemente unterscheiden sich dabei in dem Grad voneinander, zu dem sie diese Attribute aufweisen. Darüber hinaus wird bei der Methode angenommen, dass jeder Nutzer unabhängig von den Elementen für jedes dieser Attribute einen eigenen Aufweisungsgrad hat. Auf diese Weise kann die Elementbewertung eines Nutzers approximiert werden. Dazu werden die Aufweisungsgrade des Nutzers für die einzelnen Attribute summiert; dabei wird nach dem Grad gewichtet, zu dem das Element das jeweilige Attribut aufweist. Diese Attribute werden manchmal als verborgene oder latente Faktoren bezeichnet.

Auf intuitiver Ebene leuchtet es schnell ein, dass diese hypothetischen latenten Faktoren tatsächlich existieren. Bei Filmen ist zum Beispiel klar, dass viele Nutzer bestimmte Genres, Schauspieler oder Regisseure bevorzugen. Diese Kategorien stellen latente Faktoren dar, die zwar offensichtlich, aber dennoch von großem Nutzen sind. Genrevorlieben lassen sich zum Beispiel anhand der Filme erkennen, die Nutzer tendenziell mögen. Im Umkehrschluss mögen Menschen mit ähnlichen Genrepräferenzen vermutlich ähnliche Filme. Der Ansatz der Matrixfaktorisierung erweist sich für das kollaborative Filtern hauptsächlich deswegen als so leistungsfähig, da die Anzahl der Genres, Schauspieler oder anderer Kategorien, aus denen sich die Gesamtheit der Präferenzen eines Nutzers zusammensetzt, nicht bekannt sein muss. Es wird einfach angenommen, dass es eine beliebige Anzahl von ihnen gibt.

Matrix zur Berücksichtigung latenter Faktoren transformieren

So übersetzen Sie die Existenz latenter Faktoren in die Bewertungsmatrix: Wählen Sie für eine Gruppe von Nutzern U der Größe u und Elementen I der Größe i eine beliebige Zahl k an latenten Faktoren aus und faktorisieren Sie die große Matrix R in die zwei deutlich kleineren Matrizen X (den "Zeilenfaktor") und Y (den "Spaltenfaktor"). Matrix X hat die Dimension u × k und Y hat die Dimension k × i. Dies ist in Abbildung 2 dargestellt.

Approximieren der Bewertungsmatrix mit Zeilen- und Spaltenfaktoren
Abbildung 2: Approximieren der Bewertungsmatrix mit Zeilen- und Spaltenfaktoren

In der linearen Algebra wird das als Niedrigrangapproximation bezeichnet. Sie können diesen Vorgang als Komprimierung der Informationen aus der dünn besetzten Matrix in R in die viel niedrigeren dimensionalen Bereiche u × k und k × i ansehen. Die Matrix R', die erhalten wird, wenn die Matrizen mit niedrigem Rang X und Y multipliziert werden, stellt eine Approximation von R dar.

Jeder Nutzer wird in diesem k-dimensionalen Bereich durch einen Vektor dargestellt und jede Zeile \( \mathbf{x}_{u}\) in X entspricht der Stärke der Nutzerpräferenzen für diese k-Faktoren. Ebenso hat jedes Element, das durch einen Vektor in diesem k-dimensionalen Bereich dargestellt wird, eine Spalte \(\mathbf{y}_{i}\) in Y, die dem Ausdruck des Elements derselben k-Faktoren entspricht.

Die Bewertung von Nutzer u für das Element i ermitteln Sie mit dem Skalarprodukt der beiden Vektoren:

$$ r_{ui} = \mathbf{x}^{T}_{u} \cdot \mathbf{y}_{i} $$

Dieses Produkt ist eine reelle Zahl \(r_{ui}\) und stellt eine Approximation der Bewertung des Nutzers u für das Element i dar. Diese wird im Bereich des maschinellen Lernens auch als Vorhersage bezeichnet. Das soll Abbildung 3 verdeutlichen.

Berechnen einer vorhergesagten Bewertung aus den Zeilen- und Spaltenfaktoren
Abbildung 3: Berechnen einer vorhergesagten Bewertung aus den Zeilen- und Spaltenfaktoren

Sie können eine Verlustfunktion definieren, mit der die Genauigkeit der Approximation folgendermaßen bestimmt wird:

$$ L = \sum_{u,i}(r_{ui} - \mathbf{x}^{T}_{u} \cdot \mathbf{y}_{i})^{2} $$

Bei dieser Gleichung wird so vorgegangen: Für alle Nutzer und Elemente wird die quadrierte Differenz zwischen der approximierten Bewertung \(\mathbf{x}^T_{u} \cdot \mathbf{y}_{i}\) und der tatsächlichen Bewertung des Training-Datasets \(r_{ui}\) aufsummiert.

Es ist üblich, solch einer Verlustfunktion Regularisierungsbegriffe hinzuzufügen, um Überanpassung zu vermeiden. Fügen Sie L2-Regularisierungsbegriffe für Zeilen- und Spaltenfaktoren hinzu:

$$ L = \sum_{u,i}(r_{ui} - \mathbf{x}^{T}_{u} \cdot \mathbf{y}_{i})^{2} + \lambda\sum_{u}\left\lVert\mathbf{x}_{u}\right\rVert^{2} + \lambda\sum_{i}\left\lVert\mathbf{y}_{i}\right\rVert^{2} $$

\(\lambda\) ist hier eine Regularisierungskonstante, einer der Hyperparameter des Modells, die in Teil 2 der Anleitungsreihe beschrieben sind.

WALS-Methode der Matrixfaktorisierung

Dieser Abschnitt behandelt zwei Methoden der Matrixfaktorisierung.

Methode der alternierenden kleinsten Quadrate

Die Methode der alternierenden kleinsten Quadrate der Matrixfaktorisierung ist eine iterative Methode zum Bestimmen der optimalen Faktoren X und Y, die sich R am meisten annähern. Bei jeder Iteration wird einer der Zeilen- oder Spaltenfaktoren konstant gehalten. Der andere wird durch die Minimierung der Verlustfunktion in Bezug auf den anderen Faktor berechnet.

Beginnen Sie zuerst mit den Zeilenfaktoren:

  1. Setzen Sie die Spaltenfaktoren auf konstante Werte.
  2. Leiten Sie die Verlustfunktion nach den Zeilenfaktoren ab.
  3. Setzen Sie die Gleichung gleich null.
$$ \frac{\partial L}{\partial \mathbf{x}_{u}} = -2\sum_{i}(r_{ui} - \mathbf{x}^{T}_{u} \cdot \mathbf{y}_{i})\mathbf{y}^{T}_{i} + 2\lambda\mathbf{x}^{T}_{u} $$
$$ 0 = -(\mathbf{r}_{u} - \mathbf{x}^{T}_{u}Y^{T})Y + \lambda\mathbf{x}^{T}_{u} $$
$$ \mathbf{x}^{T}_{u}(Y^{T}Y + \lambda{I}) = \mathbf{r}_{u}Y $$
$$ \mathbf{x}^{T}_{u} = \mathbf{r}_{u}Y(Y^{T}Y + \lambda{I})^{-1} $$

Die Iteration wird fortgesetzt, wobei die gelösten Zeilenfaktoren konstant gehalten werden und die analoge Gleichung nach den Spaltenfaktoren aufgelöst wird. Der iterative Prozess wird bis zur Konvergenz abwechselnd für Zeilen- und Spaltenfaktoren wiederholt. Diese tritt typischerweise innerhalb einer kleinen Anzahl (< 20) von Iterationen auf. Das trifft sogar auf sehr große Matrizen zu, deren Anzahl von Zeilen oder Spalten sich im zweistelligen Millionenbereich bewegt.

Methode der gewichteten alternierenden kleinsten Quadrate (WALS-Methode)

Bei der gewichteten Version des Algorithmus werden unterschiedliche Gewichtungen für die Nulleinträge (die unbeobachteten Einträge) und die Nicht-Null-Einträge der Matrix eingeführt:

$$ L^{w} = \mathbf{W} \cdot \sum_{u,i}(r_{ui} - \mathbf{x}^{T}_{u} \cdot \mathbf{y}_{i})^{2} $$

Bei dieser Gleichung gilt:

\(w_{ui} = \omega_{0}\) steht für Nulleinträge (unbeobachtete Einträge) in der Bewertungsmatrix und
\(w_{ui} = \omega_{0} + f(c_{i})\) steht für beobachtete Einträge, wobei
\(c_{i} = \sum_{u,i}1 \text{ if } r_{ui} > 0\) die Summe der Anzahl der Nicht-Null-Einträge in Spalte i ist.

Die Gewichtung wird anhand der Summe der Nicht-Null-Einträge einer Zeile skaliert, um die Gewichtung für Nutzer zu normieren, die eine andere Anzahl von Elementen bewertet haben.

Durch diese Art der Gewichtung wird das Modell der Nutzerpräferenzen flexibler und liefert bessere empirische Ergebnisse, als das bei der ungewichteten Version des Algorithmus der Fall wäre. Weitere Informationen finden Sie im wissenschaftlichen Artikel Collaborative Filtering for Implicit Feedback Datasets (Kollaboratives Filtern bei Datasets mit implizitem Feedback). Die Funktion \(f\) variiert je nach Dataset und abhängig davon, ob die Bewertungen explizit oder implizit sind.

Das Dataset MovieLens enthält explizite Bewertungen. In diesem Fall ist für \(f\) eine Funktion, die die beobachteten Einträge linear gewichtet, die bessere Wahl:

\(f = \omega_{k}c_{i}\) , wobei \(\omega_{k}\) die Gewichtung der beobachteten Einträge ist

Bei impliziten Bewertungen in Bezug auf dynamische Ereignisse, bei denen jede Bewertung widerspiegelt, wie oft ein Video angesehen, ein Artikel gelesen oder eine Webseite aufgerufen wurde, kann die Bewertung an sich aufgrund des Nutzerverhaltens eine Exponentialverteilung aufweisen. Es wird zu vielen Bewertungen mit niedrigen Werten kommen, wenn Nutzer auf eine Seite oder ein Video klicken und die Seite dann schnell wieder verlassen. Es wird zu einer geringeren Anzahl hoher impliziter Bewertungen kommen, wenn Nutzer einen Artikel ganz lesen, ein Video ganz ansehen oder eine bestimmte termingebundene TV-Sendung mehrere Male ansehen. In diesem Fall eignet sich eine Funktion \(f\), die die beobachteten Bewertungen so gewichtet, dass dieser Verteilung entsprochen wird:

\(f = \left(\frac{1}{c_{i}}\right)^{e}\) wobei \(e\) der Exponent der Merkmalsgewichtung ist.

WALS im Vergleich zu anderen Techniken

Für das kollaborative Filtern werden viele Matrix-Faktorisierungsverfahren angewendet, einschließlich der Singulärwertzerlegung und des Gradientenabstiegs aus der Stochastik. In einigen Fällen liefern diese Techniken bessere Approximation mit reduziertem Rang als WALS. In diesem Artikel werden die Stärken und Schwächen verschiedener kollaborativer Filtermethoden nicht verglichen. Die folgenden Vorteile von WALS sind jedoch erwähnenswert:

  • Aufgrund der verwendeten Gewichtungen eignet sich WALS besonders bei impliziten Bewertungen, kann aber auch für Datasets mit expliziten Bewertungen wie MovieLens angewendet werden.
  • WALS bietet algorithmische Optimierungen, mit denen sich Gewichtungen einfach integrieren und Aktualisierungen von Zeilen- und Spaltenfaktoren effizient berechnen lassen. Weitere Informationen finden Sie im oben bereits erwähnten Artikel Collaborative Filtering for Implicit Feedback Datasets (Kollaboratives Filtern bei Datasets mit implizitem Feedback). Diese Optimierungen sind in die WALS-TensorFlow-Codebasis integriert.
  • Es ist relativ einfach, eine verteilte Version des Algorithmus zu erstellen. Verteilte Versionen können sehr große Matrizen mit bis zu mehreren hundert Millionen Zeilen verarbeiten. Die Beschreibung der verteilten Version von WALS würde jedoch ebenso den Rahmen dieses Artikels sprengen.

Weitere Informationen

Sie können mit dem Durcharbeiten der Anleitungen der folgendenr Reihe beginnen: