🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Wie funktionieren Empfehlungssysteme?

Wie funktionieren Empfehlungssysteme?

  • Scenarios
December 01, 2020
Shiyu Chen

Empfehlungssysteme werden von Algorithmen angetrieben, deren bescheidene Anfänge darin bestehen, Menschen dabei zu helfen, unerwünschte E-Mails zu sichten. Im Jahr 1990 verwendete der Erfinder Doug Terry einen Algorithmus zur kollaborativen Filterung, um erwünschte E-Mails von Junk-Mails zu trennen. Durch einfaches "Mögen" oder "Hassen" einer E-Mail in Zusammenarbeit mit anderen, die dasselbe mit ähnlichen E-Mail-Inhalten taten, konnten Benutzer Computer schnell darauf trainieren, zu bestimmen, was in den Posteingang eines Benutzers gelangen sollte und was in den Junk-Mail-Ordner verschoben werden sollte.

Im Allgemeinen sind Empfehlungssysteme Algorithmen, die den Benutzern relevante Vorschläge machen. Dabei kann es sich um Vorschläge für Filme, Bücher, Produkte oder andere Dinge handeln, je nach Szenario oder Branche. Diese Algorithmen sind allgegenwärtig und beeinflussen die Inhalte, die wir konsumieren, und die Produkte, die wir von großen Technologieunternehmen wie Youtube, Amazon, Netflix und vielen anderen kaufen.

Gut konzipierte Empfehlungssysteme können wesentliche Umsatzquellen, Kostensenkungen und Wettbewerbsvorteile darstellen. Dank Open-Source-Technologie und sinkender Rechenkosten waren maßgeschneiderte Empfehlungssysteme noch nie so zugänglich wie heute. Dieser Artikel erklärt, wie man Milvus, eine Open-Source-Vektordatenbank, PinSage, ein Graph Convolutional Neural Network (GCN), Deep Graph Library (DGL), ein skalierbares Python-Paket für Deep Learning auf Graphen, und MovieLens-Datensätze verwendet, um ein graphbasiertes Empfehlungssystem aufzubauen.

Springe zu:

Wie funktionieren Empfehlungssysteme?

Es gibt zwei gängige Ansätze für die Entwicklung von Empfehlungssystemen: kollaboratives Filtern und inhaltsbasiertes Filtern. Die meisten Entwickler verwenden eine oder beide Methoden, und obwohl Empfehlungssysteme in ihrer Komplexität und ihrem Aufbau variieren können, enthalten sie in der Regel drei Kernelemente:

  1. Benutzermodell: Empfehlungssysteme erfordern die Modellierung von Benutzereigenschaften, Vorlieben und Bedürfnissen. Viele Empfehlungssysteme basieren ihre Vorschläge auf impliziten oder expliziten Eingaben der Benutzer auf Objektebene.
  2. Objektmodell: Empfehlungssysteme modellieren auch Objekte, um auf der Grundlage von Benutzerporträts Objektempfehlungen auszusprechen.
  3. Empfehlungsalgorithmus: Die Kernkomponente eines jeden Empfehlungssystems ist der Algorithmus, der die Empfehlungen ausspricht. Zu den häufig verwendeten Algorithmen gehören kollaboratives Filtern, implizite semantische Modellierung, graphbasierte Modellierung, kombinierte Empfehlungen und andere.

Empfehlungssysteme, die sich auf kollaboratives Filtern stützen, erstellen ein Modell auf der Grundlage des bisherigen Benutzerverhaltens (einschließlich des Verhaltens ähnlicher Benutzer), um vorherzusagen, woran ein Benutzer interessiert sein könnte. Systeme, die auf inhaltsbasierter Filterung beruhen, verwenden diskrete, vordefinierte Tags auf der Grundlage von Artikelmerkmalen, um ähnliche Artikel zu empfehlen.

