2010-05-08 20 views
19

Ich frage mich, was Algorithmus klug sein würde für einen Tag gefahren E-Commerce-Umgebung zu nutzen:Tag/Schlagwort basierte Empfehlung

  • Jedes Element hat mehrere Tags. IE:

    Einzelteilname: "Metallica - Black Album-CD", Schlagwörter: "metallica", "black-Album", "Rock", "Musik"

  • Jeder Benutzer mehrere Tags hat und Freunde (andere Benutzer) gebunden an sie. IE:

    Benutzername: "testguy", Interesse: "Python", "Rock", "Metall", "Computer-Wissenschaft" Freunde: "testguy2", "testguy3"

Ich muss Empfehlungen für diese Benutzer generieren, indem ich ihre Interessen-Tags überprüfe und Empfehlungen auf raffinierte Weise erstelle.

Ideen:

  • Ein Algorithmus Hybrid Empfehlung verwendet werden kann, da jeder Benutzer Freund hat (Mischung aus kollaborativen + kontextbasierte Empfehlungen)..
  • Mithilfe von Benutzer-Tags können ähnliche Benutzer (Peers) Empfehlungen generieren.

  • Möglicherweise direkt passende Tags zwischen Benutzern und Elementen über Tags.

Jeder Vorschlag ist willkommen. Jede Python-basierte Bibliothek ist auch willkommen, da ich diese experimentelle Engine in Python-Sprache machen werde.

+5

genaue duplizieren: http://StackOverflow.com/Questions/2704845/Python-Recommendation-engine – msw

+3

Viel bessere Frage, obwohl. – whybird

+0

Abstimmung zu schließen als zu breit/Werkzeug rec. –

Antwort

18

1) Wiegen Sie Ihre Tags.

Stichworte fallen in mehrere Gruppen von Interesse:

  • Meine Tags, die keiner meiner Freunde teilen
  • eine Reihe von meinen Freunden teilen Tags, aber ich weiß nicht
  • Meine Tags, die gemeinsam genutzt werden von einer Anzahl meiner Freunde.

(manchmal möchten Sie vielleicht prüfen, Friend-of-a-friend auch Tags, aber nach meiner Erfahrung die Mühe es war nicht wert. YMMV.)

Alle Tags identifizieren, die die Person und/oder die Freunde der Person haben Interessen, und ein Gewicht an die Tags für diese Person. Eine einfache mögliche Formel für Tag Gewicht

(tag_is_in_my_list) * 2 + (friends_with_tag)/(number_of_friends) 

Beachten Sie die magische Zahl 2, die wie alle Ihre Freunde zusammen Ihre eigene Meinung doppelt so viel wert macht.Fühlen Sie sich frei zu zwicken :-)

2) Gewicht Ihre Artikel

Für jedes Element, das jeder der Tags in der Liste hat, fügen Sie einfach alle gewichteten Werte der Variablen auf. Ein höherer Wert = mehr Interesse.

3) Wenden Sie einen Schwellenwert an.

Die einfachste Möglichkeit ist, dem Benutzer die oberen n Ergebnisse zu zeigen.

Ausgereiftere Systeme wenden auch Anti-Tags (d. H. Uninteressante Themen) an und tun viele andere Dinge, aber ich habe diese einfache Formel effektiv und schnell gefunden.

+1

Vielen Dank für Ihre freundliche Antwort! Ich bin etwas verwirrt über die Formel: Was genau bedeutet tag_is_in_my_list? Wenn es eine Art von Binär wie 1 oder 0 ist? Prost – Hellnar

+2

Ja, eine binäre 1 oder 0. – whybird

+0

jedes Beispiel/Beispiel Implementierung auf diesem – user962206

4

Wenn Sie können, finden Sie eine Kopie von O'Reilly Programming Collective Intelligence, von Toby Segaran. Es gibt eine Modelllösung für genau dieses Problem (mit einer ganzen Reihe wirklich, wirklich guter anderer Sachen).

0

Ihr Problem ähnelt den Produktempfehlungs-Engines, z. B. der öffentlich zugänglichen Website von Amazon. Diese verwenden einen Lernalgorithmus, der association rules genannt wird, der im Wesentlichen eine bedingte Wahrscheinlichkeit aufbaut, dass der Benutzer X das Produkt Y kauft, basierend auf gemeinsamen Merkmalen Z zwischen dem Benutzer und dem Produkt. Viele Open-Source-Toolkits implementieren Assoziationsregeln wie Orange und Weka.

0

Sie können die Python Semantic module für Drools verwenden, um Ihre Regeln in Python-Skriptsprache anzugeben. Sie können dies leicht mit Drools erreichen. Es ist eine großartige Regel-Engine, die wir verwendet haben, um mehrere Empfehlungs-Engines zu lösen.

0

Ich würde eine Restricted Boltzmann Maschine verwenden. Bekämpft das Problem von ähnlichen, aber nicht identischen Tags ganz ordentlich.

+0

Könnten Sie diese Antwort ein wenig mehr Fleisch, wie HOME Sie würden eine RBM verwenden? – dwanderson

+0

@dwanderson Haben Sie die WP-Seite auf RBMs gelesen? – isomorphismes