1

Ich versuche, Sentiment-Analyse auf einem Datensatz von 2 Klassen (binäre Klassifizierung) durchzuführen. Datensatz ist stark unausgeglichen über 70% - 30%. Ich benutze LightGBM und Python 3.6 für die Erstellung des Modells und die Vorhersage der Ausgabe.Sentiment Analyse mit unausgewogenem Datensatz in LightGBM

Ich denke, Ungleichgewicht in Datensatz Leistung meines Modells. Ich bekomme ungefähr 90% Genauigkeit, aber es erhöht sich nicht weiter, obwohl ich eine Feinabstimmung der Parameter durchgeführt habe. Ich denke nicht, dass dies die größtmögliche Genauigkeit ist, da es andere gibt, die besser punkten.

Ich habe den Datensatz mit Textacy und nltk gereinigt. Ich verwende CountVectorizer für die Codierung des Textes.

ich up-sampling der Datensatz versucht, aber es führte zu einer schlechten Modell (ich habe nicht abgestimmt, dass Modell)

ich den is_unbalance Parameter von LightGBM verwendet haben versucht, aber es kein besseres Modell gibt mir.

Gibt es irgendwelche Ansätze zu folgen, um diese Art von Datensätzen, die so unausgeglichen sind. Wie kann ich mein Modell weiter verbessern? Sollte ich versuchen, Downsampling. Oder ist es die maximal mögliche Genauigkeit? Wie kann ich mir dessen sicher sein?

Antwort

3

Gibt es irgendwelche Ansätze zu folgen, um diese Art von Datensätzen zu handhaben, die so unausgeglichen sind.?

Ihr Datensatz ist fast ausgeglichen. 70/30 ist fast gleich. Mit gut bestückten Bäumen ist es möglich, auf sehr viel unausgewogenere Daten zu trainieren, wie Kredit-Scoring, Betrugserkennung und medizinische Diagnostik, wobei der prozentuale Anteil der positiven Werte weniger als 1% betragen kann.

Ihr Problem ist möglicherweise nicht in Klassenungleichgewicht, aber in der falschen Metrik Sie verwenden. Wenn Sie die Genauigkeit berechnen, benachteiligen Sie Ihr Modell implizit für falsch negative und falsch positive Ergebnisse. Aber ist es wirklich so? Wenn Klassen unausgewogen sind oder aus geschäftlicher oder physikalischer Sicht nicht vergleichbar sind, können andere Metriken wie Präzision, Abruf oder ROZ-AUC von mehr Nutzen als Genauigkeit sein. Für Ihr Problem würde ich ROC AUC empfehlen.

Vielleicht, was Sie wirklich wollen, ist probabilistische Klassifizierung. Und wenn du es binär halten willst, spiele mit dem Schwellenwert, der für die Klassifizierung verwendet wird.

Wie kann ich mein Modell weiter verbessern?

Weil es Analyse des Textes ist, würde ich genauere Datenreinigung empfehlen. Einige Richtungen zu beginnen mit:

  • Haben Sie verschiedene Regime der Lemmatisierung/Stemming versucht?
  • Wie haben Sie spezielle Entitäten wie Zahlen, Smileys, Abkürzungen, Firmennamen usw. vorverarbeitet?
  • Haben Sie Kollokationen ausgenutzt, indem Sie mit Wörtern Bigramme oder sogar Trigramme in Ihr Modell eingefügt haben?
  • Wie sind Sie mit der Negation umgegangen?Ein einzelnes "Nein" könnte die Bedeutung dramatisch ändern, und CountVectorizer fängt das schlecht ab.
  • Haben Sie versucht, die Semantik von den Wörtern zu extrahieren, z.B. passen Sie die Synonyme an oder verwenden Sie das Wort embeddins aus einem vortrainierten Modell wie word2vec oder fastText?

Vielleicht ist Baum-basierte Modelle nicht die beste Wahl. Nach meiner eigenen Erfahrung wurde die beste Stimmungsanalyse von linearen Modellen wie der logistischen Regression oder einem flachen neuronalen Netzwerk durchgeführt. Aber Sie sollten sie stark regularisieren, und Sie sollten Ihre Funktionen weise skalieren, z. mit TF-IDF.

Und wenn Ihr Dataset groß ist, können Sie tief Lernen und trainieren eine RNN auf Ihre Daten versuchen. LSTM ist oft das beste Modell für viele textbezogene Probleme.

Sollte ich versuchen, Downsampling.?

Nein, Sie sollten nie Down-Probe, es sei denn, Sie zu viel Daten auf Ihrem Computer zu verarbeiten. Downsampling erzeugt Verzerrungen in Ihren Daten.

Wenn Sie wirklich die relative Wichtigkeit der Minderheitsklasse für Ihren Klassifikator erhöhen möchten, können Sie einfach die Beobachtungen wiedergewichten. Soweit ich weiß, können Sie unter LightGBM Klassengewichte mit dem Parameter scale_pos_weight ändern.

Oder ist es die maximal mögliche Genauigkeit? Wie kann ich mir dessen sicher sein?

Sie nie wissen kann. Aber Sie können ein Experiment machen: Bitten Sie mehrere Menschen, Ihre Testproben zu kennzeichnen und sie miteinander zu vergleichen. Wenn nur 90% der Markierungen übereinstimmen, kann auch ein Mensch die restlichen 10% der Proben nicht korrekt klassifizieren, so dass Sie das Maximum erreicht haben.

Und wieder liegt die Konzentration nicht zu sehr auf Genauigkeit. Vielleicht ist es für Ihre Geschäftsanwendung in Ordnung, wenn Sie einige positive Bewertungen falsch als negativ kennzeichnen, solange alle negativen Bewertungen erfolgreich identifiziert werden.

+0

Danke für die Informationen. Ich habe die Daten für Zahlen gereinigt, Smileys etc. mit 'Textacy', ich habe auch versucht, verschiedene' Stemmers' und 'Lemmatisations' –

+0

Ich habe versucht,' auc' als Metrik, die keine Verbesserungen zeigten. Ich habe nicht verwendet word2vec wie ich kann nicht das Modell in meiner Maschine .. –

+0

ich mit dem Training 'LSTM' mit' Keras' versucht haben, aber die Ergebnisse waren nicht so vielversprechend. –