Ein Beispiel für kollaboratives Filtern wäre ein personalisierter Radiosender auf Spotify, der auf der Hörhistorie, den Interessen, der Musiksammlung und mehr eines Nutzers basiert. Der Sender spielt Musik, die der Nutzer nicht gespeichert oder anderweitig sein Interesse bekundet hat, die aber andere Nutzer mit ähnlichem Geschmack oft gehört haben. Ein Beispiel für ein inhaltsbasiertes Filtersystem wäre ein Radiosender, der auf einem bestimmten Lied oder Künstler basiert und anhand von Attributen der Eingabe ähnliche Musik empfiehlt.

Werkzeuge für den Aufbau eines Empfehlungssystems

In diesem Beispiel ist der Aufbau eines graphbasierten Empfehlungssystems von Grund auf von den folgenden Tools abhängig:

Pinsage: Ein graphisches Faltungsnetzwerk

PinSage ist ein Random-Walk-Graph-Faltungsnetzwerk, das in der Lage ist, Einbettungen für Knoten in Web-Graphen mit Milliarden von Objekten zu lernen. Das Netzwerk wurde von Pinterest, einem Unternehmen für Online-Pinnwände, entwickelt, um seinen Nutzern thematische visuelle Empfehlungen zu geben.

Pinterest-Nutzer können Inhalte, die sie interessieren, an "Boards" anheften, d. h. an Sammlungen von angehefteten Inhalten. Mit über 478 Millionen monatlich aktiven Nutzern (MAU) und über 240 Milliarden gespeicherten Objekten verfügt das Unternehmen über eine immense Menge an Nutzerdaten, für die es neue Technologien entwickeln muss.

1.png 1.png

PinSage verwendet bipartite Graphen von Pins, um hochwertige Einbettungen von Pins zu generieren, die dazu verwendet werden, Nutzern visuell ähnliche Inhalte zu empfehlen. Im Gegensatz zu herkömmlichen GCN-Algorithmen, die Faltungen auf den Merkmalsmatrizen und dem gesamten Graphen durchführen, nimmt PinSage Stichproben der nahegelegenen Knoten/Pins und führt effizientere lokale Faltungen durch dynamische Konstruktion von Rechengraphen durch.

Die Durchführung von Faltungen in der gesamten Nachbarschaft eines Knotens führt zu einem riesigen Berechnungsgraphen. Um den Ressourcenbedarf zu reduzieren, aktualisieren herkömmliche GCN-Algorithmen die Darstellung eines Knotens, indem sie Informationen aus seiner k-Hop-Nachbarschaft zusammenfassen. PinSage simuliert Random-Walk, um häufig besuchte Inhalte als Schlüssel-Nachbarschaft festzulegen, und konstruiert dann eine darauf basierende Faltung.

Da sich die k-hop-Nachbarschaften häufig überschneiden, führt die lokale Faltung auf den Knoten zu wiederholten Berechnungen. Um dies zu vermeiden, bildet PinSage in jedem Aggregationsschritt alle Knoten ohne wiederholte Berechnung ab, verknüpft sie dann mit den entsprechenden Knoten der oberen Ebene und ruft schließlich die Einbettungen der Knoten der oberen Ebene ab.

Deep Graph Bibliothek: Ein skalierbares Python-Paket für Deep Learning auf Graphen

dgl-framework-building-graph-based-recommender-milvus.png dgl-framework-building-graph-based-recommender-milvus.png

Deep Graph Library (DGL) ist ein Python-Paket, das für den Aufbau graphbasierter neuronaler Netzwerkmodelle auf bestehenden Deep-Learning-Frameworks (z. B. PyTorch, MXNet, Gluon und andere) entwickelt wurde. DGL enthält eine benutzerfreundliche Backend-Schnittstelle, die die Einbindung in Frameworks, die auf Tensoren basieren und die automatische Generierung unterstützen, erleichtert. Der oben erwähnte PinSage-Algorithmus ist für die Verwendung mit DGL und PyTorch optimiert.

how-does-milvus-work.png wie-geht-milvus-arbeit.png

