Klassifikation von Text

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
rumoll
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2021, 11:44

Hallo zusammen,

ich versuche, eine große Anzahl von Posts aus den Sozialen Medien mit Hilfe von TextBlob Classifier und einem selbst erstellten Trainingsmodell in Pos und Negativ und Neutral zu klassifizieren.
Das Trainingsmodell sieht ungefähr so aus, besteht aber aus über 3000 Datensätzen

Code: Alles auswählen

from text.blob import TextBlob
train = [('Ich liebe dieses Sandwich.', 'pos'),
         ('Das ist ein toller Ort!', 'pos'),
         ('Ich habe ein sehr gutes Gefühl bei diesen Bieren.', 'pos'),
         ('Das ist meine beste Arbeit.', 'pos'),
         ("Was für ein toller Ausblick", 'pos'),
         ('Ich mag dieses Restaurant nicht', 'neg'),
         ('Ich habe genug von diesem Zeug.', 'neg'),
         ("Ich kann damit nicht umgehen", 'neg'),
         ("Er ist mein Erzfeind!", "neg"),
         ('Mein Chef ist furchtbar.', 'neg') ]
Wenn ich das Trainingsmodel auf meine Daten anwende, dann stelle ich fest dass die Klassifizierung zwar funktioniert, aber eben nicht optimal.
Egal wie umfangreich ich mein Trainingsmodell erstelle, die Kategorisierung bleibt bei 40 / 45 %
Sogar habe ich das Gefühl, dass je größer das Trainingsmodell mache, desto schlechter die Ergebnisse ausfallen.

Mir ist bewusst, dass ich auf 100% nicht kommen werde, mit 45 % kann ich mich auch nicht zufrieden geben.
Verpasse ich bei oder nach Kategorisierung einen wichtigen Schritt? Wenn nein, kennt ihr einen ähnlichen Algorithmus der vielleicht mit Hilfe eines Trainingsmodells besser Ergebnisse als TextBlob Classifier liefert?
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Dein Codeschnipsel ist etwas dürftig um zu erkennen wie genau dein Training und Testen programmiert ist.

Textblob ist ja auch nicht gerade ein aktuell sehr gepflegtes Framework, ca. 7 Jahre alt.

Ein aktuelles Frameworks wäre z.B. https://spacy.io/
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
rumoll
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2021, 11:44

Hi ThomasL,

spaCy hatte ich auch schon im Kopf gehabt, aber mit dem Framework kann man, soweit ich mitbekommen habe, nur zwei Emotionen abbilden
positiv und negativ - da will ich aber wenig mehr rausbekommen - Wut, Angst bzw. Kummer usw.
Von daher habe ich TextBlob angewandt, weil ich nichts passenderes gefunden habe.


mein Code ist an sich ziemlich simple

Code: Alles auswählen

import csv
from textblob import TextBlob
from textblob.classifiers import NaiveBayesClassifier
urban_emotions_de = []
train = trainigsmodell_de #liste
cl = NaiveBayesClassifier(train)
cl.classify("Ich liebe die Stadt so sehr")
'Freude'
cl.classify("Stehe schon seit 40 Minuten im Stau, danke!")
'Wut'
cl.classify("Hier ist alles so dunkel, ich hab Angst")
'Angst / Kummer'
cl.classify("Ich schaff es morgen doch nicht in die Stadt :(")
'Angst / Kummer'
cl.classify("Wisst ihr was morgen für einen Tag ist?")
'Neutral'
for text, date, season, long, lat in tweets_de:
    blob = TextBlob(text, classifier=cl)
    for s in blob.sentences:
        tubple = (text, s.classify(), date, season, long, lat)
        urban_emotions_de.append(tubple)
Wie gesagt da funktioniert auch alles, aber eben nicht optimal.
Kannst Du auch was anderes empfehlen?
nezzcarth
User
Beiträge: 1750
Registriert: Samstag 16. April 2011, 12:47

ThomasL hat geschrieben: Sonntag 31. Oktober 2021, 21:05 Textblob ist ja auch nicht gerade ein aktuell sehr gepflegtes Framework, ca. 7 Jahre alt.
Die aktuelle Version von Textblob, 17.1, ist 10 Tage alt: https://pypi.org/project/textblob/
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Oops, da habe ich wohl auf die Schnelle einen Fork gefunden, der eingeschlafen ist. Shame on me.
Obige Aussage wird widerrufen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
rumoll
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2021, 11:44

ThomasL hat geschrieben: Montag 1. November 2021, 08:59 Oops, da habe ich wohl auf die Schnelle einen Fork gefunden, der eingeschlafen ist. Shame on me.
Obige Aussage wird widerrufen.
noch mal zurück zu meiner Frage, kann man mit Spacy auch mehrere Emotionen abfangen?
nezzcarth
User
Beiträge: 1750
Registriert: Samstag 16. April 2011, 12:47

rumoll hat geschrieben: Montag 1. November 2021, 12:02 noch mal zurück zu meiner Frage, kann man mit Spacy auch mehrere Emotionen abfangen?
Während es für klassische Sentimentanalyse (Einteilen in positiv, negativ und ggf. neutral) "fertige" Sachen gibt, musst du für das Klassifizieren von Texten nach Emotionen mehre eigene Arbeit investieren, schauen, welche es Ansätze es gibt und welchen du umsetzen möchtest und dir dann die passende Bibliothek aussuchen. Das kann auch spaCy sein; entsprechende Anleitungen zu einzelnen Ansätzen, auch mit spaCy, findest du schnell über eine Web-Suche. Aber wie du es genau machen möchtest, musst du selbst entscheiden, da das nach meinem Kenntnisstand ein weniger "ausgetretenes" Thema ist.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Schau dir mal diesen Kurs hier an. Danach solltest du wissen wie du deine Problematik lösen kannst

https://www.youtube.com/playlist?list=P ... FPRHjEmbmJ
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
rumoll
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2021, 11:44

nezzcarth hat geschrieben: Montag 1. November 2021, 12:11
rumoll hat geschrieben: Montag 1. November 2021, 12:02 noch mal zurück zu meiner Frage, kann man mit Spacy auch mehrere Emotionen abfangen?
Während es für klassische Sentimentanalyse (Einteilen in positiv, negativ und ggf. neutral) "fertige" Sachen gibt, musst du für das Klassifizieren von Texten nach Emotionen mehre eigene Arbeit investieren, schauen, welche es Ansätze es gibt und welchen du umsetzen möchtest und dir dann die passende Bibliothek aussuchen. Das kann auch spaCy sein; entsprechende Anleitungen zu einzelnen Ansätzen, auch mit spaCy, findest du schnell über eine Web-Suche. Aber wie du es genau machen möchtest, musst du selbst entscheiden, da das nach meinem Kenntnisstand ein weniger "ausgetretenes" Thema ist.
Vielen Dank für Deine Antwort.
Also wie genau ich das machen möchte habe ich schon vorgestellt auch mit welchen Bibliotheken, bloß sind die Ergebnisse nicht optimal. Daher auch die Fragestellung, ob jemand mir ein ähnliches und vielleicht auch ein leistungsstärkeres Framework empfehlen könnte.
spaCy deckt meine Ansätze bzw. Herangehensweise leider nicht ab.
Antworten