Ich verwende Random Forest, um eine Stimmung auf eine Zeichenfolge anzuwenden. Also im Grunde nach der Reinigung der Bewertungen, die im Wesentlichen bedeutet, dass Stoppwörter (nltk.corpus -> stopwords
von wo ich Wörter wie nicht entfernen, nicht, noch, gewann, wasn, weren) entfernt werden, sowie Nicht-Buchstaben-Zeichen, und alles wird gestellt ist kleingeschrieben. Die CountVectorizer
mit den Argumenten (analyzer = "word", tokenizer = None, preprocessor = None, ngram_range=(1, 3), stop_words = None, max_features = 5500)
bildet das Vokabular und fügt es zu einem numpy
Array hinzu. Ich benutze auch 100 Bäume.Random Forest-Handle Negation
Nach dem Teilen der Daten mit test_size = .1
wird der Klassifikator trainiert, angepasst und bewertet.
score = forest.score(X_test, y_test)
: 0,882180882181
Konfusionsmatrix, ohne Normalisierung:
[[2256 503]
[ 519 5269]]
Normalized Konfusionsmatrix:
[[ 0.82 0.18]
[ 0.09 0.91]]
ROC-Kurve zeigt Random (RF) und Random mit Lineare Regression (RF + LR):
Das Problem ist also, dass, obwohl die Ergebnisse sehr gut aussehen wir falsch Ergebnisse zu erhalten, zum Beispiel:
"Der Film ist nicht gut" ->negativ
"Der Film ist nicht schlecht" ->negativ
"Die Musik und die Bilder sind nicht gut" ->positive
"Der Film keinen Sinn" -> positive
So die oben genannten sind nur einige Die problematischen Fälle, aber Sie können eine allgemeine Vorstellung davon bekommen, was das Problem ist, dem ich momentan gegenüber stehe (selbst mit einem 3-Gramm kann der Klassifikator die Negation nicht richtig vorhersagen). Ich dachte, dass es auch das Training sein könnte, da es nicht genug Fälle von Negation gibt, damit es nicht gelernt werden kann.
Hätten Sie Vorschläge, was verbessert oder geändert werden könnte, damit die Negation richtig klassifiziert wird?