2009-03-29 20 views
6

Ich habe eine Liste mit Produkten, die mehr oder weniger gleich sind. In der folgenden Liste sind dies beispielsweise alle Seagate-Festplatten.Algorithmus zur Klassifizierung einer Produktliste?

  1. Seagate Hard Drive 500Go
  2. Seagate Hard Drive 120Go für Laptop
  3. Seagate Barracuda 7200.12 ST3500418AS 500 GB 7200 RPM SATA 3,0 Gb/s Festplatte
  4. Neue und shinny 500Go Festplatte von Seagate
  5. Seagate Barracuda 7200.12
  6. Seagate Freeagent Desk 500GB externe Festplatte Silber 7.200 USB2.0 Einzelhandel

Für einen Menschen sind die Festplatten 3 und 5 identisch. Wir könnten ein bisschen weiter gehen und annehmen, dass die Produkte 1, 3, 4 und 5 gleich sind und in andere Kategorien das Produkt 2 und 6 setzen.

Wir haben eine riesige Liste von Produkten, die ich gerne klassifizieren würde . Hat jemand eine Vorstellung davon, was der beste Algorithmus wäre, um so etwas zu tun? Irgendwelche Vorschläge?

Ich von einem Bayesian Classifier aber ich bin mir nicht sicher, ob es die beste Wahl ist. Jede Hilfe wäre willkommen!

Danke.

Antwort

5

Sie benötigen mindestens zwei Komponenten:

Zuerst Sie brauchen etwas, das „Feature“ Extraktion der Fall ist, das heißt, dass Ihr Artikel und extrahiert die relevanten Informationen übernimmt. Zum Beispiel ist "neu und shinny" nicht so relevant wie "500Go Festplatte" und "Seagate". Ein (sehr) einfacher Ansatz würde aus einer einfachen heuristischen Extraktion von Herstellern, Technologienamen wie "USB2.0" und Mustern wie "GB", "RPM" von jedem Gegenstand bestehen.

Sie erhalten dann eine Reihe von Funktionen für jedes Element. Einige maschinell lernende Personen mögen es, dies in einen "Merkmalsvektor" zu bringen, d. H. Sie haben einen Eintrag für jedes Merkmal, der auf 0 oder 1 gesetzt wird, abhängig davon, ob das Merkmal existiert oder nicht. Dies ist Ihre Datendarstellung. Auf diesen Vektoren können Sie dann einen Distanzvergleich durchführen.

Beachten Sie, dass Sie möglicherweise einen Vektor mit Tausenden von Einträgen erhalten. Auch dann müssen Sie Ihre Ergebnisse clustern.

Möglicherweise nützlicher Wikipedia-Artikel:

+0

Vielen Dank! Sehr interessanter Ansatz! – Martin

1

Eines der Probleme, begegnen Sie ist nächste Nachbarn in nicht-linearen oder nicht geordnete Attributen zu entscheiden. Ich baue auf Manuel's entry hier.

Ein Problem, das Sie haben auf die Nähe von (1) Seagate 500Go, (2) Seagate Hard Drive 120Go für Laptop, um zu entscheiden, und (3) Seagate Freeagent Desk 500GB externe Festplatte Silber 7.200 USB2.0 Retail:

Ist 1 näher an 2 oder an 3? Begründen die Unterschiede unterschiedliche Kategorien?

Eine menschliche Person würde sagen, dass 3 zwischen 1 und 2 ist, da eine externe HD auf beiden Arten von Maschinen verwendet werden kann. Dies bedeutet, dass wenn jemand nach einer HD für seinen Desktop sucht und den Auswahlbereich erweitert, um Alternativen hinzuzufügen, werden auch externe HDs angezeigt, aber keine Laptop HDs. Wahrscheinlich werden SSDs, USB-Speichersticks, CD/DVD-Laufwerke sogar vor Laptop-Laufwerken angezeigt, was den Umfang vergrößert.

Mögliche Lösung:

Präsens Benutzer mit Paaren von Attributen und lassen Sie sie Nähe gewichten. Gib ihnen eine Skala, um dir zu sagen, wie nahe bestimmte Attribute sind. Wenn Sie den Umfang einer Auswahl erweitern, wird diese Skala dann als Abstandsfunktion für dieses Attribut verwendet.

1

Um ein Produkt tatsächlich zu klassifizieren, könnten Sie etwas von einem "erweiterten neuralen Netzwerk" mit einer Tafel verwenden. (Dies ist nur eine Metapher, um Sie in die richtige Richtung zu denken, nicht eine strikte Verwendung der Begriffe.)

Stellen Sie sich eine Reihe von Objekten vor, die durch Listener oder Ereignisse verbunden sind (genau wie Neuronen und Synapsis). Jedes Objekt verfügt über eine Reihe von Mustern und testet die Eingabe anhand dieser Muster.

Ein Beispiel:

  • Ein Ziel Tests für ("seagate" | "connor" | "Maxtor" | "quantum" | ...)
  • Ein weiteres Ziel Tests für [: digit:] "? * (") (" gb "|" mb ")
  • Ein weiteres Ziel Tests für [: digit:] *? (" ")" rpm"

