370 likes | 759 Views
Wortarten-Tagging für Nomen. Einleitung. Markus Gündert. Wortarten - Tagging. Inhalt der Präsentation. Einleitung: 1. Was versteht man unter Wortarten-Tagging ? Definition Beispiel 2. Motivation für Wortarten-Tagging Wofür dient Wortarten-Tagging? 3. Tags & Tagsets
E N D
Wortarten-Taggingfür Nomen Einleitung Markus Gündert
Wortarten - Tagging Inhalt der Präsentation Einleitung: • 1. Was versteht man unter Wortarten-Tagging? • Definition • Beispiel • 2. Motivation für Wortarten-Tagging • Wofür dient Wortarten-Tagging? • 3. Tags & Tagsets • Tag – Begriffserklärung • TagSet – Begriffserklärung • STTS – Tagset • 4. Lemmatisierung • Begriffserklärung • Probleme und Lösungsideen Seite 2
Wortarten - Tagging Inhalt der Präsentation Projekt Modul 2 : Nomen-Tagging: • 5. Projektbeschreibung • Aufgabenstellung & Rahmenbedingungen • Input & gewünschter Output • 6. Vorüberlegung & Programmablauf • Vorüberlegung Nomenerkennung • Übersicht Programmablauf • 7. Implementierung (Pseudocode) • Aufbau des Lexikons • Einlesen der tokenisierten Datei • Nomenerkennung für Wörter, die NICHT am Satzanfang stehen • Nomenerkennung für Wörter, die am Satzanfang stehen • Tags setzen und in die Datei zurückschreiben • Präsentation des Perl-Programms • 8. Evaluierung • AWK-Skript • Vergleich mit Tree-Tagger Ergebnisse Seite 3
1. Was versteht man unter Wortarten-Tagging zu deutsch: Wortartenannotation Anreicherung der Wortformen um grammatische Informationen Genauer: Zuweisung von Wortarten-Kennungen (Tags) an Tokens im Text Token: eine durch Leerzeichen abgegrenzte Buchstabenfolge Wortarten: Adjektive, Adverben, Konjunktionen, Nomen, Partizipien, Präpositionen, Pronomen,Verben... Ein System das eine solche Analyse und Generierung leistet heißt PART-OF-SPREECH TAGGER (POS) 1.1 Definition: Seite 4
1. Was versteht man unter Wortarten-Tagging TokenPOS - TagLemma Im APPRART im Falle NN Fall|Falle von APPR von familiären ADJA familiär Zwischenfällen NN Zwischenfall oder KON oder gesundheitlichen ADJA gesundheitlich Problemen NN Problem sind VAFIN sein jedoch ADV jedoch Ausnahmen NN Ausnahme möglich ADJD möglich 1.2 Ein getaggter Beispielsatz: Seite 5
2. Motivation für Wortarten-Tagging Suche in Korpora wenn nicht explizit vermerkt ist, welche Wortart ein Wort hat, kann man nur nach Buchstabenfolgen suchen würde zu vielen ungewollten Suchtreffer führen Beispiel: Suche von Eigennamen „Der Mann heißt mit Nachnamen Herr Mann“ Maschinelle Übersetzung Voraussetzung für das Parsing (Syntaxanalyse) 2.1 Wozu dient Wortarten-Tagging? Seite 6
3. Tags & Tagsets Tag = Kürzel zur Benennung der Wortart bzw. Unterwortart bezieht sich immer auf genau ein Token beim Tagging-Vorgang wird jedem Token ein Tag zugeordnet 3.1 Tag - Beriffserklärung Seite 7
3. Tagsets Ein Tagset ist eine definierte Menge an Tags, die annotiert werden können Anzahl der Tags schwankt je nach Sprache, Korpus undEntwicklungsstand zwischen 45 (Penn Treebank Tagset) und über 160 (C6 Tagset) geringe Anzahl an Tags geringe Fehlerrate; lässt allerdings keine feine linguistischen Unterscheidungen zu Große Anzahl an Tags Ambiguität und Fehlerrate steigt kodieren außer Wortarteninformation noch semantische, syntaktische oder morphologische Information 3.2 Tagset - Begriffserklärung Seite 8
3. Tagsets STTS = Stuttgart-Tübingen-TagSet Tagset für die deutsche Sprache umfasst 54 Tags jedes Tag gehört zu einer von elf Hauptwortarten (Nomen, Verben, Artikel, Adjektive usw.) oder ist ein spezielles Tag, z.B. für Satzzeichen hierarchischer Aufbau: Sieben Hauptwortarten sind weiter unterteilt in Unterwortarten Bsp. Nomen: Aufteilung in NN und NE bis zu 3 Hierarchieebenen 3.3 STTS - Tagset Seite 9
3. Tagsets 3.4 Auszug aus dem STTS Seite 10
4. Lemmatisierung Lemma = Grundform eines Wortes Lemmatisierung: Reduktion auf die Grundform eines Wortes Lemma von Nomen: Nominativ Singular Beispiel: Autos Auto Flugzeuge Flugzeug 4.1 Begriffserklärung Seite 11
4. Lemmatisierung Idee: Lemmatisierung durch Streichung der “en“-Endung Beispiele: Felsen Fels Situationen Situation Techniken Technik Aber: Aufgaben Aufgab Gruppen Grupp Maßnahmen Maßnahm 4.2 Probleme und Lösungsideen Seite 12
4. Lemmatisierung Lemmatisierung durch Streichung der “en“-Endung Zusatzbedingung: Wort endet auf “-ten“ Beispiele: Aktivitäten Aktivität Piloten Pilot Schriftarten Schriftart Aber: Experten Expert Geschichten Geschicht Raketen Raket 4.2 Probleme und Lösungsideen Seite 13
4. Lemmatisierung Lemmatisierung durch Streichung der “en“-Endung Zusatzbedingung: Wort endet auf “-nten“ Beispiele: Agenten Agent Präsidenten Präsident Studenten Student Aber: Renten Rent Komponenten Komponent Konten Kont 4.2 Probleme und Lösungsideen Seite 14
4. Lemmatisierung Lemmatisierung durch Streichung der “en“-Endung Zusatzbedingung: Wort endet auf “-eiten“ Beispiele: Arbeiten Arbeit Fähigkeiten Fähigkeit Zeiten Zeit Aber: Seiten Seit 4.2 Probleme und Lösungsideen Seite 15
4. Lemmatisierung Zusatzbedingung: Wort endet auf “-keiten“ Beispiele: Möglichkeiten Möglichkeit Schwierigkeiten Schwierigkeit Tätigkeiten Tätigkeit Gleiches gilt für Wörter, die auf “-heiten“ enden: Einheiten Einheit Gegebenheiten Gegebenheit Wahrheiten Wahrheit 4.2 Probleme und Lösungsideen Seite 16
4. Lemmatisierung schwierig, allgemeine Lemmatisierungsregeln zu finden für manche Nomen lassen sich dennoch Regeln definieren Regel 1: Lösche die en-Endung raus, wenn Nomen auf –keiten, –heiten oder –ungen endet Beispiel: Schwierigkeiten Schwierigkeit Einheiten Einheit Schwingungen Schwingung 4.2 Probleme und Lösungsideen Seite 17
4. Lemmatisierung Regel 2: Lösche die e-Endung raus, wenn Wort auf –teile endet Beispiel: Vorteile Vorteil Anteile Anteil Ersatzteile Ersatzteil 4.2 Probleme und Lösungsideen Seite 18
Wortarten-Taggingfür Nomen Projekt Modul 2 Markus Gündert
Wortarten - Tagging Inhalt der Präsentation Projekt Modul 2 : Nomen-Tagging: • 5. Projektbeschreibung • Aufgabenstellung & Rahmenbedingungen • Input & gewünschter Output • 6. Vorüberlegung & Programmablauf • Vorüberlegung Nomenerkennung • Übersicht Programmablauf • 7. Implementierung (Pseudocode) • Aufbau des Lexikons • Einlesen der tokenisierten Datei • Nomenerkennung für Wörter, die NICHT am Satzanfang stehen • Nomenerkennung für Wörter, die am Satzanfang stehen • Tags setzen und in die Datei zurückschreiben • Präsentation des Perl-Programms • 8. Evaluierung • AWK-Skript • Vergleich mit Tree-Tagger Ergebnisse Seite 20
5. Projektbeschreibung Ziel: Erstellung eines regel- und lexikonbasierten Wortarten-Taggers in Perl Anforderungen an den Tagger: automatische Erkennung und Lemmatisierung von Nomen Tagset, der verwendet werden soll: STTS (Stuttgart-Tübingen TagSet) Nomen werden als „NN“ (Normales Nomen) getagged (1 tab Abstand) Eigennamen (NE) werden ebenfalls als „NN“ getagged Evaluierung: mit Hilfe eines AWK-Skripts Vergleich mit dem Ergebnis des TreeTaggers (AWK-Skript) 5.1 Aufgabenstellung & Rahmenbedingungen Seite 21
5. Projektbeschreibung Input:Output: <s><s> Zeitungen Zeitungen NN Zeitung informieren informieren über über aktuelle aktuelle Geschehnisse Geschehnisse NN Geschehnis in in der der Politik Poilitik NN . . </s></s> 5.2 Input & gewünschter Output Seite 22
6. Programmablauf & Algorithmus Nomenerkennung anhand Großschreibung Problem: Satzanfang Abhilfe: Wörter am Satzanfang gegen ein Nomen – Lexikon abgleichen Alternative Möglichkeiten, wenn Wort nicht im Lexikon vorkommt: Nomenerkennung anhand von Endungen: -ung,-ungen, -keit, -keiten, -sel, -urm, ürme, io Ausschließungsprinzip anhand von Kontext: 2 Nomen meistens nicht hintereinander am Satzanfang Bsp: „Das Haus ist groß“ 6.1 Vorüberlegung Nomenerkennung Seite 23
6. Programmablauf & Algorithmus Aufbau eines Nomen-Lexikons (einmalig) wenn möglich, Lemma gleich mit ablegen tokenisierte Textdatei von Modul 1 einlesen Wörter, die nicht am Satzanfang stehen, auf Großschreibung untersuchen falls groß geschrieben, Lexikon um dieses Wort eventuell ergänzen Wörter am Satzanfang gegen Lexikon abgleichen oder alternativ auf Kontext und Endung überprüfen NN-Tags setzen 6.2 Übersicht über den Programmablauf Seite 24
7. Implementierung Grundlage für das Lexikon: Textfiles mit bereits über 500 000 enhaltenen Nomen: Vorverarbeitung nötig: Leerzeichen und Ziffern rauslöschen 7.1 Aufbau des Lexikons - Pseudocode Seite 25
7. Implementierung Pseudocode: read (all nomen_textfiles) { var Nomen = aktuelleZeile; //schreibt den aktuellen Zeileninhalt in die Variable bereinige(Nomen); //Leerzeichen und Zahlen rauslöschen (if Endung == -heiten or –keiten or –ungen or –teile { lemma = lemmatisiere(Nomen); //Anwendung der Lemmatisierungsregeln HashDBM.add(Nomen, lemma); } else { HashDBM.add(Nomen); } } 7.2 Aufbau des Lexikons und Lemmatisierung Seite 26
7. Implementierung Pseudocode: read (tokenisierte_Datei.txt) { var wort = aktuelleZeile; //lies jede Zeile der Datei ein if(/<s>| ‘ | “ /) { //falls neuen Satzanfang erreicht merk_dir_pos(wort); //merk dir, welche Wörter am } Satzanfang stehen } 7.3 Einlesen der tokenisierten Datei Seite 27
7. Implementierung Pseudocode: If (wort.position != satzanfang && wort.großgeschrieben == true) { istNomen[i] = true; //merke dir, dass dieses Wort ein Nomen ist //falls gefundenes Nomen noch nicht vorhanden in der Hash-DBM if(/not exists HashDBM(aktuellesWort)/) { lemma = lemmatisiere(aktuellesWort); //ergänze HashDBM HashDBM.add(aktuelles_Wort, lemma); } i++; } 7.4 Nomenerkennung für Wörter, die NICHT am Satzanfang stehen Seite 28
7. Implementierung Pseudocode: If (Wort.position == Satzanfang && nextWord is not Nomen) { //Kontextberücksichtigen If (exists HashDBM{Wort} ) { istNomen[i] = true; //merke dir, dass dieses Wort ein Nomen ist } else //alternative Nomenerkennung anhand von Endungen if (Wort.endung== /ung$|ungen$|keit$|keiten$|sel$|urm$|ürme$|io$/) { istNomen[i] = true; } else { istNomen[i] = false; } } 7.5 Nomenerkennung für Wörter, die am Satzanfang stehen Seite 29
7. Implementierung Pseudocode: For(i=0; i<wortAnzahl; i++) { If (istNomen[i] == true) { write(Datei, wort +“\tab NN “ + “\tab“ + lemma); } else { write(Datei, wort); } } 7.6 Tags setzen und in Datei zurückschreiben Seite 30
7. Implementierung 7.7 Präsentation des Perl - Programms Seite 31
8. Evaluierung Vergleich des Tagging-Ergebnisses mit dem des TreeTaggers Awk-Skript: // kopiert Tagging-Ergebnisse in eine gemeinsame Datei awk “NR==FNR{a[FNR]=$1\"\t\"$2;next} {print a[FNR] \"\t\" $2}" treetagger.txt myresult.txt > vergleich.txt // vergleicht Tagging-Ergebnisse awk “$2 ~ /NN/ {gesamt++} $2==$3 && $1!~/<s>|<\/\s>/ {korrekt++} $2 ~ /NE/ {ne++} END{print \"Treetager hat \"gesamt\" Nomen erkannt\n\MyTagger hat davon \"korrekt\" Nomen korrekt erkannt\n\Erkennungsquote: \"korrekt*100/gesamt\"%\n\"ne\" NE wurden der Einfachheitshalber als NN getagged\"}" vergleich.txt 8.1 AWK-Skript Seite 32
8. Evaluierung Tokenisierte Beispiel-Textdatei mit 1420 Tokens “beispiel.txt” TreeTagger erkannte darunter 296 Nomen Mein Tagger erkannte davon 291 Nomen korrekt Erkennungsrate: 98,31% 54 NE wurden einfachheitshalber als NN getagged 8.2 Vergleich mit TreeTagger - Ergebnisse Seite 33
8. Evaluierung 8.2 Vergleich mit TreeTagger - Ergebnisse Seite 33