Sätze kategorisieren - welche verschiedenen Ansätze sind möglich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
chris8080
User
Beiträge: 10
Registriert: Freitag 8. Mai 2015, 02:07

Hallo,

ich habe eine lange Liste mit Sätzen (ca. 30 Millionen) und will diese gern in möglich viele (aber manuell machbar) Gruppen einteilen - ca. 200 - 400 Gruppen (diese Gruppen sind geschachtelt).
Beispiel:
  1. 18 Reasons You Should Upgrade to Windows 10
  2. The 100 Best Android Apps for 2020
  3. Cooler Master's adorable Masterbox MB311L mini-tower is affordable, too
Und das Ergebnis/die Erkennung sollte sowas liefern:
1. Top_Category: Operating System, Sub_Category: Windows, Sub_Sub_Category: Windows 10
2. Top_Category: Operating System, Sub_Category: Android
3. Top_Category: Hardware, Sub_Category: Desktop PC, Sub_Sub_Category: Cooler Master
Im Normalfall: Wenn die Sub_Sub_Category korrekt erkannt wird, ergeben sich die übergeordneten.

Welche Optionen gibt es denn da?
Ich hatte es am Anfang mit Machine Learning probiert, spezieller mit: sklearn MultinomialNB
Vorerst mit den Daten aus den Tutorials online. Damit kam ich bei der Klassifizierung auch auf 80 - 90% (Genauigkeit)
Dann habe ich meine eigenen Daten gelabelt und damit trainiert - bin mir nicht mehr sicher .. ich glaube ich war bei 20 - 40%.
Ich schätze, das liegt daran, dass ich so viele Kategorien habe und ich bräuchte hunderttausende von gelabelten Daten um die Genauigkeit zu erhöhen.

Dann habe ich ganz simpel mit String Comparisons gearbeitet - mittlerweile über 1000 Zeilen Code und diverse Logiken eingebaut wie von spezifischen zu allgemeinen Keywords, zusammengesetzte Nomen / getrennte etc.
Damit komme ich auf knapp 100% Genauigkeit - allerdings werden nur ca. 70 - 80% der Sätze klassifiziert, da es eine Art Whitelist Ansatz ist.

Ich würde das System jetzt gern ausbauen / verfeinern und bin am Überlegen, in welche Richtung ich recherchieren muss / ob ihr irgendwelche Tipps habt, wie es weiter gehen kann?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Ich glaube, die Beispielsätze sind nicht ausreichend.
Hier reagierst du ja auf das Auftreten bestimmter Schlüsselwörter. Deren Zuordnung musst du nach dem ersten Erscheinen sowieso manuell zuordnen, deshalb sehe ich gerade den Ansatz für ML nicht.
Da du aber von zusammengesetzten Nomen sprichst, gehe ich davon aus, dass die Fälle nicht immer so gelagert sind wie hier.

Für das gegeben Beispiel würde ich eine Liste der Schlüsselwörter mit den entsprechenden Kategorisierungen durchlaufen und bei einem Match den entsprechenden Verweise vornehmen. Das wären dann auch nur 4 Zeilen Code oder so, weil die Zuordnungsdaten da nichts verloren haben.
chris8080
User
Beiträge: 10
Registriert: Freitag 8. Mai 2015, 02:07

Ja, so in der Art mache ich das aktuell.
Die Kategorien habe ich jetzt in einer CSV aufgebaut inkl. der Schlüsselwörter.
Bisher habe ich hauptsächlich zwei Probleme:

1. Eine Kategorie von weiter unten in der CSV passt besser als die erste gefundene
2. Zusammengesetzte Wörter werden getrennt und passen jetzt auf "falsche" Kategorien

Beispiel:
1. Neue Rennrad Schuhe von Marke X angekündigt
2. Glass zum Trinken ist zerbrochen

--

In meiner CSV habe ich jetzt so was:
Zeile 17: Top_Category: Sport, Sub_Category: Fahrrad, Sub_Sub_Category: Rennrad
Zeile 235: Top_Category: Kleidung, Sub_Category: Schuhwerk, Sub_Sub_Category: Schuhe

Wenn ich die Datenstruktur in der CSV durchlaufe und den ersten Match nehme, sind meine Schuhe jetzt ein Fahrrad.
Wenn ich nicht nach dem ersten Match aufhöre, könnte ich Fahrrad und Schuhwerk als Liste nutzen und hätte dann Fahrradschuhwerk (aber eher als Tags, nicht als einzelne Kategorie)
Meine Idee war jetzt: Ich führe eine Spalte "Generell" mit 0 und 1 in der CSV ein. Kleidung hat 1 und wenn ich zwei Matches habe und einer Generell == 1 ist, dann lösche ich den anderen.
Was ich bisher gesehen habe, da klappt die Logik auch.

Schöner wäre es natürlich, wenn eine andere Zeile erkannt werden würde:
Zeile 187: Top_Category: Sport, Sub_Category: Fahrrad, Sub_Sub_Category: Fahrradschuhe

--

Das zweie Beispiel sollte eigentlich Trinkglas erkennen:
Zeile 53: Top_Category: Wohnen, Sub_Category: Küche, Sub_Sub_Category: Trinkglas

Was sind denn deine Ideen, was man für einen Ansatz dort funktionieren würde?
Antworten