2017-07-26 1 views
0

Ich habe rund 2-3 Millionen Produkte. Jedes Produkt folgt dieser StrukturRichtiger Ansatz, um ähnliche Produkte ausschließlich basierend auf Inhalt und nicht auf Benutzerhistorie mit maschinellen Lernalgorithmen zu finden

{ 
    "sku": "Unique ID of Product (String of 20 chars)" 
    "title":"Title of product eg Oneplus 5 - 6GB + 64GB ", 
    "brand":"Brand of product eg OnePlus", 
    "cat1":"First Category of Product Phone", 
    "cat2":"Second Category of Product Mobile Phones", 
    "cat3":"Third Category of Product Smart Phones", 
    "price":500.00, 
    "shortDescription":"Short description about the product (Around 8 - 10 Lines)", 
    "longDescription":"Long description about the product (Aroung 50 - 60 Lines)" 
} 

Die Problemstellung ist

die ähnlichen Produkte nur basierend auf dem Inhalt oder Produktdaten finden. Wenn der E-Commerce-Benutzer also auf ein Produkt (SKU) klickt, werde ich in der Empfehlung ähnliche Produkte zu dieser SKU oder diesem Produkt anzeigen.

Zum Beispiel, wenn der Benutzer klickt auf apple iphone 6s Silber, werde ich diese Produkte in "ähnlichen Produkten Recommendation" zeige

1) apple iphone 6s Gold oder andere Farbe

2) apple iphone 6s plus Optionen

3) apple iphone 6s Optionen mit anderen Konfigurationen

4) anderem Apfel iphones

5) andere Smartphones in dieser Preisklasse

Was ich bisher versucht

A) Ich habe versucht, ‚user view event‘ zu verwenden, um das ähnliche Produkt zu empfehlen, aber wir haben nicht so gut Daten. Es ergibt feine Ergebnisse, aber nur mit wenigen Produkten. Diese Vorlage ist also nicht für meinen Anwendungsfall geeignet.

B) One hot encoder + Singular Value Decomposition (SVD) + Cosine Similarity

Ich habe mit Dimension = 500 mit Modifikation dieser prediction io template für rund 250,000 Produkte mein Modell trainiert. Es gibt ein gutes Ergebnis. Ich habe lange Beschreibung des Produktes im Training nicht eingeschlossen.

Aber ich habe einige Fragen hier

1) Ist die Verwendung One Hot Encoder und SVD richtiger Ansatz in meinem Anwendungsfall ist?

2) Gibt es eine Möglichkeit oder einen Trick, um das zusätzliche Attribut title und brand Attribut im Training zu geben.

3) Halten Sie es für skalierbar? Ich versuche, die Produktgröße auf 1 Million und Dimension = 800-1000 zu erhöhen, aber es spricht eine Menge Zeit und System hängt/Stall oder geht aus dem Speicher. (Ich verwende Apache-Vorhersage io)

4) Was sollte mein Dimensionswert sein, wenn ich für 2 Millionen Produkte trainieren möchte.

5) Wie viel Speicher würde ich benötigen, um das SVD ausgebildete Modell bereitzustellen, um In-Memory cosine similarity für 2 Millionen Produkte zu finden.


Was soll ich in meinem Anwendungsfall verwenden, so dass ich auch etwas an Gewicht meiner wichtigen Attribute geben kann und ich werde gute Ergebnisse mit angemessenen Ressourcen bekommen. Was sollte der beste maschinelle Lernalgorithmus sein, den ich in diesem Fall verwenden sollte.

+0

Können Sie mir sagen, welche Dimension genau bedeutet? – Abhimanyu

+0

Und ich bekomme diesen Fehler während der Bereitstellung [ERROR] [LocalFSModels] Angeforderte Array-Größe überschreitet VM-Limit [FEHLER] [OneForOneStrategy] None.get Mein Training Datensatz zählt 400k und meine Dimension ist 500 – Abhimanyu

Antwort

1

Nun, da ich meine Einwände gegen die Entsendung gesagt habe, ich wird einige Hinweise auf die Fragen geben:

  1. „richtige Ansatz“ oft existiert nicht in ML. Der oberste Schiedsrichter ist, ob das Ergebnis die Eigenschaften hat, die Sie benötigen. Am wichtigsten ist, ist die Genauigkeit, was Sie brauchen, und können Sie eine bessere Methode finden? Wir können nicht sagen, ohne eine signifikante Teilmenge Ihres Datensatzes zu haben.
  2. Ja. Die meisten Trainingsmethoden passen an, welche Faktoren die Fehler (verlust) -Funktion verbessern. Wenn die von Ihnen gewählte Methode (SVD oder andere) dies nicht automatisch durchführt, ändern Sie die Fehlerfunktion.
  3. Ja, es ist skalierbar. Der grundlegende Inferenzprozess ist linear bezüglich der Datensatzgröße. Sie haben schlechte Ergebnisse, weil Sie die Hardware beim Vergrößern des Datensatzes nicht vergrößert haben. Das ist Teil von "Scale Up". Sie könnten auch die Skalierung aus (mehr Rechenknoten) in Betracht ziehen.
  4. Nun, wie sollte eine Dimension mit der Datenbankgröße skalieren? Ich glaube, dass empirische Belege dafür sprechen, dass es sich um eine Log (n) -Beziehung handelt ... man möchte eine Dimension von 600-700. Sie sollten jedoch dies empirisch feststellen.
  5. Das hängt davon ab, wie Sie die Ergebnisse verwenden. Von dem, was Sie beschrieben haben, ist alles, was Sie brauchen, eine sortierte Liste von N Top-Übereinstimmungen, die nur die Referenzen und die Ähnlichkeit (ein einfacher Float) erfordert. Das ist trivialer Speicher verglichen mit der Modellgröße, eine Angelegenheit von N * 8 Bytes.
Verwandte Themen