Beruflich Dokumente
Kultur Dokumente
Thomas Proisl
2015-09-16
Professur fr Korpuslinguistik
berblick
Merkmalsextraktion
Bag-of-words model
DARIAH NLP-Pipeline
http://www.linguistik.fau.de/~tsproisl/share/Maschinelles_
Lernen_mit_Python.zip
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
Thomas Proisl
Professur fr Korpuslinguistik
ML fr textuelle Daten
Maschinelle Lernverfahren operieren auf Merkmalen von Texten1 um
Aussagen ber die Eigenschaften von unbekannten Texten machen zu
knnen.
Dafr werden Texte in der Regel als Vektoren quantifizierbarer Merkmale
betrachtet (! Merkmalsextraktion).
Grobe bersicht ber typische Problemstellungen:
berwachtes Lernen (supervised learning)
Klassifikation
Regression
Text: Alle textuellen Daten, vom ganzen Roman bis hin zu einzelnen Abstzen oder Stzen
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
berwachtes Lernen
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
Unberwachtes Lernen
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
Thomas Proisl
Professur fr Korpuslinguistik
1. Daten sammeln
2. Quantifizierbare Merkmale aus Daten extrahieren
3. Abhngig von Eigenschaften des gewnschten Clusterings, Anzahl der
Merkmale und Menge der Trainingsdaten ein Clusteringverfahren
auswhlen
4. Daten clustern; Ergebnis: Clustering und Modell
5. Optional: Modell auf unbekannte Daten anwenden
Evaluation: Clustern von annotierten Daten
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
10
Thomas Proisl
Professur fr Korpuslinguistik
11
Scikit-learn cheat-sheet
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
12
Spam
Viagra
Thomas Proisl
Professur fr Korpuslinguistik
P (A \ B )
P (B |A)P (A)
=
P (B )
P (B )
14
P (Viagra|Spam) P (Spam)
P (Viagra)
20 30
30
75
=
50
75
20
=
50
= 0.4
Wir schtzen die Wahrscheinlichkeiten aus den Daten (relative
Hufigkeiten).
Simples Beispiel, fr das wir den Satz von Bayes eigentlich noch nicht
gebraucht htten.
P (Spam|Viagra) =
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
15
P (Viagra|Spam)P (Spam)
P (Viagra)
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
16
Naive-Bayes-Annahme
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
17
Naive-Bayes-Klassifikator
Grundlegende Idee: Wir ordnen einen Text der wahrscheinlichsten
Kategorie zu:
P (Spam|Viagra, Sex, Penis) =
Thomas Proisl
Professur fr Korpuslinguistik
18
Merkmalsextraktion
Thomas Proisl
Professur fr Korpuslinguistik
20
{"beit": 1,
"der hund":
{"beit": 1,
"der mann":
2015-09-16
Thomas Proisl
"den": 1, "der":
1, "hund beit":
"den": 1, "der":
1, "mann beit":
|
Professur fr Korpuslinguistik
1,
1,
1,
1,
"hund": 1, "mann": 1,
"beit den": 1, "den mann": 1}
"hund": 1, "mann": 1,
"beit den": 1, "den hund": 1}
21
Linguistische Annotation:
Lemmata
Part-of-Speech-Tags und vereinfachte POS-Tags
Morphologie: Kasus, Numerus, Genus, Person, . . .
Dependenzstruktur
Named Entities
Konstituentenstruktur
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
22
Thomas Proisl
Professur fr Korpuslinguistik
23
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
24
Installation
Installationsanweisungen unter
http://scikit-learn.org/stable/install.html, bspw.:
pip install -U numpy scipy scikit-learn
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
26
Datenorganisation
Fr unsere Beispiele: Alle Texte einer Klasse in einem Unterverzeichnis;
Verzeichnisname = Klassenname; Dateiname egal
Daten/
|-- Klasse_1
| |-- 01.txt
| |-- 02.txt
| -- 03.txt
|-- Klasse_2
| |-- 04.txt
| |-- 05.txt
| -- 06.txt
|-- Klasse_3
| |-- 07.txt
| |-- 08.txt
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
27
Unser Spielzeugdatenset
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
28
Thomas Proisl
Professur fr Korpuslinguistik
29
sss ist ein Iterator, uns interessiert nur die erste mgliche Aufteilung:
train_index, test_index = list(sss)[0]
Thomas Proisl
Professur fr Korpuslinguistik
30
Merkmalsextraktion
Tokenisierung und Bag-of-words-Modell
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
data_train_counts = count_vect.fit_transform(data_train)
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
31
Tf-Idf
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
32
Naive-Bayes-Klassifikator trainieren:
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(data_train_tfidf, target_train)
Testdaten klassifizieren:
predicted = clf.predict(data_test_tfidf)
Ergebnis evaluieren:
from sklearn import metrics
print(metrics.accuracy_score(target_test, predicted))
print(metrics.classification_report(target_test, predicted,
target_names=corpus.target_names))
print(metrics.confusion_matrix(target_test, predicted))
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
33
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
34
Pipelines
Pipelines
Pipeline trainieren:
text_clf.fit(data_train, target_train)
Testdaten klassifizieren:
predicted = text_clf.predict(data_test)
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
36
SVMs kommen gut mit sehr vielen Merkmalen zurecht: Verwenden von
Uni- und Bigrammen, lineare Support Vector Machine:
from sklearn.svm import LinearSVC
text_clf = Pipeline([(vect, CountVectorizer(ngram_range=(1, 2))),
(tfidf, TfidfTransformer(norm="l2", use_idf=False)),
(clf, LinearSVC()),
])
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
37
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
38
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
39
Beispielpipelines
Bag-of-words-Modell mit Tokens:
text_clf = Pipeline([(extractor, DARIAHAnnotationExtractor()),
(combiner, FeatureCombiner(["Token"])),
(vect, DictVectorizer()),
(tfidf, TfidfTransformer()),
(clf, LinearSVC()),
])
Thomas Proisl
Professur fr Korpuslinguistik
40
FeatureUnion (1)
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
41
FeatureUnion (2)
text_clf = Pipeline([(extractor, DARIAHAnnotationExtractor()),
(union, FeatureUnion(
transformer_list=[
# Bag-of-words-Modell
(bow, Pipeline([
(combiner, FeatureCombiner(["Lemma", "CPOS"])),
(vect, DictVectorizer()),
(tfidf, TfidfTransformer()),
])),
# POS-Tags
(bopos, Pipeline([
(combiner, FeatureCombiner(["POS"])),
(vect, DictVectorizer()),
(tfidf, TfidfTransformer(use_idf=False)),
])),
])),
(normalizer, Normalizer()),
(clf, LinearSVC()),
])
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
42
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
43
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
44
Clustering
k-Means (1)
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
46
k-Means (2)
text_clst = Pipeline([(extractor, DARIAHAnnotationExtractor()),
(union, FeatureUnion(
transformer_list=[
# Bag-of-words-Modell
(bow, Pipeline([
(combiner, FeatureCombiner(["Lemma", "CPOS"])),
(vect, DictVectorizer()),
(tfidf, TfidfTransformer()),
])),
# POS-Tags
(bopos, Pipeline([
(combiner, FeatureCombiner(["POS"])),
(vect, DictVectorizer()),
(tfidf, TfidfTransformer(use_idf=False)),
])),
])),
(normalizer, Normalizer()),
(clst, KMeans(n_clusters=6))
])
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
47
Hierarchisches Clustering
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
48
Delta-Mae
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
49
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
50
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
51
Features
Merkmalsextraktion: CountVectorizer kann weitreichend konfiguriert
werden
Merkmalsauswahl: Varianz, rekursive Merkmalseliminierung,
Merkmalsauswahl mit Hilfe linearer Modelle (bspw. lineare SVM)
Dimensionsreduktion: Hauptkomponentenanalyse (PCA), Manifold
Learning
Weitere berwachte Lernverfahren: Generalisierte lineare Modelle,
Diskriminanzanalyse, SVMs mit verschiedenen Kerneln, Nearest
Neighbors, Entscheidungsbume, . . .
Ensemble-Methoden um mehrere berwachte Modelle zu kombinieren,
bspw. Random Forests
Kreuzvalidierung
Parameter Tuning: Systematisches Durchprobieren von
Parameterkombinationen mit GridSearchCV
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
53
2015-09-16
Thomas Proisl
Professur fr Korpuslinguistik
54