diese Objekte verbinden Objekt zu einem anderen alles, was Wenn bestimmte Kombinationen von ihnen feuern, kategorisiert die Eingabe als eine Festplatte. Die einzelnen Objekte selbst würden bestimmte Eigenschaften in das schwarze Brett (allgemeiner Schreibbereich, um Dinge über den Eingang zu sagen) wie Hersteller, Kapazität oder Geschwindigkeit eingeben.

Also feuern die Neuronen nicht basierend auf einer Schwelle, sondern auf einer Erkennung eines Musters. Viele dieser Neuronen können sich auf der Tafel hoch parallel arbeiten und sogar richtig Kategorisierungen von anderen Neuronen (vielleicht Gewissheiten einzuführen?)

ich so etwas wie dies für ein Produkt in einem Prototyp verwendeten Produkte zu klassifizieren nach UNSPSC und konnte Erhalten Sie eine 97% korrekte Klassifizierung für Autoteile.

+0

Danke Malach! Super interessant! – Martin

1

Es gibt keine einfache Lösung für diese Art von Problem. Vor allem, wenn deine Liste wirklich groß ist (Millionen von Items). Vielleicht diese beiden Papiere können Sie in die richtige Richtung:

http://www.cs.utexas.edu/users/ml/papers/normalization-icdm-05.pdf http://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle_SchmidtThieme2006-Object_Identification_with_Constraints.pdf

+0

Die vorgeschlagenen Artikel sind sehr hilfreich, schade, dass es in der Antwort nicht gut beschrieben wird – eliasah

0

MALLET hat Implementierungen von CRF und MaxEnt, die wahrscheinlich den Job gut tun kann. Wie bereits erwähnt, müssen Sie die Features zuerst extrahieren und dann in Ihren Klassifikator einspeisen.

0

Um ehrlich zu sein, scheint dies eher ein Record Linkage Problem als ein Klassifizierungsproblem. Du weißt nicht im Voraus, was alle Klassen sind, oder? Aber Sie möchten herausfinden, welche Produktnamen sich auf dieselben Produkte beziehen und welche sich auf andere beziehen?

0

Zuerst würde ich einen CountVectorizer verwenden, um das erzeugte Vokabular zu betrachten. Da wären Wörter wie "Von", "Laptop", "Schnell", "Silber" usw.Sie können Stoppwörter verwenden, um solche Wörter zu verwerfen, die uns keine Informationen liefern. Ich würde auch weitermachen und "hart", "Laufwerk", "Festplatte" usw. verwerfen, weil ich weiß, dass dies eine Liste von Festplatten ist, so dass sie keine Informationen liefern. Dann hätten wir Liste von Wörtern wie

  1. Seagate 500Go
  2. Seagate 120Go
  3. Seagate Barracuda 7200.12 ST3500418AS 500 GB 7200 RPM SATA 3,0 Gb/s
  4. 500Go Seagate usw.

Sie können eine Liste von Funktionen verwenden, wie Dinge, die mit RPM enden, wahrscheinlich RPM-Informationen geben, gleiches gilt für Dinge, die mit mb ​​/ s oder Gb/s enden. Dann würde ich alphanumerische Zeichen wie "1234FBA5235" verwerfen, was höchstwahrscheinlich Modellnummern usw. ist, die uns nicht viele Informationen geben. Nun, wenn Sie bereits bekannte Festplatten-Marken wie 'Seagate' 'Kingston' kennen, können Sie die String-Ähnlichkeit verwenden oder einfach prüfen, ob sie im gegebenen Satz vorhanden sind. Sobald das erledigt ist, können Sie mithilfe von Clustering ähnliche Objekte gruppieren. Objekte mit ähnlicher Geschwindigkeit wie rpm, gb, gb/s, Markenname werden nun gruppiert. Wenn Sie etwas wie KMeans verwenden, müssen Sie den besten Wert von K herausfinden. Sie müssen einige manuelle Arbeiten ausführen. Was Sie tun können, verwenden Sie ein Streudiagramm und Augapfel für welchen Wert von K die Daten die besten klassifiziert.

Aber das Problem in oben genannten Ansatz ist, wenn Sie nicht vorher die Liste der Marken Hand dann wissen, würden Sie in Schwierigkeiten geraten. Dann würde ich Bayesian Classifier benutzen, um nach jedem Satz zu suchen und die Wahrscheinlichkeit zu bekommen, dass es eine Festplattenmarke ist. Ich für zwei Dinge aussehen würde

  1. Blick auf den Daten, die meisten der Zeit würde der Satz ausdrücklich das Wort ‚Festplatte‘ erwähnen, dann würde ich wissen, dass es auf jeden Fall über eine Festplatte zu sprechen. Die Chancen für so etwas wie "Mercedes Benz Festplatte" sind gering.
  2. Dies ist ein bisschen mühsam, aber ich würde einen Python Web Scrapper über Amazon schreiben (oder wenn Sie nicht einfach Google für die meisten verwendeten Festplattenmarken schreiben und eine Liste erstellen) Es gibt mir eine Liste wie 'Seagate Barracuda 7200.12 ST3500418AS 500GB 7200 RPM SATA 3.0Gb/s 'jetzt für jeden Satz würde es etwas wie Naive Bayes verwenden, um mir Wahrscheinlichkeit zu geben, dass es eine Marke ist. sklearn kommt ziemlich praktisch, um dieses Zeug zu machen.
Verwandte Themen