Computerlinguistische Textanalyse 10. Sitzung 06.01.2014 Einführung in die Textklassifikation Franz Matthies Lehrstuhl für Computerlinguistik Institut für Germanistische Sprachwissenschaft Friedrich-Schiller Universität Jena www.julielab.de
Übersicht Klassifikation was ist das? Erster Klassifizierer (Personen Namen) Überwachtes vs. Unüberwachtes Lernen Übungsaufgaben Übersicht 2/12
Allgemein: Begriffliche Einordnung (Nicht )Zugehörigkeit von Objekten zu Kategorien Obst: Apfel, Birne, Mango Gemüse: Bohne, Gurke, Spinat???: Rhabarber, Melone, Erdbeere Ein Klassifizierer würde also diese Zuordnung treffen Dafür werden bestimmte Regeln benötigt Klassifikation was ist das? (1/2) 3/12
Spezieller: Textklassifikationen Spam oder kein Spam? Textgenre Urheberschaft Bewertungen: positiv oder negativ? Worum geht es in Forschungstexten? Klassifikation was ist das? (2/2) 4/12
Klassifikationsregeln die Klassifikationsregeln können von Hand erstellt oder (in den meisten Fällen sinnvoller) erlernt werden Erstellen von Trainings und Testmaterial: ng_list = [(name,gender[:-4]) for gender in names.fileids() for name in names.words(gender)] random.shuffle(ng_list) * ng_dev = ng_list[:500] ng_test = ng_list[500:1000] ng_train = ng_list[1000:] (* benötigt das modul random und names von nltk.corpus) Erster Klassifizierer (Personen Namen) (1/4) 5/12
Features Als nächstes brauchen wir Angaben darüber, was betrachtet werden soll ('features') Diese müssen sorgfältig gewählt werden ('overfitting' vs. 'underfitting'): def gender_features(word): features = {} word = word.lower() # features here... features['first_letter'] = word[0] return features Erster Klassifizierer (Personen Namen) (2/4) 6/12
Training und Test Sets Der 'feature extractor' wird nun angewendet um ein sogenanntes 'training set' und 'test set' zu erstellen: TEST = ng_dev train_set = [(gender_features(n), gender) for (n, gender) in ng_train] test_set = [(gender_features(n), gender) for (n, gender) in TEST] Noch besser ist mit apply_features zu arbeiten: train_set = nltk.classify.apply_features(gender_features, ng_train) test_set = nltk.classify.apply_features(gender_features, TEST) Erster Klassifizierer (Personen Namen) (3/4) 7/12
Naive Bayes in NLTK Anmerkung: bei einem Naive Bayes Klassifizierer von Klassifikationsregeln zu sprechen ist etwas irreführend, da hier keine absoluten Regeln sondern ein Wahrscheinlichkeitsmodel für Zuordnungen erlernt wird. (siehe z.b.: NLTK, Kapitel 6.5) Trainieren und Auswerten eines Naive Bayes Klassifizieres: nb_classifier = nltk.naivebayesclassifier.train(train_set) print(nltk.classify.accuracy(nb_classifier, test_set)) 0.616 Erster Klassifizierer (Personen Namen) (4/4) 8/12
Überwachtes Lernen Lernen anhand von Trainingsmaterial, dessen Zuordnungen bekannt sind Bias Varianz Dilemma: Bias kommt durch falsche Annahmen des Klassifizierers; Abhängigkeiten werden nicht erkannt ( underfitting) Varianz kommt durch zu hohe Sensibilität gegenüber Abweichungen in den Trainingsdaten ( overfitting) Überwachtes vs. Unüberwachtes Lernen (1/2) 9/12
Unüberwachtes Lernen Die zugrundeliegende Struktur von Daten soll allein durch deren Erscheinung abgeleitet werden 'Einfaches' Beispiel: Clustering (Bild: http://home.deib.polimi.it/matteucc/clustering/tutorial_html/) Überwachtes vs. Unüberwachtes Lernen (2/2) 10/12
Personen Namen Klassifizierer Schau dir das 'Notebook' name-gender-classifier an (insbesondere den Abschnitt 'Evaluation'). Erweitere dann den 'feature extractor' unter konstanter Beobachtung durch die Evaluationsmechanismen. Kannst du die Genauigkeit des Naive Bayes Klassifizierers durch geeignete Features erhöhen? Übungsaufgaben (1/2) 11/12
Hausaufgaben Les' das Kapitel 6.1.3: Document Classification des NLTK Buchs Vollziehe nach, was dort gezeigt wird und löse dann die Übung 4 des Kapitels * Versuche weitere Features hinzuzufügen und überlege warum es besser/schlechter wird. (Denke auch an vorherige Sitzungen!) Dokumentiere bitte was du versuchst. Übungsaufgaben (2/2) 12/12