
1️⃣st Place bei Sigir ECOM Challenge 2020
2️⃣nd Place und Best Paper Award bei WSDM Booking.com Challenge 2021
2️⃣nd Place bei Twitter Recsys Challenge 2021
3️⃣rd Place bei KDD Cup 2021
Cleora ist eine Gattung von Motten in der Familie Geometridae . Ihr wissenschaftlicher Name leitet Mode.
Cleora ist ein allgemeines Modell für ein effizientes, skalierbares Lernen stabiler und induktiver Einbettungen für heterogene relationale Daten.
Installation
pip install pycleora
Anweisungen erstellen
# prepare python env
pip install maturin
# Install pycleora in current env (meant for development)
maturin develop
# Usage example below. More examples in examples/ folder.
Cleora ist jetzt als Python -Paket pycleora erhältlich. Schlüsselverbesserungen im Vergleich zur vorherigen Version:
tsv -Dateien Grafiken aus Python iterators erstellenNumPyVeränderungen brechen:
complex::reflexive Spalten für Hypergraph -Einbettungen, die von der transienten Entität gruppiert sind, liefert bessere Ergebnisse. from pycleora import SparseMatrix
import numpy as np
import pandas as pd
import random
# Generate example data
customers = [f"Customer_{i}" for i in range(1, 20)]
products = [f"Product_{j}" for j in range(1, 20)]
data = {
"customer": random.choices(customers, k=100),
"product": random.choices(products, k=100),
}
# Create DataFrame
df = pd.DataFrame(data)
# Create hyperedges
customer_products = df.groupby('customer')['product'].apply(list).values
# Convert to Cleora input format
cleora_input = map(lambda x: ' '.join(x), customer_products)
# Create Markov transition matrix for the hypergraph
mat = SparseMatrix.from_iterator(cleora_input, columns='complex::reflexive::product')
# Look at entity ids in the matrix, corresponding to embedding vectors
print(mat.entity_ids)
# ['Product_5', 'Product_3', 'Product_2', 'Product_4', 'Product_1']
# Initialize embedding vectors externally, using text, image, random vectors
# embeddings = ...
# Or use built-in random deterministic initialization
embeddings = mat.initialize_deterministically(1024)
# Perform Markov random walk, then normalize however many times we want
NUM_WALKS = 3 # The optimal number depends on the graph, typically between 3 and 7 yields good results
# lower values tend to capture co-occurrence, higher iterations capture substitutability in a context
for i in range(NUM_WALKS):
# Can propagate with a symmetric matrix as well, but left Markov is a great default
embeddings = mat.left_markov_propagate(embeddings)
# Normalize with L2 norm by default, for the embeddings to reside on a hypersphere. Can use standardization instead.
embeddings /= np.linalg.norm(embeddings, ord=2, axis=-1, keepdims=True)
# We're done, here are our embeddings
for entity, embedding in zip(mat.entity_ids, embeddings):
print(entity, embedding)
# We can now compare our embeddings with dot product (since they are L2 normalized)
print(np.dot(embeddings[0], embeddings[1]))
print(np.dot(embeddings[0], embeddings[2]))
print(np.dot(embeddings[0], embeddings[3]))
F: Was soll ich einbetten?
A: Alle Wesenheiten, die miteinander interagieren, Co-Occur oder können als gemeinsam in einem bestimmten Kontext vorhanden sein. Beispiele können: Produkte in einem Einkaufskorb, Standorte, die von denselben Personen zu ähnlichen Zeiten frequentiert werden, Mitarbeiter, die zusammenarbeiten, chemische Moleküle unter bestimmten Umständen vorhanden, Proteine, die von denselben Bakterien, Wechselwirkungen mit Arzneimitteln, Co-Autoren der gleichen akademischen Papiere erzeugt wurden Unternehmen, die zusammen in denselben LinkedIn -Profilen auftreten.
F: Wie soll ich die Eingabe konstruieren?
A: Was am besten funktioniert, ist die Gruppierung von Entitäten, die in einem ähnlichen Kontext zusammentreten, und das Füttern in weißspace getrennten Linien mit complex::reflexive Reflexivmodifikator ist eine gute Idee. Wenn Sie Produktdaten haben, können Sie die Produkte durch Einkaufskörbe oder von Benutzern gruppieren. Wenn Sie URLs haben, können Sie sie nach Browser -Sitzungen, von (Benutzer, Zeitfenster), gruppieren. Schauen Sie sich das obige Nutzungsbeispiel an. Das Gruppieren von Produkten durch Kunden ist nur eine Möglichkeit.
F: Kann ich Benutzer und Produkte gleichzeitig einbetten, um sie mit Cosinus -Ähnlichkeit zu vergleichen?
A: Nein, dies ist ein methodisch falscher Ansatz, der sich aus veralteten Matrixfaktorisierungsansätzen ergibt. Was Sie tun sollten, ist zuerst gute Produkteinbettungen zu finden und dann Benutzerbettendings aus ihnen zu erstellen. Das Füttern von zwei Spalten, z. B. user product in Cleora, führt zu einer zweigliedrigen Grafik. Ähnliche Produkte liegen nahe beieinander, ähnliche Benutzer sind nahe beieinander, aber Benutzer und Produkte werden nicht unbedingt zueinander ähneln.
F: Welche Einbettungsdimensionalität zu verwenden?
A: Je mehr, desto besser, aber wir arbeiten normalerweise von 1024 bis 4096 . Der Speicher ist billig und Maschinen sind leistungsstark. Sparen Sie also nicht an der Einbettungsgröße.
F: Wie viele Iterationen der Markov -Ausbreitung soll ich verwenden?
A: Hängt davon ab, was Sie erreichen möchten. Niedrige Iterationen (3) tendieren dazu, die Ko-Auftreten-Matrix zu approximieren, während hohe Iterationen (7+) dazu neigen, eine kontextbezogene Ähnlichkeit zu erzielen (denken Sie überspringen, aber viel genauer und schneller).
F: Wie integriere ich externe Informationen, z. B. Metadaten, Bilder, Texte in die Einbettungen?
A: Initialisieren Sie einfach die Einbettungsmatrix mit Ihren eigenen Vektoren, die von einem VIT-Setence-Transformator von einer zufälligen Projektion Ihrer numerischen Merkmale stammen. In diesem Szenario funktioniert eine geringe Anzahl von Markov -Iterationen (1 bis 3) in der Regel am besten.
F: Meine Einbettungen passen nicht in Erinnerung. Was mache ich?
A: Cleora arbeitet unabhängig von Dimensionen. Initialisieren Sie Ihre Einbettungen mit einer geringeren Anzahl von Abmessungen, führen Sie Cleora aus, bestehen auf der Festplatte und wiederholen Sie dann. Sie können Ihre resultierenden Einbettungsvektoren anschließend verkettet, aber denken Sie daran, sie danach zu normalisieren!
F: Gibt es eine minimale Anzahl von Entitätsereignissen?
A: Nein, eine Entität A Co-Occuring nur 1 Mal mit einer anderen Entität B wird eine ordnungsgemäße Einbettung erhalten, dh B wird A am ähnlichsten sein. Der andere Weg A in der nächsten Nachbarn von B hoch eingestuft, was je nach Anwendungsfall wünschenswert sein kann oder auch nicht. Fühlen Sie sich frei, Ihre Eingabe an Cleora zu beschneiden, um niederfrequente Elemente zu beseitigen.
F: Gibt es eine Kantenfälle, in der Cleora scheitern kann?
A: Cleora eignet sich am besten für relativ spärliche Hypergraphen. Wenn alle Ihre Hyperedges eine sehr häufige Einheit X enthalten, z. B. eine Einkaufstasche , wird die Qualität der Einbettungen durch die kürzesten Wege im Zufallsspaziergang abgebaut. Es ist eine gute Praxis, solche Wesenheiten aus dem Hypergraph zu entfernen.
F: Wie kann Cleora gleichzeitig so schnell und genau sein?
A: Nicht negative Probenahme zu verwenden, ist ein großartiger Segen. Durch die Erstellung der (spärlichen) Markov -Übergangsmatrix führt Cleora in einem großen Schritt explizit alle möglichen Zufallswanderungen in einem Hypergraph aus (eine einzelne Matrix -Multiplikation). Das nennen wir eine einzige Iteration . Wir führen 3+ solche Iterationen aus. Dank einer hocheffizienten Implementierung in Rost mit besonderer Sorgfalt für Parallelität, Speicherlayout und Cache -Kohärenz ist es leuchtend schnell. Negative Stichproben oder zufällige Auswahl von zufälligen Spaziergängen führt dazu, viel Lärm einzubringen - Cleora ist frei von diesen Belastungen.
Lesen Sie das Whitepaper "Cleora: Ein einfaches, starkes und skalierbares Diagramm -Einbettungsschema"
Cleora setzt Entitäten in n-dimensionale sphärische Räume ein, die extrem schnelle stabile, iterative Zufallsprojektionen verwenden, was eine beispiellose Leistung und Skalierbarkeit ermöglicht.
Datenarten, die eingebettet werden können, umfassen zum Beispiel:
!!! Haftungsausschluss: Die folgenden Zahlen sind für Cleora 1.x, eine neue Version ist deutlich schneller, müssen jedoch die Benchmarks noch einmal ausführen
Wichtige Wettbewerbsvorteile von Cleora:
Einbettungszeiten - Beispiel:
| Algorithmus | FB -Datensatz | RoadNet -Datensatz | LiveJournal -Datensatz |
| Cleora | 00:00:43 h | 00:21:59 h | 01:31:42 h |
| Pytorch-Biggraph | 00: 04.33 h | 00:31:11 h | 07:10:00 h |
LINK -Vorhersageergebnisse - Beispiel:
| FB -Datensatz | RoadNet -Datensatz | LiveJournal -Datensatz | ||||
| Algorithmus | MRR | Hitrate@10 | MRR | Hitrate@10 | MRR | Hitrate@10 |
| Cleora | 0,072 | 0,172 | 0,929 | 0,942 | 0,586 | 0,627 |
| Pytorch-Biggraph | 0,035 | 0,072 | 0,850 | 0,866 | 0,565 | 0,672 |
Cleora ist als Mehrzweck-"-Toling" einfach einbettet "für viele verschiedene Datentypen und Formate geeignet.
Cleora nimmt eine relationale Tabelle mit Reihen ein, die einen typisierten und ungerichteten heterogenen Hypergraph darstellt, der mehrere enthalten kann:
Beispielsweise kann eine relationale Tabelle, die Einkaufskörbe darstellt, die folgenden Spalten haben:
user <t> product <t> store
Mit der Eingabedatei mit Werten:
user_id <t> product_id product_id product_id <t> store_id
Jede Spalte hat einen Typ, der verwendet wird, um zu bestimmen, ob Räume von Identifikatoren zwischen verschiedenen Spalten geteilt oder unterschiedlich sind. Es ist zwei Spalten möglich, einen Typ zu teilen, der für homogene Graphen der Fall ist:
user <t> user
Basierend auf der Spaltenformatspezifikation führt Cleora aus:
Die endgültige Ausgabe von Cleora besteht aus mehreren Dateien für jedes (ungerichtete) Entitätstypen in der Tabelle.
Diese Einbettungen können dann dank ihrer schwierigen Unabhängigkeitseigenschaft, die weiter unten beschrieben wird, auf neuartige Weise verwendet werden.
Die von Cleora produzierten Einschreibungen unterscheiden sich von denen, die von NODE2VEC, WORD2VEC, Deepwalk oder anderen Systemen in dieser Klasse nach einer Reihe von Schlüsseleigenschaften hergestellt wurden:
Die oben beschriebenen technischen Eigenschaften implizieren eine gute Produktionsleszinessung von Cleora, die aus der Sicht der Endbenutzer wie folgt zusammengefasst werden kann:
!!! Haftungsausschluss Die folgende Dokumentation ist für Cleora 1.x, die für 2.x aktualisiert werden soll
Weitere Informationen finden Sie in der vollständigen Dokumentation.
Für Informationen kontaktieren Sie uns unter [email protected]
Bitte zitieren Sie unser Papier (und die jeweiligen Artikel der verwendeten Methoden), wenn Sie diesen Code in Ihrer eigenen Arbeit verwenden:
@article{DBLP:journals/corr/abs-2102-02302,
author = {Barbara Rychalska, Piotr Babel, Konrad Goluchowski, Andrzej Michalowski, Jacek Dabrowski},
title = {Cleora: {A} Simple, Strong and Scalable Graph Embedding Scheme},
journal = {CoRR},
year = {2021}
}
Synerise Cleora ist MIT lizenziert, wie in der Lizenzdatei zu finden.
Pull -Anfragen sind willkommen.