Milvus ist eine Open-Source-Vektordatenbank, die für die Suche nach Vektorähnlichkeiten und Anwendungen der künstlichen Intelligenz (KI) entwickelt wurde. Im Großen und Ganzen funktioniert die Verwendung von Milvus für die Ähnlichkeitssuche wie folgt:

  1. Deep-Learning-Modelle werden verwendet, um unstrukturierte Daten in Merkmalsvektoren umzuwandeln, die in Milvus importiert werden.
  2. Milvus speichert und indiziert die Merkmalsvektoren.
  3. Auf Anfrage sucht Milvus die Vektoren, die einem Eingabevektor am ähnlichsten sind, und gibt sie zurück.

Aufbau eines graphbasierten Empfehlungssystems mit Milvus

beike-intelligent-house-platform-diagram.jpg beike-intelligent-house-platform-diagram.jpg

3-building-graph-based-recommender-system.png 3-aufbau-graphenbasiertes-empfehlungs-system.png

Der Aufbau eines graphenbasierten Empfehlungssystems mit Milvus umfasst die folgenden Schritte:

Schritt 1: Daten vorverarbeiten

Bei der Datenvorverarbeitung werden die Rohdaten in ein leichter verständliches Format gebracht. In diesem Beispiel werden die offenen Datensätze MovieLens[5] (m1-1m) verwendet, die 1.000.000 Bewertungen von 4.000 Filmen enthalten, die von 6.000 Benutzern beigetragen wurden. Diese Daten wurden von GroupLens gesammelt und enthalten Filmbeschreibungen, Filmbewertungen und Benutzereigenschaften.

Beachten Sie, dass die in diesem Beispiel verwendeten MovieLens-Datensätze nur eine minimale Datenbereinigung oder -organisation erfordern. Wenn Sie jedoch andere Datensätze verwenden, können Ihre Erfahrungen davon abweichen.

Um mit dem Aufbau eines Empfehlungssystems zu beginnen, erstellen Sie einen bipartiten Graphen für Klassifizierungszwecke unter Verwendung historischer Benutzer-Film-Daten aus dem MovieLens-Datensatz.

graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()

Schritt 2: Modell mit PinSage trainieren

Die mit dem PinSage-Modell erzeugten Einbettungsvektoren von Pins sind Merkmalsvektoren der erfassten Filminformationen. Erstellen Sie ein PinSage-Modell, das auf dem bipartiten Graphen g und den benutzerdefinierten Film-Merkmalsvektor-Dimensionen (standardmäßig 256-d) basiert. Dann trainieren Sie das Modell mit PyTorch, um die h_item Einbettungen von 4.000 Filmen zu erhalten.

# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
   for i in range(len(blocks)):
   blocks[i] = blocks[i].to(device)
   h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)

Schritt 3: Laden der Daten

Laden Sie die vom PinSage-Modell generierten Filmeinbettungen h_item in Milvus, das die entsprechenden IDs zurückgibt. Importieren Sie die IDs und die entsprechenden Filminformationen in MySQL.

# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)

Ermitteln Sie die entsprechenden Einbettungen in Milvus auf der Grundlage der Film-IDs und führen Sie dann mit Milvus eine Ähnlichkeitssuche mit diesen Einbettungen durch. Anschließend identifizieren Sie die entsprechenden Filminformationen in einer MySQL-Datenbank.

# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()

Schritt 5: Empfehlungen abrufen

Das System wird nun die Filme empfehlen, die den Suchanfragen der Benutzer am ähnlichsten sind. Dies ist der allgemeine Arbeitsablauf für den Aufbau eines Empfehlungssystems. Um Empfehlungssysteme und andere KI-Anwendungen schnell zu testen und einzusetzen, sollten Sie das Milvus-Bootcamp ausprobieren.

Milvus kann mehr als nur Empfehlungssysteme betreiben

Milvus ist ein leistungsstarkes Tool, das eine Vielzahl von Anwendungen für künstliche Intelligenz und Vektorähnlichkeitssuche unterstützt. Wenn Sie mehr über das Projekt erfahren möchten, lesen Sie die folgenden Ressourcen:

  • Lesen Sie unseren Blog.
  • Interagieren Sie mit unserer Open-Source-Community auf Slack.
  • Nutzen Sie die beliebteste Vektordatenbank der Welt auf GitHub oder tragen Sie zu ihr bei.

Like the article? Spread the word

Weiterlesen