Automatisches Part-of-Speech Tagging, mit besonderer
Transcription
Automatisches Part-of-Speech Tagging, mit besonderer
Universität Stuttgart Institut für Maschinelle Sprachverarbeitung Azenbergstraße 12 D-70174 Stuttgart Studienarbeit Automatisches Part-of-Speech Tagging mit besonderer Berücksichtigung der Einsatzmöglichkeiten in einem TTS-System fürs Polnische Mateusz Wiącek Matrikelnummer: 1993394 Betreuer: PD Dr. phil. Bernd Möbius Betreuer: Prof. Krzysztof Marasek, Polish-Japanese Institute of Information Technology Prüfer: PD Dr. phil. Bernd Möbius Studienarbeit Nummer: 40 Beginn der Arbeit: 01.06.2005 Ende der Arbeit: 31.10.2005 Hiermit erkläre ich, daß ich die vorliegende Arbeit selbständig verfasst habe und dabei keine andere als die angegebene Literatur verwendet habe. Alle Zitate und sinngemäßen Entlehnungen sind als solche unter genauer Angabe der Quelle gekennzeichnet. Mateusz Wiącek Stuttgart, den 22. Oktober 2005 Inhaltsverzeichnis 1 Einführung 1.1 Computerlinguistik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Motivation, Ziele und Struktur der Arbeit . . . . . . . . . . . . . . . . . . . . 2 Sprachsynthesesysteme 2.1 Kann eine Sprache synthetisiert werden? . . . . . . . 2.2 Komponente eines TTS-Systemes . . . . . . . . . . . 2.2.1 Linguistische Analyse . . . . . . . . . . . . . 2.2.2 Akustisches Modul . . . . . . . . . . . . . . . 2.3 Anwendungsgebiete . . . . . . . . . . . . . . . . . . . 2.4 Übersicht der kommerziellen Systeme fürs Polnische 2.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . 7 7 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 11 11 14 17 18 20 3 Korpuserschließung und maschinelle Vorverarbeitung 3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Was ist ein Korpus? . . . . . . . . . . . . . . . . . . . . 3.3 Aufbau der Korpora . . . . . . . . . . . . . . . . . . . . 3.3.1 British National Corpus . . . . . . . . . . . . . . 3.3.2 IPI PAN Korpus . . . . . . . . . . . . . . . . . . 3.4 Automatische Verarbeitung . . . . . . . . . . . . . . . . 3.4.1 C++ und Textverarbeitung . . . . . . . . . . . . 3.4.2 Korpora fürs Deutsche . . . . . . . . . . . . . . . 3.4.3 Korpora fürs Polnische . . . . . . . . . . . . . . . 3.5 Tagsets . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Was ist ein Tagset? . . . . . . . . . . . . . . . . . 3.5.2 Bestimmung der Tagsets . . . . . . . . . . . . . . 3.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 22 23 23 24 25 25 26 29 36 36 37 41 4 Part-of-Speech Tagging 4.1 Was bedeutet Tagging? . . . . . . . 4.2 Taggingansätze . . . . . . . . . . . . 4.2.1 Supervised vs. Unsupervised 4.2.2 Regelbasiertes Tagging . . . . 4.2.3 Stochastisches Tagging . . . . 4.3 Der Tree Tagger . . . . . . . . . . . 4.3.1 Arbeitsweise . . . . . . . . . 4.3.2 Training und Tagging . . . . 4.3.3 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 43 44 44 47 47 49 50 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Eric Brill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 51 51 53 54 55 55 57 5 Anbindung des Regelbasierten-Taggers an TTS-System 5.1 Festival . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Modularisierung von Festival . . . . . . . . . . . . 5.1.2 Part-of-Speech-Tagging in Festival . . . . . . . . . 5.2 Anpassung des Algorithmus von Eric Brill an Festival . . 5.2.1 Originalquellcode und Struktur des Algorithmus . 5.2.2 Änderungen des Algorithmus . . . . . . . . . . . . 5.3 Anbindung an Festival . . . . . . . . . . . . . . . . . . . . 5.3.1 Neues POS-Modul . . . . . . . . . . . . . . . . . . 5.3.2 Anbindungsstelle, Ablauf und Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 58 59 60 61 61 62 63 64 65 4.5 4.6 Transformation-Based Error-Driven Tagger von 4.4.1 Initial Tagger . . . . . . . . . . . . . . . 4.4.2 Final State Tagger . . . . . . . . . . . . 4.4.3 Verbesserungen . . . . . . . . . . . . . . 4.4.4 Training und Tagging . . . . . . . . . . 4.4.5 Ergebnisse . . . . . . . . . . . . . . . . . Vergleich der beiden Ansätze . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . 6 Zusammenfassung und Kommentar 67 6.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.2 Zukunft der Sprachsynthese . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 A Tagsets 71 A.1 Modifiezierte S-Tagset mit IPI PAN Zuordnung . . . . . . . . . . . . . . . . . 71 B Relationstrukturen und Festival B.1 Interne Festivalsatzstruktur im Fringe-Format . . . . . . . B.2 Interne hierarchnisch aufgebaute Festivalsatzstruktur, die Module des Äusserungstypen TEXT erzeugt wurde . . . . B.3 Beispielsitzung und Tagging im Festival . . . . . . . . . . 4 73 . . . . . . . . . . . 73 entsprechend der . . . . . . . . . . . 74 . . . . . . . . . . . 75 Abbildungsverzeichnis 2.1 2.2 Module eines TTS-Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Beispiel einer internen Festivalstruktur, erstellt mit dem Visualisierungstool Fringe für den englischen Satz: „Most precincts had a third of the votes counted"; Quelle: http://www.cogsci.ed.ac.uk/~amyi/mate/fringe.html . . . 16 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Anzahl der verschiedenen Wortformen im deutschen Texten Grösse des deutschen Lexikons . . . . . . . . . . . . . . . . Die häufigsten Wortarten in deutschen Texten . . . . . . . . Die Grösse des polnischen Lexikons . . . . . . . . . . . . . . Neue Wortformen im polnischen Lexikon . . . . . . . . . . . Die häufigsten Wortarten im IPI PAN Korpus . . . . . . . . Verschiedene Wortarten in polnischen Texten . . . . . . . . Neue Wortformen in polnischen Texten I . . . . . . . . . . . Neue Wortformen in polnischen Texten II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 28 29 31 31 32 34 35 35 4.1 4.2 4.3 4.4 4.5 4.6 Taggingansätze nach [Linda Van Guilder 1995] . . Möglicher Ablauf eines regelbasierten Taggers . . . Möglicher Ablauf eines stochastischen Taggers . . . Entscheidungsbaum des Tree Taggers [Schmid, 94] Präfixbaum des Tree Taggers [Schmid, 94] . . . . . Ablauf des Brill Taggers [Brill, 92] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 45 46 48 49 52 5.1 Prozess der Anbindung von dem Brill Tagger an Festival . . . . . . . . . . . . 66 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabellenverzeichnis 2.1 Kommerzielle Sprachsynthesesysteme des Polnischen, Quelle: Internetseiten der Produzenten bzw. Anbieter . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 3.3 3.4 Größe des British National Korpus . . . . . . . . . . . . . . . . . . . . . . . . 23 PJWSTK-Tagset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Änderungen bei der Unifikation von zwei Varianten des STTS-Tagsets . . . . 41 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Präzision des Tree Taggers für das Deutsche . . . . . Präzision des Tree Taggers für das Polnische . . . . . Die häufigsten Verwechslungen des Tree Taggers fürs Die häufigsten Verwechslungen des Tree Taggers fürs Die häufigsten Verwechslungen des Brill Taggers fürs Die häufigsten Verwechslungen des Brill Taggers fürs Vergleich des Brill Taggers und des Tree Taggers . . 5.1 Änderungen im Brill-Tagger Algorithmus . . . . . . . . . . . . . . . . . . . . 63 . . . . . . . . . . . . Deutsche Polnische Polnische Deutsche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 50 50 51 55 56 57 A.1 Unifikation von PJWST-Tagset und IPI PAN Tagset . . . . . . . . . . . . . . 72 6 Kapitel 1 Einführung 1.1 Computerlinguistik Computerlinguistik, ist ein Kompositum, also ein Wort, das aus mehreren eigenständig gültigen Teilwörtern besteht. In diesem Fall sind es die zwei Teilwörter Computer und Linguistik. Nach der allgemeinen Regel für das Deutsche, sollte die Bedeutung von Komposita in der umgekehrten Reihenfolge abgelesen werden. Computerlinguistik ist also eine Linguistik, die zur Analyse der natürlichen Sprache einen Computer verwendet. Die Schwierigkeit bei der Definition des Begriffes besteht darin, dass die zwei Teilwörter zu zwei verschiedenen Bereichen der Wissenschaft gehören, Bereichen, die sich auf den ersten Blick sogar gegenseitig ausschließen. Computer kommt von der Informatik, einer exakten Wissenschaft; Linguistik wiederum gehört zu der Gruppe der humanistischen Wissenschaften. Und tatsächlich liegt Computerlinguistik an der Grenze dieser beiden Wissenschaften - sie versucht nämlich die natürliche Sprache mit Hilfe von mathematischen Werkzeugen zu formalisieren. Die praktische Aufgabe der Computerlinguistik besteht darin, Computerprogramme zu entwickeln, die bestimmte, an Sprache geknüpfte Leistungen erbringen. Dazu gehören zum Beispiel: • Die Unterstützung von Autoren beim Verfassen von Texten, z.B. beim Finden des treffenden Ausdrucks oder der richtigen Terminologie. • Die Unterstützung beim Übersetzen von Texten in eine andere Sprache oder die vollständig automatische Übersetzung. • Die Umsetzung von gesprochener Sprache in geschriebene und von geschriebener Sprache in gesprochene, z.B. bei telefonischen Auskunftsdiensten oder Lesegeräten für Blinde (Spracherkennung und Sprachsynthese). Eine Wissenschaft lässt sich aber auch durch ihr theoretisches Interesse definieren. Bei Computerlinguistik werden bei den Untersuchungen Computer verwendet, Automaten, die Symbole (Kombinationen von Nullen und Einsen) nach bestimmten Regeln manipulieren können. Natürliche Sprachen, genauso wie Zahlen, sind Symbolsysteme - sehr komplexe und vielschichtige Symbolsysteme. Computerlinguistik versucht Computerprogramme zu entwerfen, welche die Operationen, die der Mensch mit den Wörtern einer Sprache durchführt, zumindest teilweise, simulieren. Die Computerlinguistik ist in diesem Sinne eine Linguistik, welche die Computersimulation als methodisches Mittel einsetzt, um unser 7 Wissen über menschliche Sprachen zu vertiefen.(Quelle: http://de.wikipedia.org/wiki/ Computerlinguistik) 1.2 Motivation, Ziele und Struktur der Arbeit Um die Vielseitigkeit der Computerlinguistik zu demonstrieren, habe ich mich entschieden eine Arbeit zu verfassen, die über möglichst viele Gebiete der Computerlinguistik geht. Sie sollte sich sowohl mit rechnerisch-praktischen, als auch mit theoretischen Problemen befassen - es ist nämlich der fundamentale Gegenstand der Computerlinguistik diese zwei Fertigkeiten zu verbinden. Einerseits sind Gebiete wie Syntax, Morphologie oder Phonetik für die Computerlinguistik wichtig, andererseits werden jedoch deren Ziele mit Hilfe von Computern erreicht, die die „mathematische“ Analyse und Beschreibung erlauben. Diese Arbeit wird sowohl theoretische als auch praktische Techniken behandeln. Sie wird einerseits Elemente der Fachgebiete der Computerlinguistik diskutieren wie Morphologie, Syntax und Statistik; andererseits aber die Anwendungsgebiete und verwendeten Techniken wie Sprachsynthese, Generierung und Verarbeitung von Korpora und Extraktion von Daten, Generierung von Regeln sowie zahlreiche Programmiertechniken, die den Techniken zu Hilfe kommen. Um den Begriff Computerlinguistik besser verstehen zu können, werde ich zusätzlich in Kapitel 2 die möglichen kommerziellen Anwendungen dieses Fachgebietes, sowie einige, auf dem Markt vorhandene Produkte (die endgültigen Ergebnisse der Arbeit von professionellen Computerlinguisten) präsentieren. Um das Bild vollständig zu machen wird auch in Kapitel 2 und in Kapitel 5 auch kurz die Funktionsweise und der Aufbau des Programms Festival beschrieben. Festival 1 wurde an der Universität Edinburgh entwickelt und ist ein allgemeines Grundgerüst zum Programmieren von Spracherzeugungssystemen (automatische Umsetzung von geschriebener Sprache in gesprochene Sprache). Das Programm ist in seiner Funktionalität und Funktionsweise den meisten kommerziellen Sprachsyntheseprogrammen sehr ähnlich - liefert auch bei entsprechendem Aufwand (Programmierung und Vorbereitung) vergleichbare oder sogar bessere Resultate. Festival steht für wissenschaftliche Zwecke und Forschungszwecke frei zur Verfügung. Im Laufe der Arbeit werden Gebiete besprochen und Techniken vorgestellt, die zu einem gemeinsamen Ziel führen. In Kapitel 2 wird sehr allgemein Sprachsynthese besprochen, wobei ich mich grundsätzlich auf die Modularisierung, die Funktionsweise und die kommerziellen Anwendungen konzentriere. Hier wird zum ersten Mal ein Mechanismus der automatischen Zuweisung von Wortklassen (allgemein ein POS-Tagger genannt) vorgestellt. Ab hier beginnt der Prozess der Einbindung eines regelbasierten Taggers an Festival. Der Tagger sollte das Polnische verarbeiten können. Für diesen Zweck werden in Kapitel 3 benötigte Textmaterialien vorbereitet, die dann in Kapitel 4 zum Training des Taggers verwendet werden. Es werden dann zwei verschiedene Ansätze des Taggens detaiiliert besprochen und vergliechen. Die eigentliche Anbindung an Festival erfolgt dann in Kapitel 5, wo auch das Modul des Taggens, das Festival intern verwendet, ausführlicher besprochen wird. Als Ergebnis dieser Arbeit liegt ein, auf polnischen Texten trainiertes Taggingmodul vor, das direkt in Festival für jede polnische Stimme (aber auch für andere Sprachen) verwendet werden kann. 1 siehe auch http://www.cstr.ed.ac.uk/projects/festival 8 Kapitel 2 Sprachsynthesesysteme Das Ziel dieses Kapitels ist es zu demonstrieren wie komplex ein Sprachsynthesesystem sein kann. Es werden hier die modulare Arbeitsweise, sowie Anwendungen, Probleme bei der Konstruktion und Einsatzgebite eines TTS-Systems vorgestellt. All das sollte dem Leser verdeutlichen, dass jedes verwendete Modul eines TTS-Systems eine sehr spezifische Arbeit leistet und im ganzen System nicht vernachlässigt werden kann. Jedes Modul trägt zur endgültigen Qualität der generierten Stimme bei. In Kapitel 4 wird tiefer in eins der Module, POS-Tagger, eingegangen. Wir werden sehen, dass der POS-Tagger, der schon für sich ein sehr komplexes und aufwendiges Problem ist, im gesamten System nur eine sehr kleinere Rolle spielt. Dieses Kapitel zeigt welche Rolle das ist, und inwieweit ein POS-Tagger für die restlichen Module von Bedeutung ist. 2.1 Kann eine Sprache synthetisiert werden? Eine Sprache ist ein System von Zeichen und gegebenen phonologischen, syntaktischen und semantischen Regeln, die über die Kombination dieser Zeichen entscheiden. Die Sprache definiert sich nicht nur durch Sprechen, sondern auch durch die Schrift. Die Sprache kann die Informationen auf eine besondere Weise übermitteln- durch seine akustische Repräsentation, die als Folge der Laute mit spezifischer Charakteristik kodiert ist. Dieser Code ist für jede Sprache spezifisch. Sprachsynthese selbst ist ein abstrakter Begriff für ein System (ein Programm, eine Anwendung), das imstande ist, eingegebene Sätze, in Form einer Folge von Zeichen, völlig automatisch in ein Sprachsignal so umzuwandeln, das es einer menschlichen Sprache entspricht und als menschliche Sprache identifiziert wird. Deswegen heißen solche Systeme auch TTS-Systeme (eng. Text-to-Speech; de. Text-zu-Sprache). Ein TTS-System kann ganz einfach (aber trotzdem ganz korrekt) als „Vorlesesystem“ oder „Vorlesemaschine“ bezeichnet werden. Ein TTS-System versucht eine der komplexesten kognitiven Fähigkeiten der Menschen, die Fähigkeit zu sprechen, zu modellieren. Die undirekte Aufgabe der Sprachsynthese ist es also, mit Hilfe von Computerprogrammen das menschliche Verhalten, das durch das menschliche Gehirn kontrolliert wird, zu simulieren. Systeme, die das menschliche Verhalten simulieren und wie Menschen handeln werden Künstliche Intelligenz (KI) Systeme genannt. Ein TTS-System ist also nichts anderes als ein KI System, das einen menschlichen Leser nachbilden kann und zwar ohne sein Weltwissen, ohne sein Sprachverständnis und ohne sein Sprechorgane; dabei sollte es aber optimale Verständlichkeit und Natürlichkeit erzielen (Möbius, Folien zum Hauptseminar „Sprachsynthese I“, Universität Stuttgart). 9 Um Vorgänge im Gehirn zu erklären, wird häufig und gerne auf die Funktion des Computers zurückgegriffen. Obwohl alle Vergleiche zwischen Gehirn und Computer irgendwann fehlschlagen, versuchen viele Autoren solch einen Vergleich zu wagen. [Brodbeck, 1997] vergleicht den Rechner und das menschliche Gehirn. Er behauptet, das Gehirn ist - verglichen mit einem Digitalcomputer - sehr langsam. Die CPU eines Prozessors mit 100 MHz leistet 100 Millionen Rechenoperationen in der Sekunde; Nervenzellen sind um den Faktor 10.000 langsamer [Spitzer, 1996]. [Brodbeck, 1997] definiert auch die wichtigsten Unterschiede zwischen dem Rechner und dem Gehirn. „Das Gehirn arbeitet parallel, ein Digitalcomputer seriell. Selbst sehr schnelle Computer haben große Probleme bei der Mustererkennung oder der Bildverarbeitung. Ein Gehirn kann ein Gesicht aus einer großen Menschenmenge dagegen sehr rasch erkennen. Der Grund liegt in der gleichzeitigen Verarbeitung der visuellen Information. Ein auf der Retina des Auges aufgebautes Bild wird auf viele Neuronen gleichzeitig abgebildet. Es aktiviert ein ganzes Netz von Neuronen. Und das verfügbare Potential zur Bildung solcher Vernetzungen ist unüberschaubar groß.“ „Ein weiterer Unterschied zwischen Gehirn und Computer sollte erwähnt werden. Bei einem Prozeß im Gehirn werden nicht einfach Informationen abgespeichert. Es gibt keine Trennung von CPU und Speicher. Vielmehr verändert jede Wahrnehmung, jeder Gedanke die Gewichte in den Verbindungen zwischen den Neuronen (Synapsen). Ganz anders als bei einer Turing-Maschine ist also die Software nicht von der Hardware zu trennen. Es gibt inzwischen Bauelemente, die diese Eigenschaft des Gehirns teilweise simulieren können.“ Auf die Frage, worin der Unterschied zwischen einem menschlichen Gehirn und einem Computer liegt, hat Prof. Dr. Wolf Singer von Max-Planck-Institut für Hirnforschung in einem Interview 1 folgende Antwort gegeben: Das grundlegend andere Prinzip von Gehirnen ist, daß diese als selbstaktive, hochdynamische Systeme angelegt sind. In ihrer Organisation, die wiederum genetisch vorgegeben ist, liegt ungeheuer viel Wissen über die Welt gespeichert. Das Program, nach welchem Gehirne arbeiten, ist durch die Verschaltung der Nervenzellen vorgegeben. Diese Verschaltungen haben sich in einem Jahr-Millionen währenden, evolutionären Prozeß entwickelt, sind optimiert bzw. durch Versuch und Irrtum umgestaltet worden. Dabei ist ein System entstanden, das nicht nur vom Aufbau, sondern auch von den Verarbeitungsprinzipien her grundsätzlich anders organisiert ist als ein Computer. Neuronale Systeme speichern zum Beispiel nicht wie Computer Inhalte in adressierbaren Registern ab. Sie bedienen sich sogenannter Assoziativspeicher, von denen Inhalte nach Ähnlichkeitskriterien abrufbar sind, auch wenn sie mit sehr unvollständigen Informationen gefüttert werden. Aber selbst wenn man den vollständigen Schaltplan dieser assoziativen Speicher besäße, könnte man vermutlich noch nicht einmal einfache Gehirne nachbauen, da deren Leistungen auf dynamischen Verarbeitungsprozessen beruhen, die extrem nicht-linear und deshalb schwer zu stabilisieren sind. Solche Systeme haben die unangenehme Neigung, entweder in überkritische Bereiche zu gelangen, dann werden sie epileptisch, oder abzustürzen und zu schweigen. Sie im richtigen Arbeitsbereich zu halten, ist unendlich schwierig, da sich ihre 1 „Zu wissen, wie eine streunende Katze in Frankfurt überlebt. Ein Gespräch mit Wolf Singer“, Quelle: www.palais-jalta.de/texte/Interview_Singer.rtf 10 Dynamik analytisch nicht beherrschen läßt. Allenfalls könnten die Technologien den Weg beschreiten, den die Natur beschreitet, d.h. sie könnten ein System sich selbst entwickeln lassen. Wenn also Sprechen eine der komplexesten kognitiven Fähigkeiten des Menschen ist, und Computer und Gehirn so unterschiedlich arbeiten, dann scheint doch die Sprachsynthese eine unmögliche Aufgabe zu sein? In diesem Kapitel wird gezeigt, dass man ein Sprachsynthesesystem ohne direkte Simulation des menschlichen Gehirns konstruieren kann. Man bedient sich hier verschiedener Werkzeuge, die Schritt für Schritt die (geschriebene) Sprache analysieren. Im Laufe der Analyse „lernt“der Computer die wichtigsten Gegebenheiten des Textes und generiert auf deren Basis ein akkustisches Signal, das im optimalen Fall einer menschlichen Stimme und natürlichen Sprache entsprechen sollte. 2.2 Komponente eines TTS-Systemes Die Funktionsweise der Sprachsynthese kann allgemein in zwei Phasen geteilt werden. In der ersten Phase wird der eingegebene Text in eine Struktur umgewandelt. Diese Struktur besteht aus Informationen über die Charakteristik der Textstruktur (Syntax, Semantik, usw.), wie z.B. die phonetische Transkription. In der zweiten Phase erfolgt die akustische Synthese des Sprachsignals - die Lautsequenzen werden generiert. Es werden dabei auch die Lautdauer, Intonation und Intensität bestimmt. Die Qualität der Synthese hängt von beiden Phasen ab. In der Wirklichkeit besteht aber ein TTS-System aus mehreren Teilen beide Phasen bestehen aus vielen kleinen Modulen (Abbildung 2.1, Seite 12), die immer eine ganz spezifische Aufgabe zu erfüllen haben. Der Ablauf erfolgt seriell, das heißt die Ausgabe eines Moduls funktioniert als die Eingabe für das nächste Modul. In einer größeren Skala ist auch die Ausgabe des linguistischen Moduls gleichzeitig auch die Eingabe für das akustische Modul. Wichtig zu erwähnen ist es, dass es keine autoritative Aufteilung ist, da nicht in jedem Sprachsynthesesystem alle Module verwendet werden. Auch die Reihenfolge ist nicht für jedes System gleich - die post-lexikalischen Regeln werden zum Beispiel bei manchen Systemen erst nach der Berechnung der Intonation angewendet; die morphologische Analyse erfolgt sehr oft parallel zum Part-of-Speech Tagging. Fraglich ist auch ob die Modellierung der prosodischen Merkmalen zum linguistischen oder akkustischen Modul gehören sollte? Die Abbildung 2.1 kann als eine ziemlich generelle Übersicht der verwendeten Module verstanden werden. 2.2.1 Linguistische Analyse Die Aufgabe dieses Moduls besteht darin, den vom Benutzer eingegebenen Text in eine phonetische Transkription von einzelnen Lauten umzuwandeln. Der Text wird auch mit linguistischen (und zum Teil auch para-linguistischen) Merkmalen annotiert wie: Wortklassen, Satzgrenzen oder Pausen. Tokenizierung Hier wird der Text zum ersten Mal geparst. Der eingegebene String wird in Wörter und Sätze geteilt. Interpunktionszeichen werden so entfernt, dass die Abkürzungen unverändert bleiben. Sätze werden in Tokens zerlegt - Elemente die Wörtern entsprechen. 11 Abbildung 2.1: Module eines TTS-Systems 12 Token Klassifizierung Jedem Token wird ein Tag zugewiesen, der seine Charakteristik beschreibt und später über dessen Aussprache entscheidet. Es ist insbesondere bei Ziffern sehr hilfreich, da z.B. Kardinal- und Ordinalzahlen sehr unterschiedlich ausgesprochen werden. In diesem Modul wird unter anderem versucht zwischen folgenden Tokentypen für Ziffern zu unterscheiden: Uhrzeit, Jahr, Datum, Geldbetrag, Ordinalzahl, Kardinalzahl, Teilungszahl, Dezimalbruch, Masseinheit, Verhältnisse, Telefonnummer, Brüche, arithmetische Ausdrücke, römische Ziffern, e-Mail- und Internetadressen. Jeder Token wird dann seinem Typ entsprechend richtig ausbuchstabiert, z.B.: „Am 12.03.1978“ wird in „am zwölften März neunzehnhundertachtundsiebzig“ umgewandelt oder „[email protected]“ in „Anna at Stuttgart Punkt DE“. POS Tagging Jedem Token wird eine grammatische Kategorie zugewiesen. Diese grammatische Analyse kann sich auf die Wortklassen konzentrieren (Substantiv, Adjektiv usw.) oder auch die syntaktischen Funktionen im Satz bestimmen (Subjekt, Objekt). Dieses erfolgt entweder automatisch (mit Hilfe von Taggern) oder durch Verschlagwortung im Lexikon. Diesem Modul widmet sich die vorliegende Arbeit und POS-Tagging wird soeben ausführlich im Laufe dieser Arbeit behandelt. Im Kapitel 3 wird das Textmaterial für die automatischen Tagger vorbereitet; im Kapitel 4 werden verschiedene Ansätze des automatischen Taggens diskutiert, sowie zwei verschiedene Tagger werden mit dem Textmaterial aus dem Kapitel 3 trainiert. Im Kapitel 5 wird dann ein regel-basierter Tagger an Festival angebunden. Morphologische Analyse Hier werden Merkmale wie Person, Numerus, Tempus oder Modus bestimmt. Die Informationen liefert entweder ein morphologischer Analysator/ Generator 2 oder es wird im Lexikon nachgeschlagen. Um Fremdwörter zu analysieren, die nach anderen Regeln analysiert werden, benötigt man in beiden Fällen trotzdem ein separates Lexikon. Phonetische Transkription Der Text wird hier in eine Reihenfolge von Phonemen zerlegt (phonetische bzw. phonologische Transkription). Die Information wird in manchen Systemen direkt aus einem Vollformlexikon ausgelesen. Die folgenden Beispiele demonstrieren die Einträge aus dem Celex-Lexikon (Festival Format): ("Prozeß" NOM (((p R o) 0) ((ts E s) 1))) ("Lehr" NOM (((l e: R) 1))) ("Keks" NOM (((k e: k s) 1))) Das erste Element ist die Wortform, das zweite das POS-Tag, dann erfolgt die phonetische Transkription nach SAMPA 3 wobei noch zusätzlich die Silben eingeklammert sind, und deren Betonung markiert ist (1 - akzentuiert). 2 wie etwa DEKO f“urs Deutsche, siehe http://www.ims.uni-stuttgart.de/projekte/DeKo/ (Abk. für Speech Assessment Methods Phonetic Alphabet) ist die Kurzbezeichnung für ein computerlesbares phonetisches Alphabet. 3 SAMPA 13 Die Transkription kann für manche Sprachen (z.B. das Polnische 4 ) automatisch erfolgen. Es werden Konversionsregeln verwendet, die automatisch oder manuell erstellt werden (letter-to-sound rules). Pausensetzung Hier werden die Pausen markiert und gesetzt. Die Sätze sollten nicht monoton und gleichmäßig ausgesprochen werden. Die Pausen werden in der natürlichen Sprache nach dem Atemrhythmus und der Interpunktion gesetzt. Sie haben auch verschiedene Längen - eine längere Pause signalisiert z.B. das Ende des Satzes; die Pausen zwischen untergeordneten Sätzen sind ein bisschen kürzer. In TTS-Systemen erfolgt die Pausensetzung meistens automatisch, auf Basis der Beobachtung eines großen Korpus, das prosodisch annotiert ist. Postlexikalische Regeln Dieses Modul sollte die endgültigen Korrekturen des zur Synthese vorbereiteten Materials durchführen. Die Notwendigkeit des Einsatzes entspringt jedoch nicht der Unsorgfältigkeit oder Nachlässigkeit in der linguistischen Analyse, sondern der Kontextualität vieler Regeln. So kann die phonetische Transkription einzelner Wörter korrekt sein (siehe Punkt phonetische Transkription), aber ein stimmhafter Konsonant am Ende des Wortes wird nur dann stimmhaft ausgesprochen, wenn das direkt folgende Wort mit einem stimmhaften Laut anfängt: Erwerb [E R v E R b] des Scheines vs. Erwerb [E R v E R p] von Scheinen. Für das deutsche können hier z.B. folgende Regeln angewendet werden: 1. Bestimmung von Glottal stops und deren Länge. Z.B. Einfügung von Glottal Stop vor einem Wort, das mit einem Vokal anfängt. 2. Verbindung von Affrikaten : [p] + [f] => [pf] 3. Abbildung von [R] auf „schwa“ am Ende der Silbe. 2.2.2 Akustisches Modul Akzent Hier wird es entschieden, ob ein gegebenes Wort einen Akzent tragen sollte oder nicht. Akzent wird definiert, als wahrgenommene akustische Prominenz, also das Hervorragen einer Einheit gegenüber benachbarten. Wir unterscheiden mehrere Typen von Akzenten z.B.: • Der Satzakzent ist die akustische Hervorhebung eines Teils eines Satzes. • Der Wortakzent ist die Akzentuierung einer Silbe eines Wortes. Die Silbe ist die kleinste akzentuierbare Einheit. • Hauptakzent bzw. Nebenakzent. Die Entscheidung wo und welcher Akzent bestimmt werden sollte, hängt von mehreren Faktoren ab: Typ des Wortes, seiner Stelle im Satz oder den grammatischen Merkmale der benachbarten Wörtern. Zusätzlich wird angegeben zum welchen Typ der Akzent gehört. Der Akzent wird durch drei möglichen Korrelate markiert: Intonation (Grundfrequenz), Dauer oder Intensität. Für jedes Korrelat kann es in der Sprachsynthese ein separates Modul mit dem gleichen Namen geben. 4 An der PJWSTK (Polish Japanese Institute of Information Technology) in Warschau wurde ein System entwickelt, dass polnische Texte automatisch mit Hilfe von Konversionsregeln phonetisch transkribiert 14 Intonation Es gibt viele Methoden zur automatischen Bestimmung der Intonation. Der Verlauf der Intonation setzt sich aus den Effekten des Satzakzentes, des Phrasenakzentes, des Wortakzentes, sowie des phonetischen Akzentes zusammen, und ist soeben ein sehr komplexes Problem. In diesem Modul wird versucht die melodischen Standardkonturen (Tonverlauf) für die gegebene Sprache automatisch zu ermitteln. Dies geschieht meistens mit Hilfe von ToBIBeschreibungen (Tone and Breaks Indices, (Beckmann und Hirschberg, „The ToBI annotation conventions.“, Ohio State University, 1994)), sobald ToBI für diese Sprache definiert ist. In TTS-Systemen erfolgt das durch Predict Target F0 durch lineare Regression von allen Faktoren (Position in Phrase, Akzenttyp, Ton, Betonung usw.). Auch hier werden die Module auf großen, prosodisch annotierten Korpora trainiert. Gibt es keine ToBI-Beschreibung für die gegebene Sprache (wie etwa Polnisch), werden einfache Regeln für Intonationskonturen verwendet, die die meisten Fälle abdecken. Es kann auch ganz einfach passieren, in dem man jedem markierten Akzent naiv einen Brücken- oder Hutakzent 5 zuordnet. Dauer Eine weitere Dimension der Prosodie, die Lautdauer, wird hier modelliert. Die Änderung der Lautdauer entspricht in manchen Fällen vollkommen dem wahrgenommenen Akzent (postnuklearer Akzent im Polnischen (Jassem-Demenko)). Die Vokale in akzentuierten Silben, vor dem Ende der Phrase oder Pause, werden in manchen Sprachen länger realisiert. Andererseits werden Vokale in unakzentuierten Silben sowie die, die nacheinander ausgesprochen werden kürzer realisiert. Intensität Die Lautstärke, mit der einzelne Silben oder Laute in der Sprache realisiert werden, ist auch ein Korrelat des Akzentes, das aber in den meisten TTS-Systemen vernachlässigt wird. Möglich scheint die Modellierung der Intensität mit Hilfe von prosodisch annotierten Korpora, auf denen das Modul trainiert werden könnte. Weitere Informationen liegen mir nicht vor. Auswahl der Segmente Je nach Syntheseverfahren werden andere Segmente gewählt. Die Syntheseengines lassen sich in der Regel einem von drei Hauptverfahren zuordnen: Non-uniform unit selection: Aus einer sehr großen Datenbasis werden die am besten passenden Sprachteile (units) miteinander verkettet, mit variabler Länge (nonuniform). Dabei wird eine doppelte Kostenfunktion minimiert: die Stücke sollen gut aneinander passen (Verkettungs-Kosten) und die Vorgaben der Ziel-Prosodie erfüllen (Target-Kosten). Diphon Synthese: Das Sprachsignal wird durch Verkettung von Diphonen 6 erzeugt, die Prosodie-Anpassung (Rhytmus und Melodie) geschieht durch Signal-Manipulation (Abhängig von der Kodierung der Diphone). Braucht weniger Ressourcen und eignet sich damit auch für embedded Anwendungen, klingt aber nicht sehr natürlich. 5 Die Gesamtkontur eines Intotationverlaufes, in dem die Stimme zuerst steigt, bleibt dann relativ hoch für einige Zeit, und senkt sich anschließend wieder 6 Diphone sind Einheiten, die aus Übergängen zwischen zwei Lauten bestehen, und die in der Mitte des ersten Lautes anfangen und in der Mitte des zweiten Lautes enden 15 Formant Synthese: Das Sprachsignal wird anhand physikalischer Modelle berechnet (Formanten nennt man die Resonanz-Frequenzen im Sprechtrakt). Ist sehr flexibel und hat geringste Ressourcen-Anforderung, klingt aber bislang noch sehr unnatürlich. In der Diphonsynthese werden zum Beispiel in diesem Modul Diphone ausselektiert. Sie werden dann in der korrekten Reihenfolge miteinander verkettet. Jetzt erfolgt auch die prosodische Modifikation des Signals (Signalverarbeitung), entsprechend der in der linguistischen Phase generierten Parameter. In der Unit Selection wird das ganze Sprachkorpus als akustisches Einheiteninventar aufbewahrt. Bei der Auswahl der Segmente wird nach den längsten Einheiten gesucht, die in richtigen prosodischen Kontexten liegen, d.h. die, die den in der linguistischen Phase berechneten prosodischen Merkmalen entsprechen, und die mit der Sequenz der Ziellaute übereinstimmen. Man versucht die Anzahl der Verkettungsstellen zu minimieren und die Notwendigkeit der Signalverarbeitung zu reduzieren. Der Unit Selection-Algorithmus wählt aus dem Inventar eine optimale Sequenz von Einheiten, indem derjenige Pfad durch das Zustand-Übergans-Netzwerk gefunden wird, der die Ziel- und Verkettungskosten gemeinsam minimiert. Die generierte Textstruktur stellt graphisch die Abbildung 2.2.2 dar. Abbildung 2.2: Beispiel einer internen Festivalstruktur, erstellt mit dem Visualisierungstool Fringe für den englischen Satz: „Most precincts had a third of the votes counted"; Quelle: http://www.cogsci.ed.ac.uk/~amyi/mate/fringe.html Synthese An dieser Stelle kann ein akkustisches Signal erzeugt werden. Die eigentliche Synthese besteht jetzt darin, die ausgewählten Einheiten richtig zu verketten. Zur Verfügung stehen mehrere Werkzeuge (Synthetiser) zur Verbindung von Einheiten: • PSOLA (Pitch Synchronous Overlap und Add): Die Grundidee von PSOLA ist es, ein Originalsignal durch Multiplikation mit entsprechend verschobenen Fensterfunktionen in kleine Teile zu zerlegen, aus denen sich nach richtiger Addition das Originalsignal 16 rekonstruieren lässt. Durch eine Aneinanderreihung der so entstandenen Signalteile ist eine beliebige Streckung des Originalsignals bzw. bei Auslassung unwichtiger Teile eine Stauchung des Originalsignals möglich. • MBROLA (Multi Band Resynthesis Overlap und Add): ist ein PSOLA-ähnliches Verfahren, die Datenbasis wird aber im Vorfeld bezüglich der Amplitude, Pitch und spektralen Eigenschaften angepasst. • LPC (linear predictive coding) ist ursprünglich ein Komprimierungsverfahren, das auf dem beliebten Quelle-Filter Sprachmodell 7 basiert. • TD-PSOLA (Time Domain PSOLA) • LP-PSOLA (Linear Predictive PSOLA) • FD-PSOLA (Frequency Domain PSOLA) • RELP-PSOLA (Residual-Excited PSOLA) - Hybride zwischen LPC und PSOLA 2.3 Anwendungsgebiete Die Sprachausgabe muß in die Funktionsweise des Systems integriert sein, d.h. sie muß z.B. mit einer visuellen Ausgabe des Systems angemessen interagieren. Die Sprachausgabe muß dem Systembenutzer den Umgang mit dem System erleichtern. Sie soll die Effizienz des Informationsaustausches erhöhen. Dies trifft vor allem auf Anwendungen zu, in denen es dem Benutzer nicht möglich ist, Informationen auf visuellem Wege zu erhalten wie z.B. im Bereich der Telekommunikation. In Verbindung mit anderen Systemausgaben erlaubt die Sprachausgabe eine wünschenswerte Redundanz z.B. in Fahrzeugleitsystemen. Nachfolgend seien einige bereits marktreife Anwendungen angesprochen. • Kommunikation – Vorlesen von SMS und E-mails (email-reading) – Auskünfte – Reservierungen – Angeben von Personalien – Informationen über das Telefon oder Smartphone – Fernabfragbare Anrufbeantworter • Multimedia – Internet: VoiceXML – Internet: Informationsportale – Auto und Navigationssysteme – Wohnung/ Haus – MPEG 4 (Synchronisation von Bild und Ton) 7 Akustische Theorie der Sprachlauterzeugung (Fant, 1960): Die Unterscheidung zwischen Stimmquelle (periodische, stochastische,transiente, gemischte Anregung) und Schallformung im Vokaltrakt führt zum Quelle-Filter-Modell der Sprachproduktion (source and filter model). 17 – Kodierung, militärische Anwednungen – Spielzeuge und Roboter – PDA (Personal Digital Assistant) – Computerspiele (Kommentare: EA-Sports, Kommunikation in Online Communities) – Dialogsysteme – Mensch-Maschine Kommunikation • Bildung – Lern- und Lehrprogrammen – Fremdspracherwerb – Hilfe beim Lesetraining – Instrument für linguistische und psycholinguistische Experimente – Sprechende Bücher • Kontrolle medizinischer Geräte Mediziner werden durch eine Sprachausgabe über das nicht ordnungsgemäße Funktionieren medizinischer Geräte informiert. Diese Anwendung ist vor allem für den intensivmedizinischen Bereich relevant. • Hilfe für Behinderte – Das Ausfüllen von Fragebögen, für Körperbehinderte – Screen Reader, für Blinde (auch Internetseiten, SMS, Emails) – Sprechende OCR oder OSC Systeme, für Blinde – Sprechende Geräte für Leute die Probleme mit der Artikulation haben (S. Hawking) Es ist abzusehen, daß sich das Investitionsvolumen im Bereich der Sprachsynthese weiter erhöhen wird. Die Sprachsynthese wird von der Entwicklung der Hardware stark profitieren. Die Verbindung von Sprachsynthese und Spracherkennung mit Expertensystemen wird weitere Anwendungsgebiete erschließen. 2.4 Übersicht der kommerziellen Systeme fürs Polnische Die Tabelle 2.1 zeigt die Übersicht der kommerziellen Sprachsynthesesystemen für das Polnische. 18 Produkt Neurosoft Syntalk Produzent Preis (brutto) Emtron 49 PLN (ca. 12 EUR) Speak II Altix IVONA IVO Software Beschreibung Syntalk ist kein komplettes TTS-System und braucht, um den Inhalt des Bildschirmes lesen zu können, zusätzlich ein Steuerungsprogramm (screen reader, z.B. Hal Screen Reader oder Supernova). Der einzige Vorteil von Syntalk ist der Preis. Das System bietet leider nur Grundfunktionen, die generierte Stimme ist von sehr schlechter Qualität. 500 PLN SAPI 8 IV TTS-System für Microsoft Windows. Die (ca. 125 generierte Stimme ist verständlich, aber sehr unnaEUR) türlich. Speak II ist mit allen Steuerungsmodulen kompatibel. Parameter wie die Geschwindigkeit oder gesetzte Pausen zwischen den Textfragmenten können eingestellt werden. unbekannt IVONA wird vor allem Firmen angeboten, die Sprachsynthese in Ihre Produkte einbauen wollen meistens Rehabilitation bei Sehschwächen. Zwei Versionen sind erhältlich: IVONA SDK und IVONA Server. Die wichtigsten Merkmale: • Auswahl der Textinterpretation (Parsmethode) • Auswahl der Zeichen die ignoriert werden sollten • Einstellung der Interpretation von Interpunktionszeichen • Die Möglichkeit der Einstellung der Geschwindigkeit (max. x4) ohne Qualitäts- und Intonationsverlust RealSpeak Scansoft 8 SAPI 532 PLN (ca. 130 EUR) Die Stimme ist verständlich und hört sich natürlich an. RealSpeak wurde nach dem Unit Selection Verfahren gebaut und bietet momentan die höchste Qualität der synthetisierten Stimme auf dem polnischen Markt. Der Synthesizer findet seine Anwendung hauptsächlich in der Nachrichtentechnik (Telekommunikation), wird auch einem „normalen“ Benutzer in Form eines kompletten Softwares angeboten („Naturalny Głos“; de. natürliche Stimme). Fortsetzung auf der nächsten Seite steht für peech API SDK", siehe http://www.microsoft.com/speech/techinfo/apioverview/ 19 Produkt Elan Speech Cube Tabelle 2.1 – Fortsetzung aus der letzen Seite Produzent Preis Beschreibung (brutto) Elan unbekannt Elan Speech Cube ist ein TTS-Software KompoInformatinente für Client-Server Architektur. Zwei TTSque Technologien sind erhältlich: • Elan Tempo - Diphonsynthese • Elan Sayso - Unit Selection Elan Speech Cube ist vor allem für eine breite Auswahl von Betriebssystemen gedacht: Windows NT/2000/XP, Linux oder Solaris 2.7/2.8. Die Lizenz kann in verschiedener Form erworben werden: Server, Client oder „Customized Developer“. Tabelle 2.1: Kommerzielle Sprachsynthesesysteme des Polnischen, Quelle: Internetseiten der Produzenten bzw. Anbieter 2.5 Zusammenfassung In diesem Kapitel wurden die Grundlagen der Sprachsynthese besprochen, die als die Modellierung der natürlichen Sprache definiert werden kann. Die Aufgabe der Sprachsynthese besteht darin einen eingegebenen Text (String) in ein akustisches Signal umzuwandeln. Die Umwandlung erfolgt modular und submodular. Der Syntheseverlauf kann grundsätzlich in zwei Phasen geteilt werden: die linguistische Phase und die akustische Phase; jede Phase besteht meistens aus weiteren kleinen Modulen die für verschiedene Analysen verantwortlich sind. In diesem Kapitel wurden die Aufgaben und die Funktionsweisen von den meisten Modulen vorgestellt. Weiterhin wurden die Anwendungsgebiete und Einsatzmöglichkeiten der Sprachsynthese präsentiert: Nachrichtentechnik, Multimedia, Bildung, Medizin u.a. Am Ende des Kapitels befindet sich auch die Auflistung und kurze Beschreibung der kommerziellen TTS-Systeme fürs Polnische. 20 Kapitel 3 Korpuserschließung und maschinelle Vorverarbeitung 3.1 Einführung Würde man weiter den Gedanken aus dem Kapitel 2.1 folgen, ergibt sich folgendes Problem. TTS-Systeme versuchen die menschliche Fähigkeit zu sprechen zu simulieren. Sollte also ein Rechner, genauso wie die Menschen, eine Sprache „erlernen“? Das Erwerben bzw. Erlernen der Sprache bei den Menschen ist ein sehr komplizierter Prozess. Das Kind muss hören und sehen können, es muss empfangene Informationen im Gehirn verarbeiten und seine Mundmuskulatur kontrollieren können. Jedes Kind braucht Menschen in der Umgebung, die mit ihm sprechen und ihm beibringen, welche Namen die Dinge haben, wie ihre Eigenschaften sind und wie Sätze richtig formuliert werden sollten. Der Rechner kann aber das alles nicht - wie sollte er also eine Sprache lernen? Dies passiert in der Computerlinguistik sehr oft mit Hilfe von Korpora, großen Mengen maschinenlesbaren Textmaterials. Der Rechner lernt die Sprache nicht, sondern wird auf diesen Korpora trainiert (man spricht auch sehr oft vom Training). Der Rechner (eigentlich ein Programm) analysiert die in solchen Korpora enthaltenen Informationen und speichert sie in Form von Regeln, Wahrscheinlichkeiten, Listen von Werten usw. Bei der Anlayse wird dann auf diese Daten zugegriffen und auf deren Basis Entscheidungen über natürliche Sprache getroffen. Diese Zugriffsmöglichkeit könnte man bei den Rechnern als die Fähigkeit zu Sprechen bezeichnen. In der Computerlinguistik werden große Mengen maschinenlesbaren Textmaterials „Korpora“ genannt. Zu der popularität von Korpora haben vor allem die Verfügbarkeit großer Textmengen, die immer schnelleren Rechner und die zur Verfügung stehenden großen Speichermedien, beigetragen. Die Daten, die man vor 10 Jahren noch auf einem Großrechner erfassen konnte, können heutzutage auf einem Personal Computer problemlos erfasst werden. Das Ziel dieses Kapitels besteht darin, zu verdeutlichen, wie große Textmengen so vorbereitet werden müssen, damit ein Rechner auf diesen Daten trainiert werden könnte. Insbesondere gilt das für das Training der im Kapitel 4 vorgestellten POS-Tagger. Zu den wichtigsten Aufgaben gehört in diesem Kapitel die Sammlung von entsprechenden Textmaterialien und deren maschinelle und automatische Verarbeitung. Bei dem Verarbeitungprozess werden auch zusätzliche Statistiken generiert. Dieses Kapitel beschreibt die Grundlagen des Aufbaus, der internen Repräsentation, die Generierungsmethoden, Annotierungsmöglichkeiten, 21 sowie die Schwierikeiten bei der Fertigstellung von Korpora. Die Korpora finden den Einsatz der oft bei TTS-Systemen, wo verschiedene Module wie z.B. POS-Tagger oder Lautdauermodellierungsmodull auf solchen Textsammlungen trainiert. Als Resultat enstehen hier verschiedene Korpora (zum Teil auch annotiert), die ihren Einsatz direkt im Kapitel 4 finden. 3.2 Was ist ein Korpus? Ein Korpus wird im [Wahrig, 1996] als „Sammlung, Auswahl von Texten, Äußerungen (als Grundlage für sprachliche Untersuchungen)“ definiert. In der Computerlinguistik ist es also nichts anderes als eine Menge von Text, die von einer Maschine (Rechner) eingelesen und analysiert werden kann. In der Computerlinguistik wird das Wort Korpus meistens in einem Kontext verwendet, bei dem es sich um eine morphosyntaktisch annotierte Textsammlung handelt. Eine Textsammlung kann nach folgenden Kriterien annotiert werden: 1. Nach kategorialen Merkmalen (Wortebene) • Lexikalische Kategorien, wie Substantiv/Nomen, Verb, Adjektiv usw. (POSTagging) • Phrasale Kategorien wie Nominalphrase, Verbalphrase, Adjektivphrase usw. (auch chunken genannt) • Morphologische Eigenschaften - weitere Trennung der lexikalischen Kategorien in Deklinations- und Konjugationsmerkmale wie z.B Genus, Kasus und Numerus bei Nomen, Lemmaangabe usw. 2. Nach funktionalen Merkmalen (Satzebene). Die grammatischen oder syntaktischen Funktionen im Satz, wie z.B. Subjekt, Objekt, Adverbial, Prädikativ, Attribut. 3. Nach funktionalen Merkmalen(Textebene). • Satztypen und Satzarten wie Deklarativsätze, Interrogativsätze, Imperativsätze, aber auch Hauptsätze und Nebensätze (Subjektsätze, Objektsätze, Attributsätze, Adverbialsätze). Darunter auch Satzgrenzen. • Nach der topologischen Felderanalyse (Vorfeld, Linke Satzklammer, Mittelfeld, Rechte Satzklammer, Nachfeld) 4. Nach phonetischen, phonologischen und akustischen Merkmalen (Wortebene und Lautebene) • Wortdauer • Akzent • Phonetische Transkription • Dauer einzelner Laute innerhalb des Wortes • Phonologische Kategorisierung der Laute (Lautart, Stimmhaftigkeitsangabe, Artikulationsart, Artikulationsstelle usw.) • Grundfrequenzangabe 5. Nach statistischen Merkmalen (alle Ebenen) 22 Angabe der Anzahl des Vorkommens eines spezifischen Segmentes in einer gegebenen Textmenge; und weitere Statistiken. Ich werde mich in dieser Arbeit vor allem mit Korpora befassen, die mit lexikalischen und morphologischen Merkmalen und Kategorien annotiert sind - für die Zwecke dieser Arbeit sind vor allem lexikalische Kategorien, Wortarten und Wortklassen von Bedeutung. Es werden auch nicht-annotierte Korpora (Rohkorpora) analysiert, die lediglich einer (grossen) Sammlung von Textmaterial entsprechen. 3.3 Aufbau der Korpora Dieses Kapitel wird die Aufbau von Korpora behandeln. Es wird gezeigt wieviele Informationen ein Korpus kodieren kann, wie komplex diese Informationen sind und wieviel Aufwand bei der Erstellung investiert werden muss. Professionell vorbereitete Korpora werden meistens zu wissenschaftlichen Zwecken frei zur Verfügung gestellt, finden aber ihren Einsatz bei kommerziellen Anwendungen. 3.3.1 British National Corpus Der British National Corpus (BNC) besteht aus 117.599.144 Tokens, sowohl aus geschriebener als auch gesprochenen Sprache. Typ Geschriebene Sprache Gesprochene Sprache Spontane gesprochene Sprache #Kbytes 1362074 100172 84952 #Sätze 5188373 430348 612049 #Wortformen 89740544 6154248 4211216 Tabelle 3.1: Größe des British National Korpus Das BNC wurde nach folgenden Merkmalen annotiert: • POS-Tag (insgesamt 160 verschiedene Kategorien) • Die Grenzen und Wortklasse für jedes Wort • Paragraphen, Kapitel und Header in geschriebenen Texten • Pausen und para-linguistische Merkmale, wie Lachen, in gesprochenen Texten • Meta-textuale Informationen über die Quelle der Texte Der British National Corpus liegt in einem Corpus Document Interchange Format (CDIF) vor, das mit jeder Standard Generalized Markup Language (SGML) kompatiblen Software dekodiert werden kann. Der folgende Ausschnit zeigt das Format des BNC: <s <w <w <w <w <w <c n=0141> CRD>Two <w NN2>men <w VVD>retained <w DPS>their NN2>marbles<c PUN>, <w CJC>and <w CJS>as <w NN1-VVB>luck VM0>would <w VHI>have <w PNP>it <w PNP>they<w VBB>’re AV0>both <w AJ0>roughie-toughie <ptr target=c87nt000> <w NN2>types AV0>as <w AV0>well <w CJS>as <w AJ0>military <w NN2>scientists PUN>&mdash <w AT0>a <w NN1>cross <w PRP>between <w NP0>Albert 23 <w NP0>Einstein <w CJC>and <w NN1>Action <w NN1-NP0>Man<c PUN>! <s n=0142> <!-- ... --> <w DPS>their <w NN1>way <w PRP>to <w NN1>freedom <c PUN>&mdash <w AV0>so <w VVB>get <w NN1-VVG>blasting<c PUN>! </p> <note id=c87nt000> <s n=0143> <w VVN>continued <w PRP>on <w NN1>page <w CRD>7 </note> 3.3.2 IPI PAN Korpus Das IPI PAN ist ein morphosyntaktisch annotiertes Korpus des Polnischen, das im dem Institut für Informatikgrundlagen in der Polnischen Akademie der Wissenschaften (Instytut Podstaw Informatyki Polskiej Akademii Nauk, Polen; kurz IPI PAN). Das Korpus besteht aus 70368788 Tokens, 762169 Typen (verschiedener Wortformen) und 364.366 Lemmata. Der annotierte Text kommt aus verschiedenen Quellen wie: Gegenwärtige Prosa (10%), Alte Prosa (10%), Wissen (10%), Presse (50%), Gesetze (5%), Stenogramme vom polnischen Parlament und Senat (15%). Das Korpus wurde auch mit verschiedenen Typen von Informationen kodiert, wie: • Part-of-Speech Tag (32 Hauptkategorien, kombiniert mit grammatischen Kategorien 1 ) • Morpohologie • Lemmata • Meta-textuale Informationen über die Quelle der Texte Beim IPI PAN Korpus wurde ein XML Korpus Encoding Standard (XCES; Ide i in. 2000) Format verwendet. Folgender Auschnitt kommt aus dem IPI PAN Korpus: <tok> <orth>Porzadek</orth> <lex><base>porzadek</base><ctag>subst:sg:acc:m3</ctag></lex> <lex disamb="1"> <base>porzadek</base><ctag>subst:sg:nom:m3</ctag> </lex> </tok> <tok> <orth>dzienny</orth> <lex><base>dzienny</base><ctag>adj:sg:acc:m3:pos</ctag></lex> <lex><base>dzienny</base><ctag>adj:sg:nom:m1:pos</ctag></lex> <lex><base>dzienny</base><ctag>adj:sg:nom:m2:pos</ctag></lex> <lex disamb="1"> <base>dzienny</base><ctag>adj:sg:nom:m3:pos</ctag> </lex> </tok> 1 siehe Kapitel 3.5 für genaue Informationen 24 Das Korpus, in seiner binären Form kann mit Hilfe von einem, zu diesem Zweck entwickelten Programm namens Poliqarp einfach durchsucht werden. Die Anfragesprache basiert auf der Anfragensprache von Corpus Query Processor (CQP), die in Stuttgart entwickelt worden ist (Christ, 1994), enthält aber zahlreiche Erweiterungen und Verbesserungen gegenüber von CQP [Przepiórkowski, 2004]. 3.4 Automatische Verarbeitung Damit ein Tagger richtig arbeiten kann, muss er vorher die wichtigsten Daten über die Sprache lernen. Solch ein Lernprozess erfolgt mit Hilfe von großen Textmaterialien (Korpora), die verschiedene Informationen enthalten und die in speziellen Formaten vorliegen müssen. Ohne auf die Einzelheiten auf dieser Etappe einzugehen, nehmen wir einfach an, dass für die Zwecke dieser Arbeit folgende Textsammlungen gebraucht werden: 1. Eine Liste von allen möglichen Wortformen, wobei bei jeder Wortform eine Liste von allen Tags vorliegt, die dieser Wortform (in verschiedenen Kontexten) zugewiesen werden können. (nennen wir die Liste eine N-tag Liste). 2. Eine einfache Liste von allen möglichen Wortarten in der gegebenen Sprache. (nennen wir die Liste einfache Liste). 3. Ein manuell getaggtes Korpus, bei dem ein Token pro Zeile vorkommt. Bei jedem Token muss, mit einem Leerzeichen getrennt, der in diesem Kontext zugewiesene Tag stehen (nennen wir diesen Korpus Token-pro-Zeile Korpus). 4. Ein manuell getaggter Korpus, bei dem ein Satz pro Zeile steht. Das Wort muss von dem in diesem Kontext zugewiesenen Tag mit einem Slash getrennt werden. (nennen wir diesen Korpus Satz-pro-Zeile Korpus). Die Korpora (c) und (d) werden in zwei Teile zerlegt. 90% wird zum Training verwendet, 10% zur Evaluation und zum Testen. Sechs verschiedene Textsammlungen fürs Deutsche, und sechs fürs Polnische – insgesamt also 12 Dateien – werden gebraucht. Die Vorbereitung dieser Menge von Textmaterial hat insgesamt mehr als 6 Wochen gedauert. Bei der Vorbereitung wurden zahlreiche Statistiken generiert, die unten in dieser Arbeit interessante Ergebnisse liefern. 3.4.1 C++ und Textverarbeitung Da die Vorbereitung des Textmaterials hauptsächlich an einem Windows-Rechner durchgeführt wurde, habe ich mich entschieden als Programmiersprache für die benötigten Werkzeuge C++ zu verwenden. Dennoch wurde für manche Umkonvertierungen Linux Werkezeuge (wie z.B. awk, perl) verwendet. C++ bietet für Textverarbeitung die C++ Standard Template Library (STL Bibliotheken) die zahlreiche Funktionen enthält, die die Textverarbeitung wesentlich erleichtern. Die vollständige Dokumentation von STL befindet sich unter http://www.cppreference.com/. Ein echtes Problem stellte dabei die Bearbeitung von polnischen Buchstaben, die nicht im ASCII Kodierungsystem kodiert werden (da hier nur das englische Alphabet mit den Buchstaben a-z und A-Z ohne Diakritika kodiert ist). Um diese Zeichen also richtig zu bearbeiten, muss ein Kodierungssystem verwendet werden, das über das reine ASCII hinausgeht. Generell können die polnischen Sonderzeichen in folgenden Systemen kodiert werden: ISO-8859-2 (LATIN2), Windows-EE (CP1250), IBM (CP852) oder UTF-8. Ich habe mich entschieden 25 den UTF-8 Standart für Unicode (ISO 10646-1) zu verwenden, wofür es zahlreiche Gründe gibt: • UTF-8 ist völlig kompatibel mit ASCII, da nur Codes größer als 127 modifiziert werden. UTF-8 kodierte Texte können deswegen problemlos in andere Kodierungssysteme umgewandelt werden und umgekehrt. • UTF-8 ist ein 8-Bit-Zeichencode, und kann alle im Universal Character Set (UCS) kodierten Zeichen darstellen. • Die Länge eines UTF-8 Zeichen ist variabel und kann maximal 4 byte-lang sein. Die Texte, die hauptsächlich aus ASCII Zeichen bestehen, werden deswegen bei Kodierung in UTF-8 nicht wesentlich länger. • Die in UTF-8 kodierten Texte sind (in der Regel) einfach zu erkennen, da die ersten drei Bytes jeder Datei gekennzeichnet werden (BOM - byte order marker). 3.4.2 Korpora fürs Deutsche N-Tag Liste Aus dem TAZ-Korpus habe ich für die ersten 10 Millionen Einträge des Korpuses jeweils kleinere Korpora je 1 Million Einträge extrahiert. Für die restlichen Einträge (ab 10 Millionen) habe ich dann jeweils kleinere Korpora extrahiert, die 3 Millionen Einträge enthielten (es sind insgesamt 39 kleinere Korpora entstanden). Es wurden dann jeweils 2 Dateien als Input genommen und den Inhalt der beiden Dateien verglichen und verkettet. Jedes Wort wurde dann als ein Objekt einer Klasse <word_class> gespeichert: class word_class { public: string wort; --> die Wortart list<string> tags; --> eine Liste von m"oglichen zugewiesenen Tags string tag; --> der letzte Tag aus der Liste (verwendet bei Wortarten die immer eindeutig klassifiziert worden sind) }; Zu diesem Zweck habe ich in C++ ein Programm geschrieben, dass den eingegebenen Text schrittweise bearbeitet. • Jede Zeile aus den beiden Inputdateien wird eingelesen und so zerlegt, das das Wort als wort gespeichert und der gefundene Tag als einziges Element der liste tags, sowie als tag gespeichert wird (ab dem zweiten Schritt stehen bei manchen Wortarten schon mehrere Tags, die Variable tag ist dann das letzte Element der Liste). Alle gefundenen Wortarten werden eine Liste der Klasse list<word_class> gespeichert. • Es entstehen aus zwei Inputdateien zwei Listen dieser Art; die werden dann zuerst sortiert und Duplikate werden entfernt. Die zwei Listen werden dann zusammengefasst, wobei die alphabetische Sortierung erhalten bleibt. • Der Algorithmus läuft dann die ganze Liste durch, und fasst, bei mehrfachen Vorkommen der gleichen Wortformen, alle Tags zu einer Liste, die dieser Wortform zugewiesen wird, zusammen. 26 • Ab dem zweiten Schritt, wird die erste Inputdatei, die schon eine alphabetisch sortierte Liste mit n-tags ist, einfach eingelesen (oder wenn der Algorithmus ohne Unterbrechung läuft, wird einfach die Outputlist des vorherigen Schrittes als das erste Parameter genommen ohne die Datei einzulesen). Den Output jedes Schrittes werden wir in diesem Abschnitt Lexikon nennen. Zahlen, die als Kardinalzahlen klassifiziert worden sind, werden ignoriert und kommen im Lexikon überhaupt nicht vor. Das ist auch die Anforderung für das richtige Lernen der Wortarten der Zahlen beim Tree-Tagger (siehe Kapitel 4.3). Die generierte Datei wurde in ein Format gebracht, das den Richtlinien des Tree-Taggers für ein Vollformenlexikon entspricht. Es sollte eine Datei sein, bei der jede Zeile einer Wortform entspricht und eine Sequenz von Tag Lemma enthält. Jeder Tag sollte direkt nach einem Leerzeichen und jedes Lemma vor einem Tabulatorzeichen oder einem Leerzeichen stehen. Als Folge dieses Algorithmus entstand eine Datei, die im gewünschten Format vorliegt. Die Datei ist 34 MB groß und enthält 1.731.793 verschiedene Einträge. Da das TAZ Korpus automatisch annotiert worden ist, kommen in der Liste aber eventuell Fehler vor. Eine andere Möglichkeit zur Erstellung einer N-tag Liste war die Verwendung eines morphologischen Generators, der zu jeder Wortform alle möglichen morphologischen Varianten liefert (hier nicht verwendet). Eine Erstellung der n-tag Liste aus dem TAZ Korpus ermöglichte, als Nebeneffekt, die Extraktion zahlreicher Statistiken, die folgende Fragen beantworten: Wie viele verschiedene Wörter kommen in einer bestimmten Menge von Text vor? Der obige Algorithmus hat insgesamt 39 Dateien analysiert. 9 davon enthielten 1.000.002 Tokens (die ersten neun), eine enthielt 3.595.781 Tokens (die letzte), die restlichen enthielten 3.000.002 Tokens. Der Durchschnittwert von verschiedenen Wortformen bei den ersten neun Dateien beträgt 100.867, 6667 (10, 086%), bei den restlichen 29 Dateien lag er bei 202.433, 7241 (6, 74%). Die Anzahl der verschiedenen Wortformen ist konstant für eine gegebene Größe des Textmaterials, d.h. in einer bestimmten Menge vom normalen Text, kommt immer eine ähnliche Anzahl von verschiedenen Wortformen, und beträgt durchschnittlich ca. 8%. Davon zeugt die fast gerade untere Linie, wie in der Abbildung 3.1 demonstriert. Welche Wörter treten im Deutschen am häufigsten auf ? Welche Wortklassen haben diese Wörter? Die häufigste Wortform im TAZ Korpus ist das Interpunktionszeichen Komma (im TAZ Korpus 5238445 aufgetreten), gefolgt von Artikeln, Konjunktionen und Präpositionen. Das häufigste Nomen (NN) im TAZ Korpus ist Jahren (79831), das häufigste Eigenname (NE) ist Berlin (90603), das häufigste Verb ist werden (326185). Wie viele neue Wörter werden bei Analyse einer bestimmten Menge von Text zum Lexikon hinzugefügt, und welche Wortklassen haben diese Wörter? Die Annahme bei der Frage war, dass die Anzahl von neuen Wortformen konstant verläuft und nie eine sichtbare Grenze erreicht (alle Wörter in einer Sprache). Die allgemein akzeptierte Annahme, mindesten für das Deutsche, wurde von der erzeugten Statistik bestätigt. Die Grösse des erzeugten Lexikons, das eine Menge von verschiedenen Wortformen bildet, steigt konstant mit den neu analysierten Texten, was die Abbildung 3.2 demonstriert. Die Statistiken bestätigen auch die allgemeine Annahme, dass Substantive (NN+NE) und Adjektive (ADJA+ADJD) zu den produktivsten Wortarten gehören, was die Abbildung 3.3 demonstriert. 27 Abbildung 3.1: Anzahl der verschiedenen Wortformen im deutschen Texten Abbildung 3.2: Grösse des deutschen Lexikons 28 Die Statistiken bestätigen auch die allgemeine Annahme, dass Substantive (NN+NE) und Adjektive (ADJA+ADJD) zu den produktivsten Wortarten gehören, was die Abbildung 3.3 demonstriert. Abbildung 3.3: Die häufigsten Wortarten in deutschen Texten Einfache Liste Die einfache Liste wurde direkt aus dem TAZ Korpus extrahiert. Token-pro-Zeile Korpus Die Vorbereitung des Token-pro-Zeile Korpuses, musste von einem manuell getaggten Korpus erfolgen. Dazu habe ich das deutsche Referenzkorpus des IMS (empfohlen und zur Verfügung gestellt vom Helmut Schmid) verwendet. Das Korpus lag schon in dem gewünschten Format vor. Satz-pro-Zeile Korpus Die Erstellung des Satz-pro-Zeile Korpuses erfolgte direkt aus dem Token-pro-Zeile Korpus. Alle entstandenen Dateien wurden in ein gemeinsames Zeichenkodierungsystem, LATIN1 (ISO 8859-1), gebracht um den korrekten und konstanten Ablauf des Trainings zu gewährleisten. 3.4.3 Korpora fürs Polnische N-Tag Liste Die Erstellung einer n-tag Liste fürs Polnische musste auf Grund der fehlenden Verfügbarkeit eines großen polnischen getaggten Korpuses (auf dessen Informationen frei zugegriffen werden kann) mit Umwegen und Kompromissen erfolgen. Zuerst habe ich mit Hilfe von Poliqarp (das maximal 6.000.000 Ergebnisse anzeigt) im IPI PAN Korpus nach dem Interpunktionszeichen Punkt gesucht (die Suche nach Satzgrenzen ist nicht möglich), und die gefundenen Tokens, zusammen mit maximalem linkem und rechtem Kontext (in Poliqarp 20), in eine Datei exportiert (die Wortarten im Kontext waren ebenfalls annotiert). Die exportierte Datei lag in einem HTML-Format und wurde anschließend in ein TXT-Format umgewandelt (UTF-8). Die entstandene Datei war 4.173.823 Kbytes groß, 29 und wurde in kleinere, jeweils 10 MB große Dateien geteilt (es entstanden somit 204 kleinere Teile), die im folgenden Format vorlagen: Artur [ign] Baniewicz [subst:sg:nom:m1] Drzymalski [adj:sg:nom:m1:pos] przeciw [qub] Rzeczpospolitej [subst:sg:gen:f] Z [prep:gen:nwok] daleka [adj:sg:nom:f:pos] wyglądała [praet:sg:f:imperf] jak [conj] trochę [qub] większy [adj:sg:nom:m3:comp] pakunek [subst:sg:nom:m3] <b>,</b> [interp] pozostawiony [ppas:sg:nom:m3:perf:aff] na [prep:loc] przystanku [subst:sg:loc:m3] przez [prep:acc:nwok] roztargnionego [adj:sg:acc:m1:pos] pasażera [subst:sg:acc:m1]. [interp] Diese Formate wurden, mit Hilfe von einem speziell für diesen Zweck geschriebenen C++ Programms in eine Liste umgewandelt und alphabetisch sortiert, wobei nur nach der Wortart und dem POS-Tag (das erste Element der geklammerten Wortartinformationen) gesucht wurde: odkrytą adj ppas odkrywa fin odkrywają fin odkrywając pcon odkrywający pact odkrywających pact odkrywali praet odkrywam fin odkrywamy fin odkrywana ppas odkrywane ppas odkrywani ppas Ab diesem Schritt sah der Ablauf der Erstellung der polnischen N-tag Liste genauso wie bei der deutschen (siehe Kapitel 3.4.2) aus. Es wurde jeweils eine Datei analysiert, und die gefundenen neuen Wortarten oder schon enthaltene Wortarten mit neuen Tags wurden zu der Liste hinzugefügt. Es wurden dabei auch Statistiken generiert, wobei auf Grund der Methode der Extraktion aus dem IPI PAN Korpus (es wurde nach Punkt gesucht) viele nicht aussagefähig sind. Man kann beobachten, dass bei einer ziemlich konstanten Anzahl von verschiedenen Wörtern in neuen Dateien, der Zuwachs von der generierten Liste im letzten Abschnitt fast linear verläuft. Die Annahme hier war, genauso wie fürs Deutsche, dass die Anzahl der Wortformen im Polnischen nie eine Grenze erreicht, und die Anzahl der neu hinzugefügten Wortarten konstant wächst. Folgende generierte Statistik lässt aber hoffen, dass fürs Polnische solch eine Grenze existiert (zumindest annäherungsweise), was im letzten Abschnitt der Abbildung 3.4 erkennbar ist. Das generierte Korpus enthält 638.770 verschiedene Wortarten. Die Methode der Extraktion hat sich also als ziemlich effizient erwiesen (IPI PAN hat nach der Dokumentation 762.169 verschiedene Tokens). Interessant ist auch eine Statistik, die explizit die Anzahl der neuen hinzugefügten Wörter anzeigen würde. Die Verhältnisse demonstriert die Abbildung 3.5. Die Graphik zeigt eine stark sinkende Tendenz der neuen Wortformen in der generierten Liste (bei letzter Datei, die 17.236 Tokens enthielt, wurden nur 484 neue Wörter gefunden, 2, 8%). 30 Abbildung 3.4: Die Grösse des polnischen Lexikons Abbildung 3.5: Neue Wortformen im polnischen Lexikon 31 Wieder mal, diesmal fürs Polnische haben sich Nomen und Adjektive als die produktivsten Wortarten erwiesen, was die Abbildung 3.6 zeigt. Die Substantive machen durchschnittlich 41, 76%, und Adjektive (adj+adja) 19, 4% aller Wörter aus. Eine sehr interessante Beobachtung war, dass unter den 564.120 (468.938) Tokens nur 24.333 (13.219) Tokens mehr als einen Tag hatten(4, 31 % bzw. 2, 818%). Wichtig dabei ist, dass diese Beobachtung auf den, in der geschriebenen Sprache vorkommenden Wortarten basiert. (die Zahlen ein Klammer beschreiben die Ergebnisse, nachdem alle Großbuchstaben in Kleinbuchstaben umgewandelt worden sind, was im Polnischen aussagekräftiger ist) Abbildung 3.6: Die häufigsten Wortarten im IPI PAN Korpus Einfache Liste Die Vorbereitung der einfachen Liste fürs Polnische hat sich als eine sehr zeitaufwendige Aufgabe erwiesen. Zu diesem Zweck habe ich rohes Textmaterial verschiedener Sorten gesammelt, und in mehreren Schritten eine Liste von einfachen Wörtern extrahiert. Das Textmaterial bestand aus: • 1940 Rich Text Format (RTF) Dateien • 5 Compiled HTML (CHM) Dateien • 2671 Microsoft Word Format (DOC) Dateien • 18979 Hypertext Markup Language (HTML) Dateien • 108 Portable Document Format (PDF) Dateien • 507 Only Text (TXT u.a.) Dateien und umfasste folgende Sorten: • ältere Romane und Prosa (polnische Originale und Übersetzungen) • neuere Romane und Prosa (polnische Originale und Übersetzungen) 32 • technische Hand- und Fachbücher • Schul- und Universitätsaufsätze • Diplom-, Magister- und Doktorarbeiten • Zeitungstexte • Gesetze • Geschäftstexte • Telefonbuch Die Extraktion erfolgte in folgenden Schritten (in chronologischer Reihenfolge): 1. Alle Formate wurden zuerst in ein gemeinsames only Text Format umgewandelt. 2. Alle entstandenen Dateien wurden zu einer Datei verbunden, die 1, 9GB groß war. 3. Die Datei wurde dann wieder geteilt, in kleinere Dateien jeweils gleicher Größe (10 MB). 4. Alle only text Dateien wurden in ein gemeinsames Zeichenkodierunksystem UTF-8 umgewandelt. 5. Aus der ersten Datei wurde eine Liste von einzelnen Wörtern (ein Lexikon) erstellt, die sortiert wurde, und aus der Duplikate entfernt wurden. 6. Die zweite Datei unterging dann dem gleichen Prozess. Die Wörter, die noch nicht im Lexikon nicht vorgekommen sind, wurden hinzugefügt; auf dem Wege entstand ein neues Lexikon. 7. Dieser Prozess wurde für alle Dateien ausgeführt. So entstand eine Liste von allen, in den gesammelten Texten vorgekommenen Wortformen (insgesamt 2.125.618). 8. Aus dem Lexikon wurden mehrstufig die häufigsten fehlerhaften beobachteten Wörter (Schreibfehler und unkorrekte Schreibweisen) gefiltert (288.236 Einträge). 9. Bei Umwandlung aller Großbuchstaben in Kleinbuchstaben, reduzierte sich die Größe des Lexikons um weitere 320.000. 10. Die endgültige Output-Datei ist 21.948.284 kByte groß und enthält 1.541.826 Tokens, was 24.474 Seiten Text entspricht. Der obige Prozess hat auch zahlreiche statistische Daten generiert, die wiederum Antworten auf folgende Fragen liefern können: Welches ist das häufigste Wort im Polnischen? Das häufigste Wort im Polnischen ist die Präposition w (de.in), die 5.170.148 vorgekommen ist. Das häufigste Substantiv im Polnischen ist Warszawa (de. Warschau), das 443.987 mal vorgekommen ist. Zur Erinnerung - das häufigste Eigenname im Deutschen war Berlin. Wie viele verschiedene Wortformen (Tokens) enthält ein durchschnittlicher polnischer Text? Im Durchschnitt kommen in einem polnischen Text 7.91% verschiedener Wörter. Die Abbildung 3.7 stellt dieses Verhältniss graphisch dar. 33 Abbildung 3.7: Verschiedene Wortarten in polnischen Texten Wieviel Text müsste man sammeln, um „alle“ Wörter im Polnischen extrahieren zu können? Man geht in der Sprachwissenschaft davon aus, dass solch eine Grenze nicht existiert. Die Abbildung 3.9 zeigt aber (die polynomische Trendlinie), dass die Anzahl der neuen Wörter konstant sinkt. (in der Abbildung 3.8, wo auch die Größe des Textmaterials zum Vergleich gezeigt wird, kann man den Verlauf der neuen Wörtern sehr schlecht erkennen; aus diesem Grund wird auch die Abbildung 3.9 in kleinerer Skala gezeigt). Im letzten Schritt wurden in einem Text, der 28.768 Wörter enthält, 57 neue Wörter gefunden (0, 19%). Vier Schritte früher wurden in einem Text mit 1.329.086 Wörtern, 1.766 neue Wörter gefunden (0, 13%). Wichtig zu erwähnen ist, dass das Textmaterial auf dieser Etappe der Analyse noch sehr viele fehlerhafte Wörter enthalten hat, und dass groß- und kleingeschriebene gleiche Tokens, als zwei verschiedene erkannt wurden. Satz-pro-Zeile Korpus Einen manuell getaggtes Korpus habe ich für die Zwecke dieser Arbeit von Krzysztof Marasek (PJWSTK ) bekommen. Das Korpus lag in einem Satzpro-Zeile Format vor, aus dem ich direkt einen Token-pro-Zeile Korpus extrahiert habe. Token-pro-Zeile Wie im vorherigen Punkt erwähnt, lag der erhaltene Korpus schon im richtigen Format vor. Alle entstandenen Dateien wurden anschließend in ein gemeinsames Zeichenkodierungsystem, ISO-8859-2 (LATIN2) gebracht, um den richtigen und konstanten Ablauf des Trainings zu gewährleisten. 34 Abbildung 3.8: Neue Wortformen in polnischen Texten I Abbildung 3.9: Neue Wortformen in polnischen Texten II 35 3.5 3.5.1 Tagsets Was ist ein Tagset? Ein Tagset ist einfach eine Liste von „lexikalischen Kategorien“, zu denen eine Wortform gehören kann. Der Begriff Wortform umfasst neben echten Wortformen auch Zahlen in Ziffern, Satzzeichen, Sonderzeichen (wie z.B. $, §), abgetrennte Wortteile oder Kompositionserstglieder (wie z.B. „Ein- und Ausgang“). Jede mögliche lexikalische Kategorie trägt den Namen eines Tags. Jede Hauptwortart (nach lexikalischen Kategorien klassifiziert; wie z.B. Nomen, Verb usw.) wird normalerweise noch weiter subklassifiziert, nach distributionellen aber auch morphologischen und syntaktischen Kriterien. So kann z.B. die lexikalische Kategorie Nomen in zwei weitere wortartenspezifische Kategorien subklassifiziert - normales Nomen (Tisch) und Eigennomen (Hans). Das STTS-Tagset (Stuttgart-Tübingen Tagset [Schiller, A., Teufel, S. Thielen, C., 1995]) enthält nach diesen Richtlinien 11 Hauptwortarten (Nomina, Verben, Artikel, Adjektive, Pronomina, Kardinalzahlen, Adverbien, Konjuktionen, Adpositionen, Interjektionen und Partikel). Diese Hauptwortarten sind unterschiedlich stark subklassifiziert. So werden z.B. die Pronomina in weitere Untergruppen unterschieden, wobei die Untergruppen wieder unterteilt sein können, je nachdem ob sie NP-ersetzende (substituierend, tag S), nomenbegleitende (attribuierend, tag AT) oder adverbiale (tag AV) Funktion besitzen. Das STTS-Tagset hat insgesamt 54 tags. Welche Merkmale für ein Tagset relevant sind, hängt von dem Ziel der Konstruktion sowie von der zugrunde liegenden Sprache ab. Ein perfektes Tagset sollte also für jede denkbare Anwendung alle relevanten Merkmale besitzen - so detailliert wie möglich sein. So könnte z.B. für jede mögliche Zusammensetzung von morphologischen Merkmalen ein separater Tag existieren. Eine sehr detaiilierte Informationen kodiert z.B. das IPI PAN Korpus: • Boisz [bać:fin:sg:sec:imperf ] - Wort boisz ist (eigentlich ein Teil der Konstruktion poln. bać się, de. Angst haben), ein finites Verb „nicht in der Vergangenheitsform“, Singular, 2.Person, unvollendet. • Podjechał [podjechać:praet:sg:m3:perf ] - Wort podjechał (von poln. podjeżdżać, de. ankommen) ist ein Pseudopartizip (Partizipium), im Singular, sächlich maskulin, vollendet. IPI PAN Korpus kodiert insgesamt eine breite Anzahl von verschiedenen Merkmalen, die in zwei Gruppen geteilt wurden: • Grammatische Kategorien: Person, Numerus, Tempus, Modus, Diathese/Genus Verbi, Komparation, Aspekt, Negierung, Akzent, Vokalität, Akkomodierung, Agglutination, Postpräpositionierung. • Flexeme, subklassifiezierte lexikalische Merkmale: Nomen, depretiative Nomen, Verben usw., insgesamt 32 Tags. Die Merkmale werden dann bei der Kategorisierung zu einer komplexen Kategorie kombiniert, z.B. [podjechać:praet:sg:m3:perf ] besteht aus folgenden Teilen: • podjechać (Wortform) • praet (Lexkikalisches Merkmal) • sg:m3:perf (Grammatische Merkmale) 36 Die vollständige Beschreibung der Kodierung in IPI PAN befindet sich in [Przepiórkowski, 2004]. Da die Konstruktion eines Tagsets auch sehr sprachspezifisch ist zeigt das BritishNational-Tagset, in dem nur für die Verben insgesamt 25 verschiedene Tags verwendet werden (im STTS gibt es hingegen nur 5 Tags für Verben). Darunter werden nur für das Verb BE 7 Tags und für das Verb HAVE 6 Tags verwendet, wohingegen die deutschen Entsprechungen SEIN und HABEN überhaupt nicht unterschieden werden. 3.5.2 Bestimmung der Tagsets In diesem Kapitel werden Tagsets definiert und bestimmt, die weiter in dieser Arbeit zum Taggen von polnischen und deutschen Texten verwendet werden. Im Kapitel 4 wird beschrieben, wie zwei Tagger für zwei Sprachen trainiert werden. Jeder Tagger (siehe Kapitel 4.4.4 und Kapitel 4.3.2) benötigt zum Training Textsammlungen, die in besonderen Formaten vorliegen müssen (siehe Kapitel 3.4). Alle Dateien, die zum Training auf einer Sprache verwendet werden, müssen, um einen korrekten Ablauf zu gewährleisten nach gleichen Tagset getaggt werden. In dieser Arbeit wurden Textsammlungen verwendet, die nach verschiedenen Tagsets getaggt wurden. In diesem Kapitel werden jeweils zwei Tagsets miteinander unifiziert. Tagset fürs Polnische Fürs Training vom Tree-Tagger (siehe Kapitel 4.3) werden zwei verschiedene Textsammlungen benötigt. Die Erstellung von diesen Textsammlungen (N-tag-Liste und Token-pro-Zeile Korpus) wurde im Kapitel 3.4.3 besprochen. Das Token-pro-Zeile Korpus wurde nach einem Tagset (siehe Tabelle 3.3) getaggt (nennen wir dieses Tagset PJWSTK-Tagset), in dem nur das Verb (7 Tags) und das Zahlwort (2 Tags) subklassifiziert werden. Das PJWSTK-Tagset in solch einer Form wird auch beim Trainieren vom Brill Tagger (siehe Kapitel 4.4) verwendet. Die N-tag-Liste wurde aus dem IPI PAN Korpus extrahiert, der nach einem internen Tagset (die genaue Beschreibung befindet sich im [Przepiórkowski, 2004]) getaggt. Um dem Tree-Tagger (siehe Kapitel 4.3) einen korrekten Ablauf zu gewährelisten mussten die Tagsets unifiziert werden und die Tagsersetzungen in beiden Textsammlungen vorgenommen werden. Die Tagsets wurden nach folgenden Prinzipen unifiziert: 1. Das PJWSTK-Tagset hat drei Tags für Zahlwörter (normales Numeral, Kardinalzahl und Ordinalzahl); das IPI PAN Tagset hat jedoch zwei (Kardinalzahl und Sammelzahl). Die zwei Mengen haben leider nur einen Tag gemeinsam (Kardinalzahl). Alle Arten der Numerale wurden zu einer Kategorie Numerale (NUM) zusammengefasst. 2. Die Kategorie des IPI PAN Tagsets winien, die die Lexeme winien, powinien, rad enthalten (alle entsprechen mehr oder weniger den deutschen Lexem „sollen“, die nur analytische Zeitformen bilden). Alle Lexeme dieser Art wurden zu der Kategorie V (Verb) hinzugefügt. 3. Die Kategorie predykatyw, die die synthetisch unflektierbare Flexeme kodiert, welche ausschließlich analytisch modifiziert werden können; z.B. warto (de. es lohnt sich) - będzie warto (de. es wird sich lohnen). Sie bestimmt auch eine eigene Klasse, zu der Wortformen gehören, die nach dem PJWSTK-Tagset zu mehrfachen Kategorien gehören können. So wird z.B. das Wort to („das“ demonstrativ verwendet) im IPI 37 Tag Bedeutung Beispiele V ADJPAP ADJPRP INF ADVANP ADVPRP VNONP N ADJ ADV PRON INTER NUM NUMCRD NUMORD P PART CONJ $. $, Czasownik/Verb adjektivisches Passivpartizip adjektivisches Aktivpartizip Infinitivform adverbiales Perfektpartizip adverbiales Präsenspartizip unpersönliche Verbform Nomen Adjektiv Adverb Pronomen Interjektion Numeral Kardinalzahl Ordinalzahl Präposition Partikel Konjunktion Interpunktion am Ende des Satzes Interpunktion innerhalb des Satzes mówiłem chowany celujący biegać ujżawszy celując mówiono pies biały blisko ja, ty ach, och, ech dwudziestu jeden, dwa, trzy (Zahlen im Nominativ) pierwszy przy, od, na że, iż, li, nie, tu, to, nieco, jeszcze i,a, oraz ., !, ? komma,-, Tabelle 3.3: PJWSTK-Tagset PAN Korpus als pred getaggt, was nach dem PJWSTK-Tagset als PART (Partikel) zu klassifizieren ist. Das Wort trzeba (de. man sollte) im IPI PAN als pred klassifiziert, gehört nach dem PJWSTK-Tagset zur Kategorie ADV (Adverb); noch anders ist es bei z.B. słychać, das beim IPI als pred klassifiziert wird, was nach dem PJWSTKTagset zu der Kategorie INF (Infinites Verb) gehört. Insgesamt gibt es bei IPI PAN Korpus nur 25 Wortformen dieser Kategorie. Die Kategorie pred wurde also komplett weggelassen. Die Wörter, die nur einen möglichen Tag pred haben (mit einem Pfeil markiert), habe ich manuell getaggt; bei den restlichen habe ich einfach die Kategorie pred gestrichen. brak pred subst czas pred subst czuć inf pred subst dosyć pred qub doć pred qub niepodobna pred --> ADJPAP podobna adj pred pora pred subst potrzeba pred subst stać inf pred strach pred subst szkoda pred subst słychać pred --> INF to adj conj pred qub subst 38 trza pred --> ADV trzeba pred qub warto pred --> ADV wiadomo pred --> VNONP widać pred qub wolno pred --> ADV wstyd pred subst znać inf pred miech pred subst żal pred subst 4. Ein ähnliches Problem stellte die Kategorie ’qub’ (unflektierbare Form, die zu anderen Kategorien nicht passt). Den Wortformen, im IPI PAN als qub klassifiziert werden, sollten nach dem PJWSTK-Tagset entweder die Kategorie PART (Partikel) oder INTER (Interjektion) zugeordnet werden. Um diese Unkompatibilität zu lösen, habe ich einfach die Kategorien PART und INTER zusammengefasst. 5. Die Kategorien xxx (Fremdwörter), sowie ign (nicht erkannte Form) wurden komplett ignoriert. 6. Die Interpunktion stellte auch ein Problem dar, weil es im PJWSTK-Tagset zwei verschiedene Kategorien dafür gibt; eine für satzendende Interpunktionszeichen und eine für satzinterne Interpunktionszeichen. Im IPI PAN gibt es nur eine Kategorie interp, die alle Interpunktionszeichen kodiert. Die Interpunktionszeichen habe ich von Hand richtig annotiert. Das endgültige Tagset nach den Modifikationen steht im Anhang A.1. Dieses Tagset wurde bei Training vom Tree-Tagger verwendet. Tagset fürs Deutsche Für das Training vom Tree-Tagger für das Deutsche (siehe Kapitel 4.3) werden zwei verschiedene Textsammlungen benötigt. Die Erstellung von diesen Textsammlungen (N-tag-Liste und Token-pro-Zeile Korpus) wurde im Kapitel 3.4.3 besprochen. Das Token-pro-Zeile-Korpus wurde nach der Standartversion von STTS-Tagset getaggt; das N-tag-Korpus wurde aus dem TAZ-Korpus extrahiert, das nach einer IMS-Variante des STTS Tagsets getaggt worden ist. Der Hauptunterschied liegt in der Annotierung von indefiniten und demonstrativen Pronomina und Determinatoren. Beim Training des BrillTaggers wurde Standart STTS Tagset verwendet. Standart STTS: Demonstrative und indefinite Pronomina formen separate Tags. Spezielle, lemma-basierte Klassen wurden zu indefiniten Pronomina oder Adverbien (in adverbialer Lesart von viel). • das/PDS weiß ich nicht • diejenige/PDAT Person, die dasselbe/PDAT Kleid trägt • manches/PIAT andere/ADJA Thema; • manch/PIAT anderes/ADJA Thema • keiner/PIS war da; in keiner/PI.AT Form 39 • er hat viele/PIAT Bücher; er trinkt viel/PIAT Wein • er sieht vieles/PIS ein • er ißt viel/PIS; er lacht wenig/ADV • alles/PIS , was recht ist • all/PIAT diese/PDAT vielen/PIAT Leute • die beiden/PIS kamen gleichzeitig • beide/PIS waren da • beide/PI.AT Läufer waren gleich schnell IMS-Variante STTS: Klassen für indefinite Pronomina und Determinatoren und demonstrative Pronomina und Determinatoren formen eine gemeinsame Klasse. Abweichende Einheiten haben ihre spezifische lemma-basierte Klasse PBEID, PALL, PVIEL und PNFL (für nicht flektierendes Pronomen) • das/PROS weiß ich nicht • diejenige/PROAT Person, die dasselbe/PROAT Kleid trägt • manches/PROAT andere/ADJA Thema • manch/PNFL anderes/ADJA Thema • keiner/PROS war da; in keiner/PROAT Form • er hat viele/PROAT Bücher; er trinkt viel/PROAT Wein • er sieht vieles/PROS ein • er ißt viel/PVIEL; er lacht wenig/PVIEL • alles/PALL, was recht ist • all/PALL diese/PROA vielen/PROA Leute • die beiden/PBEID kamen gleichzeitig • beide/PBEID waren da • beide/PBEID Läufer waren gleich schnell Die zwei Versionen des STTS-Tagset wurden unifiziert. Manche Kategorien des Standartversion des STTS wurden zu einer Kategorie zusammengefasst. Die Kategorien der IMS-Variante wurden auf einzelne Kategorien der Standartvariante abgebildet. Alle Ersetzungen und Abbildungen zeigt die Tabelle 3.4. Diese Tabelle ist wie folgend zu lesen: wenn in der Spalte Standart STTS mehrere Tags vorkommen, bedeutet das, dass all die Tags zu einer Kategorie zusammengefasst wurden (fett markiert); die Spalte Bedeutung bezieht sich auf die Standart STTS Tags; die Spalte Beispiele gibt Beispiele für die Standart STTS Kategorien; die Spalte IMS STTS listet Tags aus IMS Version des STTS auf, die mit entsprechenden Tags aus der Spalte Standart STTS ersetzt wurden. Standart STTS PDAT Bedeutung Beispiele attribuierendes Indefinitpronomen ohne Determiner [in] dieser [Halle] IMS STTS PALL: allem, allen, aller Forsetzung auf der nächsten Seite 40 Tabelle 3.4 – Forsetzung aus der letzen Seite Standart STTS Bedeutung Beispiele PIS substituierendes Indefinit- keiner, viele, man, pronomen niemand PIDAT attribuierendes Indefinit- [ein] wenig [Waspronomen mit Determiner ser], [die] beiden [Brüder] PIAT attribuierendes Indefinit- kein [Mensch], irpronomen ohne Determi- gendein [Glas] ner PDS substituierendes Demon- dieser, jener strativpronomen PAV VVIZU PPOSAT PTKVZ VAPP VMPP VVPP NN FM PROAT: selben solchem, PROS: niemand PVIEL: viel, ebensoviel PROAV Pronominaladverb PPER IMS STTS PBEID:beide, beidem PNFL: manch, solch dafür, dabei, deswegen, trotzdem irreflexives Personalpro- ich, er, ihm, mich, PPERRF: mir, dich nomen dir Infinitiv mit zu, voll anzukommen, los- VAIZU: anzuhaben zulassen attribuierendes Possessiv- mein [Buch], deine PPOSS: deins, meipronomen [Mutter] ne abgetrennter Verbzusatz [er kommt] an, [er PTKVE: an, auf fährt] rad zugute, zurecht PTKVL: zugute Partizip Perfekt, aux gewesen VAPPF: gewesen Partizip Perfekt, modal gekonnt, [er hat ge- VMPPF: gekonnt hen] können Partizip Perfekt, voll gegangen, ange- VVPPF: gekoppelt kommen normales Nomen Haus, Tisch NN: Haus, Tisch Fremdwörter development, punc- keine Kategorie to Tabelle 3.4: Änderungen bei der Unifikation von zwei Varianten des STTS-Tagsets Dieses modifizierte Tagset wurde beim Training des Tree-Taggers verwendet. 3.6 Zusammenfassung In diesem Kapitel habe ich die wichtigsten Probleme und Ansatzpunkte besprochen, die bei der Erstellung von Korpora auftreten können: annotierte Korpora und deren Formate, morphologische Merkmale, Tagsets und Zeichenkodierungssysteme. Das Ziel wurde auch erreicht und zahlreiche Dateien sind erstellt worden, die direkt für das Training von zwei Anwendungen zur automatischen Wortklassenannotierung verwendet werden können. 41 Kapitel 4 Part-of-Speech Tagging 4.1 Was bedeutet Tagging? Der Begriff Tagging kommt aus dem Englischen und bedeutet die Zuweisung von Tags (de: Etikett, Label) verschiedener Form. Tagging kann in vielen verschiedenen Kontexten und für verschiedene Zwecke verwendet werden. In vielen Kontexten der maschinellen Sprachund Informationsverarbeitung, stellt Tagging den Prozess der Zuweisung von Matadaten an Teile von Daten dar. • Der Inhalt von Webpages ist im HTML-Format kodiert, das die eine Reihe von HTMLTags verwendet. • Tagging wird sehr häufig bei Audiodatenkompression verwendet - hier wird es als "Hinzufügen"verstanden. • In der Linguistik wird es meistens als Part-of-speech Tagging verstanden. In dieser Arbeit wird Tagging aus der linguistischen Sicht betrachtet, als automatisches Part-of-speech Tagging. POS Tagging ist ein Prozess, bei dem die Wortklasse der Wörter bestimmt wird. Die Liste der möglichen Wortklassen, die zugewiesen werden können, wird Tagset genannt (siehe Kapitel 3.5.1). Part-of-Speech Tagging ist viel komplizierter als einfach eine Liste von Wörtern und ihren Wortklassen. Der Grund dafür ist, dass viele Wörter, je nach Kontext, verschiedene Wortklassen repräsentieren können. In vielen (vielleicht sogar allen?) Sprachen ist ein großer Prozentsatz von Wortformen mehrdeutig. Sogar das englische Wort "dogs", das normalerweise nur als Pluralnomen (de: Hunde) interpretiert wird, kann ein Verb sein: 1. A policeman dogs us the whole .(de: Ein Polizist läuft uns den ganzen Tag hinterher) 2. Ronaldo had been dogged by injury all the season.(de: Ronaldo wurde die ganze Saison von einer Verletzung verfolgt) Die Geschichte des POS-Taggings geht auf die Mitte der sechziger Jahre zurück, als das erste maschinenlesbare Korpus (Brown Corpus 1 ) erstellt wurde. Dieses Korpus wurde für das erste automatische Tagging-System (Tagger) verwendet, das eine Fehlerrate von 1 Das Brown Corpus wurde an der Universität Brown von Henry Kucera und Nelson Francis entwickelt, und enthielt ca. 1 Million Tokens 42 knapp 30% hatte (Klein Simmons 1963; Harris 1962). Ein Tagger ist ein Programm, das einen Text, eine Folge von Wörtern natürlicher Sprache (Strings) als Eingabe bekommt, und jedem Wort den richtigen (oder wahrscheinlichsten) POS-Tag zuordnet. Die Ausgabe ist meistens ein mit Tags (und anderen Informationen wie z.B. Lemmata) annotierter Text. Auf der Suche nach besserer Präzision haben die Wissenschaftler im Laufe der Zeit viele verschiedene Tagging-Techniken entwickelt, die immer wieder bessere Resultate geliefert haben. Eine grobe Übersicht der Tagging-Ansätze wird im Kapitel 4.2 gegeben. 4.2 Taggingansätze Die Abbildung 4.1 schildert die Gliederung der verschiedenen Ansätze des automatischen POS-Tagging. Dieses Bild sieht in der Wirklichkeit viel komplizierter aus, weil viele Systeme sehr oft verschiedene, oder sogar alle Ansätze gleichzeitig verwenden. Die Abbildung 4.1 demonstriert die Tagging-Ansätze grafisch. Dieses Kapitel basiert zum grossen Teil auf dem Artikel von Linda Van Guilder, Georgetown University „Automated Part of Speech Tagging: A Brief Overview“ und dessen Literatur. Abbildung 4.1: Taggingansätze nach [Linda Van Guilder 1995] 4.2.1 Supervised vs. Unsupervised Der erste Unterschied zwischen den verschiedenen Tagging-Ansätzen, bezieht sich auf den Automatisierungsgrad des Trainings und des Taggingprozesses. 43 Supervised taggers verwenden vorgetaggte Korpora. Die Korpora kommen im Laufe des ganzen Taggingprozesses zum Einsatz und werden zur Erstellung verschiedener Werkzeuge benutzt, z.B. Worthäufigkeiten, Regelmengen (bei regelbasierten Ansätzen), oder auch Wahrscheinlichkeiten der Tagssequenzen (bei probabilistischen Ansätzen). Unsupervised Modelle brauchen keine vorgetaggte Korpora. Sie verwenden komplexe Berechnungsmethoden um zueinander gehörende Elementmengen Tag- bzw. Wortmengen automatisch aus rohen Texten zu induzieren (z.B. Tagsets). Basierend auf den erstellten Mengen, werden entsprechend entweder probabilistische Informationen für stochastische Tagger berechnet, oder Kontextregeln für regelbasierte Tagger bestimmt. Jeder der beiden Ansätze hat Vorteile und Nachteile. Das erste Argument für die Verwendung des vollautomatischen Ansatzes ist ihre Flexibilität. Für viele Sprachen (wie etwas für das Polnische) existieren einfach keine vorgetaggten Korpora die man zum Training verwendet könnte. Die Erstellung von Trainingsdaten ist sehr teuer (vergleiche Kapitel 3). Der vollautomatische Ansatz hat aber auch seine Nachteile. Die Wortgruppen, die als Folge diesen Methoden resultieren sind nämlich zu ungenau, d.h. man verliert die feine Unterscheidung, die man in den sorgfältig entwickelten Tagsets finden kann (in dem halb-automatischen Ansatz). 4.2.2 Regelbasiertes Tagging Typische regelbasierte Ansätze verwenden kontextuelle Informationen um unbekannte oder mehrdeutige Wörter zu taggen. Diese Regeln werden sehr häufig als Kontextrahmenregeln „context frame rule“ bezeichnet. Zum Beispiel kann solch eine Regel wie folgend aussehen: wenn einem ambigen/ unbekannten Wort X ein Determiner vorausgeht, und ein Nomen folgt, dann ist der Tag für X ist Adjektiv. Diese Regel kann auch wie folgend formalisiert werden. Det - X - n = X/adj Viele Tagger verwenden, zusätzlich zu kontextuellen Informationen, auch morphologische Informationen um den Disambiguierungsprozess zu verbessern. Solch eine Regel für das Englische kann wie folgend aussehen: wenn ein ambiges/ unbekanntes Wort auf -ing endet und ihm ein Verb folgt dann ist es ein Verb (playing, de. Continuous Form von spielen). Manche Systeme verwendet auch Faktoren wie Großschreibung und Interpunktion. Die Information über Großschreibung kann z.B. im Deutschen beim Taggen von unbekannten Nomen helfen. Regelbasierte Tagger benötigen normalerweise ein halb-automatisches Training. IEin möglicher Ansatz der automatischen Regelinduktion bildet die Möglichkeit einen nichtgetaggten Text durch einen Tagger laufen zu lassen und seine Performanz zu analysieren. Der Output des Taggers sollte dann in der ersten Phase manuell korrigiert werden, d.h. alle fehlerhaften Tags sollten durch richtige Tags ersetzt werden. Dieser richtig getaggte Text wird dem Tagger wieder vorgelegt, der die zwei Mengen von Daten vergleichen sollte. Dabei werden die so genannten Korrekturegeln erzeugt. Die Einzelheiten solch eines Ansatzes werden detailliert im Kapitel 4.4 besprochen. Die Abbildung 4.2 stellt diesen Prozess graphisch dar. 4.2.3 Stochastisches Tagging Der Begriff stochastisches Tagging bezieht sich auf eine Menge von verschiedenen Ansätzen im POS-Tagging. Jedes Model, das mit Häufigkeiten oder Wahrscheinlichkeiten arbeitet 44 Abbildung 4.2: Möglicher Ablauf eines regelbasierten Taggers kann als stochastisch bezeichnet werden. Die einfachsten stochastischen Tagger disambiguieren Wörter ausschließlich auf der Basis der Wahrscheinlichkeit, dass ein Wort mit einem spezifischen Tag vorkommt. Dieser Ansatz kann zwar einem Wort den richtigen Tag zuordnen, aber auch für einen Satz eine unzulässige Sequenz von Tags generieren. Eine Alternative zum Worthäufigkeitsansatz bildet die Möglichkeit eine Wahrscheinlichkeit für eine bestimmte Sequenz von Tags zu berechnen. Solch eine Methode wird sehr häufig als N-Gram-Ansatz bezeichnet - der beste Tag für ein gegebenes Wort wird durch die Wahrscheinlichkeit bestimmt, dass es mit n vorgehenden Tags auftritt. Dieser Ansatz wird sehr häufig mit dem Viterbi Algorithmus 2 implementiert. Die nächste Komplexitätsstufe kann eingeführt werden, indem die zwei oben genannten Ansätze, Worthäufigkeitenmessungen und Tagsequenzenwahrscheinlichkeiten, miteinander kombiniert werden, was unter dem Namen Hidden Markov Modelle bekannt ist. Folgende Annahmen liegen diesem Model zugrunde: 1. Jeder verborgene Tagzustand erzeugt ein Wort in einem Satz. 2. Jedes Wort steht in keiner Wechselbeziehung mit allen anderen Wörtern und deren Tags. 3. Die Wahrscheinlichkeit jedes Wortes hängt ausschließlich von N vorherigen Tags ab. [Dermatas Kokkinakis, 1995] Um beim Taggen einen stochastischen Ansatz zu verwenden, müssen zuerst alle notwendigen Messungen und Berechnungen durchgeführt werden, um die Werte für die n-gram basierten transitionalen Häufigkeiten zu bestimmen. Man fängt mit einem getaggten Korpus an und bestimmt mit deren Hilfe die transitionalen Wahrscheinlichkeiten. Um diesen Prozess zu demonstrieren, zeige ich Schritt für Schritt das Schema der Berechnung von diesen Werten für Bigramm-Modelle (d.h. nur der unmittelbare Kontext wird berücksichtigt). 1. Der erste Schritt ist die Berechung der Wahrscheinlichkeiten für das Auftreten jeder Kategorie. Um z.B. die Wahrscheinlichkeit des Auftretens eines Nomen zu berechnen, 2 Der Zweck des Viterbi Algorithmus besteht darin, auf effiziente Weise die beste verborgene Pfadsequenz durch ein Hidden Markov Modell (HMM) zu finden. Er sucht die wahrscheinlichste Sequenz der verborgenen Zustände des HMMs zu einer gegebenen Beobachtung. 45 dividiert man die gesamte Anzahl von Nomen, durch die gesamte Anzahl von Wörtern. Haben wir einen Korpus mit z.B. 100 Wörtern und 20 davon sind Nomen, so beträgt die Wahrscheinlichkeit des Auftretens eines Nomen 20%. Übergangswahrscheinlichkeiten werden anhand eines ungetaggten Referenzkorpus gelernt. 2. Der zweite Schritt ist die Berechnung der transitionalen Wahrscheinlichkeiten für Wortsequenzen, der so genannten bedingten Wahrscheinlichkeit - der Wahrscheinlichkeit eines Ereignisses A, wenn das Ereignis B gegeben ist (bedingte Wahrscheinlichkeit). P (A|B) = P (A ∩ B) P (B) Wollen wir also die Wahrscheinlichkeit eines Nomen berechnen, das vor einem Artikel steht, wobei wir Kategoriefrequenz und nicht die Kategoriewahrscheinlichkeiten in Betracht ziehen, so sieht die die Formel folgendermaßen aus. Zu der oben gezeigten Formel fügt man normalerweise noch die Frequenz des Kontextwortes hinzu, damit die häufigsten Wörter nicht bevorzugt werden. So hängt das Ergebnis von den Frequenzen der Bigramm-Wörter und nicht von dem Kontextwort ab. P (i = N N |i − 1 = ART ) = count(ART at position i − 1 ∩ N N at i) count(ART at position i − 1) ∗ count(N N at position i) 3. Der letzte Schritt ist die Verwendung der berechneten transitionalen Wahrscheinlichkeiten um den optimalen Pfad im Suchraum von einem Tag zu dem anderen zu bestimmen. Solch ein Algorithmus geht alle Möglichkeiten, und die Wahrscheinlichkeit jeder Sequenz, durch und liefert die höchstwahrscheinliche Tagsequenz als Output. Ein allgemeiner Ablauf des stochastischen Taggens wird in der Abbildung 4.3 dargestellt. Die Einzelheiten einer Variante des stochastischen Taggens wird im Kapitel 4.3 detailliert besprochen. Abbildung 4.3: Möglicher Ablauf eines stochastischen Taggers 46 4.3 Der Tree Tagger Der Tree Tagger [Schmid, 94] ist ein stochastischer Tagger, der im Rahmen des TCProjektes 3 am Institut für maschinelle Sprachverarbeitung der Universität Stuttgart von Helmut Schmid entwickelt wurde. Der Tree Tagger wurde erfolgreich eingesetzt, um deutsche, englische, französische, italienische und griechische Texte zu annotieren. In diesem Paragraph wird beschrieben, wie dieser Tagger arbeitet und wie man ihn auf einer neuen Sprache (etwa Polnisch) trainieren kann. Dieses Kapitel basiert zum grossen Teil auf den Artikeln von Helmut Schmidt, vor allem [Schmid, 94] und [Schmid, 95], und auf der Dokumentation der Implementierung des Tree-Tagger, die mit dem Quellcode mitgeliefert ist. 4.3.1 Arbeitsweise Der Tree Tagger arbeitet, wie die meisten stochastischen Tagger, mit Wahrscheinlichkeiten. Die meisten probabilistischen Methoden [DeRose, 1988][Kempe, 1993] basieren auf Markov Modellen. Diese Methoden generieren eine sehr große Anzahl von Parametern 4 und haben deswegen Probleme in der richtigen Schätzung von kleinen Wahrscheinlichkeiten aus einer kleinen Menge des Trainingsmaterials kommt. Um dieses Problem zu beheben und die Übergangswahrscheinlichkeiten richtig zu bestimmen, wurden bei dem Tree Tagger Entscheidungsbäume (decision trees) verwendet. Ein Entscheidungsbaum bestimmt die korrekte Größe des Kontextes (Trigramme, Bigramme, Unigrame) der für die Berechnung von Übergangsfunktionen verwendet wird. Bei der Erstellung der Bäume wird in jedem Rekursionsschritt ein Test gebildet. Die Wahrscheinlichkeit eines bestimmten Trigrammes wird berechnet, indem der entsprechende Pfad im Baum so lange verfolgt wird, bis ein Blatt gefunden wird. Wollen wir z.B. die Wahrscheinlichkeit eines Nomens, dem ein Adjektiv und ein Determiner vorausgeht p(NN| DET, ADJ) müssen wir zuerst einen Test am Wurzelknoten beantworten. Da ein Adjektiv vorausgeht wird der yes-Pfad gewählt. Da diesem Adjektiv wiederum ein Determiner vorausgeht, wird dann wieder der yes-Pfad gewählt und das Blatt wird erreicht. Jetzt muss in der Tabelle, die an dieses Blatt angehängt ist, die Wahrscheinlichkeit des Tags NN nachgeschlagen werden. Jedes Wort wird zuerst im Vollformlexikon gesucht, das aus dem getaggten Trainingskorpus erzeugt werden kann. Sehr oft wird auch ein morphologischer Generator (wie etwa DMOR [Schiller, 1995]) verwendet um das Vollformlexikon aus einer Wortliste zu generieren. Das Lexikon, das in dieser Arbeit für das Training verwendet wird, wurde aus annotierten Korpora generiert - aus dem TAZ Korpus fürs Deutsche, und dem IPI PAN Korpus fürs Polnische (siehe Kapitel 3.4.2). Wird das gesuchte Wort im Lexikon gefunden, so wird der Wahrscheinlichkeitsvektor geliefert. Scheitert die Suche, werden alle Großbuchstaben in dem gesuchten Wort mit Kleinbuchstaben ersetzt und die Suche wir wiederholt. Scheitert die Suche wieder, wird das Suffixlexikon durchsucht. Das Suffixlexikon ist der zweite Teil des Lexikons und wird als ein Baum dargestellt. Jeder Knoten des Baumes (bis auf den Wurzelknoten) ist mit einem Zeichen (character) beschriftet. Wahrscheinlichkeitsvektoren der Tags wurden den Knoten angehängt. Die Suche im Suffixlexikon beginnt bei dem Wurzelknoten. In jedem Schritt wird der Ast gewählt, der mit dem Zeichen beschriftet wurde, der dem nächsten Zeichen im Wort entspricht. Man beginnt die Analyse des Wortes reading am Wurzelknoten (beschriftet mit #) und folgt 3 Textkorpora und Erschließungswerkzeuge, Land Baden-Würtemberg einem Tagset von 50 Tags, könnten aus einem Trainingsmaterial von 10.000 bis 100.000 Tokens, 125.000 kontextuelle Regeln generiert werden [Schmid, 95] 4 Bei 47 Abbildung 4.4: Entscheidungsbaum des Tree Taggers [Schmid, 94] dem Pfad mit dem Label g, dann mit dem Label n und erreicht somit den Knoten mit dem Label i, der ein Blatt ist. Der Wahrscheinlichkeitsvektor, der an diesem Knoten hängt wird geliefert. In [Schmid, 95] werden dann weitere Verbesserungen vorgeschlagen, um die Präzision für Sprachen zu verbessern, für die große annotierte Korpora nicht verfügbar sind. Es wurden unter anderem folgende Verbesserungen beschrieben: 1. Einsatz eines Präfixlexikons - analog zu Suffixlexikon. In machen Sprachen (etwa Deutsch) gibt es Flektionspräfixe. Der Einfluss des Wortanfangs auf sein entsprechendes POS Tag ist in diesen Sprachen größer. 2. Aus nicht getaggten Korpora werden seltene Wörter extrahiert, die weder im Trainingsmaterial noch im Lexikon auftreten. Dem Tagger stehen in der Originalversion überhaupt keine Informationen über solche Wörter zur Verfügung (abgesehen vom Suffix- und Präfixlexikon). Man bestimmt die Tagwahrscheinlichkeiten der unbekannten Wörter und fügt die Informationen zu dem Vollformlexikon hinzu, um mehr spezifische Daten über solche Wörter zu haben 3. Die Originalschreibung (Großschreibung) wird im Lexikon eingehalten. Wird eine Wortform zwei Mal im Lexikon gefunden (einmal klein und einmal großgeschrieben, wie etwa am Anfang des Satzes) so werden die Wahrscheinlichkeitsvektoren nach relativen Häufigkeit von zwei Formen geglättet und aufsummiert. Der Tree Tagger hat einen großen Vorteil gegenüber von klassischen probabilistischen Ansätzen, die ohne Entscheidungsbäume arbeiten. Er braucht kein großes Trainingsmaterial um hohe Präzision zu erreichen. Trainiert auf einem Korpus von 20.000 Tokens, hat der Tree Tagger in der besten Konfiguration eine Präzision von 97.53% [Schmid, 95] erreicht. 48 Abbildung 4.5: Präfixbaum des Tree Taggers [Schmid, 94] Der Tagger hat aber einen Nachteil. Er setzt die Verfügbarkeit eines morphologischen Analysators voraus um das Vollformlexikon zu erstellen. In diesem Kapitel werden wir erfahren, welche Präzision der Tagger für eine Sprache (Polnisch) erzielt, wenn das Vollformlexikon aus einem Korpus extrahiert worden ist. Der Tagger wird auch unter Verwendung von solch einem Lexikon für das Deutsche trainiert, um die Ergebnisse für die beiden Sprachen zu vergleichen. 4.3.2 Training und Tagging Zum Training und Tagging wird hier die Version des Tree Taggers verwendet, die intern am Institut für maschinelle Sprachverarbeitung installiert ist. Vier Dateien sind für das Training erforderlich: lexicon: ein Vollformlexikon, bei dem jede Zeile einer Wortform entspricht. Jede Zeile sollte die Wortform und eine Sequenz von Tag-Lemma Paaren enthalten. open class file: eine Liste von offenen Wortklassen 5 1. STTS fürs Deutsche (siehe Kapitel 3.5.2): ADJA ADJD ADV NE NN TRUNC VVFIN VVINF VVIZU VVPP VVIMP 2. PJWSTK-Tagset fürs Polnische (siehe Kapitel 3.5.2): V ADJPAP ADJPRP INF ADVANP ADVPRP VNONP N ADJ ADV input file: das getaggte Trainingsmaterial. 5 Wortklassen wie Artikel und Präpositionen sind vollständig im Lexikon enthalten und bilden eine Gruppe von geschlossenen Wortklassen. Wortklassen wie Adjektive oder Substantive sind produktive Wortklassen, die nicht vollständig im Lexikon enthalten sind, und bilden somit die Gruppe von offenen Wortklassen 49 output file: die Datei, in der die berechneten Parameter gespeichert werden. Diese Datei wird später zum Taggen verwendet. 4.3.3 Ergebnisse 1. Präzision Bigramme Trigramme 4-Gramme Präzision des #Tokens Trainingskorpus 82174 82174 82174 Tree Taggers für das Deutsche #Tokens #Tokens Lexikon Testkorpus Präzision 1810889 1810889 1810889 93.9345 % 93.9097 % 93.1531 % 8062 8062 8062 Tabelle 4.1: Präzision des Tree Taggers für das Deutsche Bigramme Trigramme 4-Gramme Präzision des #Tokens Trainingskorpus 40115 40115 40115 Tree Taggers für das Polnische #Tokens #Tokens Lexikon Testkorpus Präzision 571598 571598 571598 90.1174 % 90.1585 % 89.9938 % 4857 4857 4857 Tabelle 4.2: Präzision des Tree Taggers für das Polnische 2. Die häufigsten Verwechslungen Die häufigsten # Verwechslungen 19 18 14 14 13 Verwechslungen des Tree Taggers fürs Deutsche Wort Richtiger Tag Falsch getaggt als zu APPR PTKVZ einen ART ADJA rund ADV ADJD das PDAT ART Wie KOUS KOKOM Tabelle 4.3: Die häufigsten Verwechslungen des Tree Taggers fürs Deutsche 4.4 Transformation-Based Error-Driven Tagger von Eric Brill Regelbasierte Ansätze sind seit 1963 bekannt [Klein & Simmons 63]. Sie hatten aber lange Zeit wesentlich schlechtere Präzision beim Taggen als stochastische Tagger. Das Problem lag in den Regeln, die manuell von Linguisten erstellt werden mussten. Dieses Kapitel basiert zum grossen Teil auf den Artikeln von Eric Brill, vor allem [Brill, 92] und [Brill, 93], und auf der Dokumentation der Implementierung des Brill Taggers, die mit dem Quellcode mitgeliefert sind. 50 Die häufigsten # Verwechslungen 74 12 9 8 8 Verwechslungen des Tree Taggers fürs Polnische Wort Richtiger Tag Falsch getaggt als się PRON ADV można V ADJ ten PRON ADJ tam P N około P ADV Tabelle 4.4: Die häufigsten Verwechslungen des Tree Taggers fürs Polnische In [Brill 1992] wurde ein regelbasierter Tagger (der Brill Tagger) vorgestellt, der die Regeln automatisch aus dem Trainingskorpus ermittelt hat und deren Präzision mit den stochastischen Taggern verglichen werden konnte. Der vorgestellte Ansatz wurde TransformationBased Error-Driven Learning (TBEDL) genannt. Ein unannotierter Text wird beim TBEDL durch zuerst von einem initial-state Annotierungsmodul analysiert und annotiert. Der Output wird dann mit der Wahrheit 6 verglichen und Transformationsregeln werden gelernt, die an dem Output angewandt werden können damit er besser der Wahrheit entspricht. Eine Anwendung, die aus diesem Ansatz Gebrauch macht muss also folgende Schritte enthalten: 1. Das initial state Annotierungsmodul. 2. Eine Menge von Transformationen, die untersucht werden sollten. 3. Eine Funktion, die das Korpus mit der Wahrheit vergleicht und beste Transformationen liefert. Die erste Version des Brill Taggers hat genau nach diesem Schema gearbeitet. Abbildung 4.6 demonstriert diesen Ansatz graphisch. 4.4.1 Initial Tagger Im ersten Schritt wird jedem Wort sein, in diesem Kontext bestpassender Tag zuordnet, bestimmt nach den Beobachtungen in einem großen getaggten Korpus. Zwei zusätzliche Funktionen wurden hier noch eingebaut: 1. Wörter die im Trainingkorpus nicht aufgetreten sind und großgeschrieben werden, sollten als Eigennamen getaggt werden. 2. Die Wörter die nicht im Trainingskorpus aufgetreten sind, werden mit dem wahrscheinlichsten Tag für Wörter markiert, die mit 3 gleichen Buchstaben enden. So würde der Tagger das Wort blahblahung im Deutschen als Nomen taggen. Diese Informationen werden aus dem Trainingskorpus automatisch ermittelt. 4.4.2 Final State Tagger Der trainierte Initial State Tagger wird dann verwendet um ein Patch Korpus 7 zu taggen. Der Output des Initial Taggers wird dann mit dem korrekt getaggten Patch Korpus verglichen und eine Liste von Tagfehlern wird ermittelt. Solch eine Liste besteht aus 6 eng. the truth [Brill 1992] ganze annotierte Trainingskorpus wird in 3 Teile zerlegt, 90% wird zum Training verwendet, 5% ist zum Testen und 5% ist das Patch Korpus 7 Das 51 Abbildung 4.6: Ablauf des Brill Taggers [Brill, 92] Tripels <tag a, tag b, number>. Jedes Tripel repräsentiert wie oft (number) ein Wort mit Tag a getaggt wurde, an der Stelle wo es mit Tag b getaggt werden sollte. Es wird dann berechnet welche Instanziierung der Templates von einer gegebenen Menge zu der größten Fehlerreduktion beiträgt. Folgende Templates wurden bei der ersten Version des Brill Taggers verwendet: Ersetze den Tag a mit Tag b in folgenden Fällen (z und w sind Tags): 1. Das vorhergehende (folgende) Wort ist als z getaggt. 2. Das Wort zwei Stellen davor (danach) ist als z getaggt. 3. Eins der zwei vorhergehenden (folgenden) Wörter ist als z getaggt. 4. Eins der drei vorhergehenden (folgenden) Wörter ist als z getaggt. 5. Das vorhergehende Wort ist als z und das folgende Wort als w getaggt. 6. Das vorhergehende (folgende) Wort ist als z und das Wort zwei Stellen davor (danach) als w getaggt. 7. Das aktuelle Wort ist (nicht) großgeschrieben. 8. Das vorhergehende Wort ist (nicht) großgeschrieben. Für jedes Tripel und jede mögliche Instanziierung der Templates wird eine Fehlerreduktion berechnet, die dem Einsatz des Templates zugrunde liegt. Die Templates, die zur größten Fehlerreduktion führen werden zu der Liste der Templates hinzugefügt. Die Menge der Templates entählt im Endeffekt meherer Einträge folgender Art: 52 NN VB PREVTAG TO = Ersetze den Tag NN mit VB wenn das vorhergehende Wort TO ist. VBP VB PREV1OR2OR3TAG MD = Ersetze den Tag von VBP mit VB wenn eins der drei vorhergehenden Wörtern MD ist. Die gefundenen Templates werden dann auf den Output des Initial Taggers angewendet um die Fehlerrate zu reduzieren. Wichtig zu bemerken ist auch, dass ein Template, das den Tag eines Wortes von a in b umwandelt, nur dann angewandt wird wenn das Wort irgendwo im Trainingskorpus als b getaggt worden ist. 4.4.3 Verbesserungen In [Brill 1995] wurden unter anderem folgende Verbesserungen des Brill Taggers vorgeschlagen: Lexikalisierung Kontextuelle Transformationen wurden erweitert, und zwar so, dass der Tagger Zugriff sowohl auf Wörter als auch auf Tags haben könnte. Folgende Patches wurden hinzugefügt: Ersetze den Tag a mit Tag b wenn (w, x und z sind Wörter): 1. Das vorhergehende (nachstehende) Wort is w. 2. Das Wort zwei Stellen davor (danach) is w. 3. Eins der zwei vorhergehenden (nachstehenden) Wörter is w. 4. Das aktuelle Wort ist w und das vorhergehende (nachstehende) Wort ist x. 5. Das aktuelle Wort ist w und das vorhergehende (nachstehende) Wort ist als z getaggt. Folgende neue Templates können fürs Englische extrahiert werden: 1. Ersetze Präposition mit Adverb wenn das Wort zwei Stellen nach rechts ein as ist. 2. Ersetze nicht-3-person Singular im Präsensverb mit seiner Grundform wenn eins der zwei vorhergehenden Wörtern ein n’t ist Unbekannte Wörter Folgende weitere Transformationspatches wurden hinzugefügt, damit der Tagger auch den wahrscheinlichsten Tag Wörtern zuordnen können sollte, die nicht im Trainingskorpus aufgetreten sind: Ersetze den Tag eines unbekannten Wortes von X mit Y, wenn (x ist eine Zeichenketten; w ist ein Wort): 1. das Löschen des Präfixes x, |x | <= 4, ein Wort ergibt. (x ist ein String der Länge 1 bis 4) 2. die ersten (1,2,3,4) Zeichen des Wortes x sind. 3. das Löschen des Suffixes x , |x|<= 4, ein Wort ergibt. 4. die letzten (1,2,3,4) Zeichen des Wortes ein x sind. 5. das Hinzufügen eines Strings als ein Suffix x ein Wort ergibt, |x| <= 4. 6. das Hinzufügen eines Strings als ein Präfix x ein Wort ergibt, |x| <= 4. 7. das Wort W taucht direkt links (rechts) von dem Wort w auf. 53 8. das Zeichen z taucht in dem Wort auf. Die Menge der generierten Templates fürs Englische kann folgende Einträge enthalten: 1. Ersetze den Tag vom normalen Nomen mit normalem Nomen im Plural wenn das Wort mit einem s’ endet. 2. Ersetze den Tag vom normalen Nomen mit Zahl wenn das Wort das Zeichen . (Punkt) enthält. In [Brill 1995] wurde der Brill Tagger mit den vorgestellten Verbesserungen auf 1, 1 Millionen Tokens aus dem Penn Treebank Tagged Wall Street Journal Corpus 8 trainiert. 950 Wörter wurden zum Training verwendet, davon 350.000 um Regel für unbekannte Wörter zu lernen und 600.000 um kontextuelle Regeln zu ermitteln. Weitere 150.000 wurden zum Testen verwendet. Es wurden 148 Regeln für unbekannte Wörter und 267 für kontextuelle Informationen gelernt. Der Tagger hat dabei eine Präzision von 96.5% erreicht. Die höchste erreichte Präzision des Brill Taggers betrug 99, 1% [Brill 1995]. Es wurde dabei die Methode der k-besten Tagges verwendet werden (bei 250 Regeln und einem Durchschnitt von 2, 28 pro Wort). Die Präzision beim Taggen von unbekannten Wörtern betrug 85, 0% . Die linguistischen Informationen werden direkt in einer Menge von nicht stochastischen Regeln kodiert, die in einer kompakten und verständlichen Form vorliegen. Die Anzahl der Regeln ist, im Vergleich zu vielen lexikalischen und kontextuellen Wahrscheinlichkeiten bei stochastischen Ansätzen sehr klein. Es kann auch relativ einfach mit dem Tagger experimentiert werden - neue Patches können auch von Hand hinzugefügt werden. Es ist wichtig zu betonen, dass falsche oder fehlerhafte Templates zu keiner Senkung der Präzision führen. Aus einem fehlerhaften Patch werden dessen Instanziierungen nicht in der Liste des endgültigen Templates auftreten. Im nächsten Absatz werden wir erfahren welche Fehlerrate der Brill Tagger für andere Sprachen erreicht (Deutsch, Polnisch), wenn das Trainingsmaterial relativ klein ist (44.973 Tokens fürs Polnische und 90.234 Tokens fürs Deutsche) 4.4.4 Training und Tagging Den Quellcode für den regelbasierten Ansatz kann man von der Homepage von Eric Brill herunterladen9 . Das Training besteht aus zwei Schritten. Im ersten Schritt werden mit Hilfe von Perl-Scripten, die zusammen mit dem Tagger geliefert werden, die lexikalischen Regeln erstellt. Die lexikalischen Regeln werden verwendet um den wahrscheinlichsten Tag für unbekannte (nicht im Lexikon enthaltene) Wortformen zu ermitteln. Die Ermittlung erfolgt mit Hilfe von früher erstellten Daten: der Wortliste sowie einer Liste von Bigrammen. Der Tagger erlernt Regeln in folgender Form (in diesem Fall fürs Polnische): by addsuf 2 V 634 Wenn die Buchstabenkombination by an Ende des Wortes rangehängt werden kann, so das ein neues Wort gebildet wird, tagge das Wort als V (Verb). Nach möglichen Wörtern wird im Lexikon nachgeschlagen, das auch im Laufe des Trainings erstellt wird. ć deletesuf 1 INF 372 Wenn das Abschneiden des Suffixes ć eine neue Wortform bildet, tagge das Wort als INF (Infinitiv) aby hassuf 3 V 9 Tagge das Wort als V (Verb) wenn es einen Suffix aby hat. 8 urlhttp://www.cis.upenn.edu/ treebank/ 9 http://research.microsoft.com/users/brill/ 54 Die entstandenen lexikalischen Regeln werden dann verwendet, um einen Teil des Trainingsmaterials zu taggen (dummy-tagging). Im zweiten Schritt des Trainings werden kontextuelle Regeln gelernt, indem der dummy-getaggte Text mit dem originalen Trainingstext verglichen wird. Die kontextuellen Regeln werden aus den eigenen Fehlern erlernt und können unter anderem folgende Form haben (z.B. fürs Polnische): ADJPAP ADJ PREVWD w Ersetze den Tag von ADJPAP mit ADJ wenn das vorherige Wort ein w ist. ADJPRP ADJ NEXTTAG $. Ersetze den Tag von ADJPRP mit ADJ wenn das nächste Wort als $. getaggt ist. PPER N PREV1OR2OR3TAG N Ersetze den Tag von PPER mit N wenn eins von den 3 vorhergehenden Wörtern als als N getaggte ist. 4.4.5 Ergebnisse 1. Präzision Aa Bb Polnisch 41465 9403146 Deutsch 82726 9999184 Präzision des Brills Tagger Cc Dd Ee Ff Gg 7213 3268694 96.7697 % 147 637 7508 3299590 94.5258 % 281 217 für das Polnische und für das Deutsche a Tokens im getaggten Trainigskorpus im ungetaggten Trainigskorpus c Tokens im getaggten Testkorpus d Bigramme e Präzision f Lexikalische Regeln g Kontextuelle Regeln b Tokens Die Analyse der Ergebnisse führte zu einer sehr interessanten Beobachtung. Die Präzision/ Fehlerquote hängt nur von dem Start-Tagger mit lexikalischen Regeln ab. Der zweite Schritt des Taggens, der Final-Tagger der kontextuelle Regeln verwendet, hat in beiden Sprachen zu überhaupt keinen Verbesserungen beigetragen. 2. Die häufigsten Verwechslungen Die häufigsten Verwechslungen des Brill Taggers fürs Polnische # Verwechslungen Wort Richtiger Tag Falsch getaggt als 4 górnicze ADJ N 3 żarty ADJPAP N 3 trzebinia N NUMORD 2 złotem N V 2 wzajemnie ADV N Tabelle 4.5: Die häufigsten Verwechslungen des Brill Taggers fürs Polnische 4.5 Vergleich der beiden Ansätze Die Tabelle 4.7 zeigt die wichtigsten Unterschiede, sowie Nachteile und Vorteile des Tree Taggers und des Brill Taggers. 55 Die häufigsten Verwechslungen des Brill Taggers fürs Deutsche # Verwechslungen Wort Richtiger Tag Falsch getaggt als 8 Leipzig NE NN 6 Hoechst NE NN 5 werden VAFIN VAINF 4 das PDS ART 4 Vetter NE NN Tabelle 4.6: Die häufigsten Verwechslungen des Brill Taggers fürs Deutsche Erstellung von Korpora und Vorbereitung der Daten Aufwand bei Trainingsdauer Erstellte Dateien Regelbasierter Tagger von Eric Brill Zwei Korpora werden benötigt: ein manuell getaggter Text und ein ungettagter Text. Die Schwierigkeit liegt in der Erstellung des einSatz-pro-Zeile Formats (sobald die Satzgrenzen nicht markiert werden oder bei Rohdateien). Das Training benötigt viele vorverarbeitete Daten (Bigramme, Wort-Tag Listen etc.). Die Tools werden im Paket geliefert. Die Erzeugung von Regeln dauert sehr lange (in Tagen gerechnet)(insbesondere der lexikalischen Regeln; in Perl implementiert) Die erstellten Regeln sind lesbar und können deswegen von Hand modifiziert werden. Sie sind auch sehr klein (lexikalische Regeln fürs Polnische 7168 Bytes). Stochastischer Tagger von Helmut Schmid Die Erstellung des Lexikons benötigt einen lexikalischen Generator - Nachteil für Sprachen, für die solch ein Generator nicht existiert. Bei Extraktion von Korpora (was sehr lange dauert) erreicht man eventuell schlechtere Resultate. Das Training erfolgt sehr schnell und benötigt weniger Dateien (Lexikon, Liste der offenen Klassen). Die Parameterdatei wird in binärer Form erzeugt und ist somit unlesbar. Sie ist auch sehr groß (fürs deutsche Trigrammmodell über 63 MB), enthält aber das ganze Lexikon. Fortsetzung auf der nächsten Seite 56 Tabelle 4.7 – Fortsetzung aus der letzen Seite Regelbasierter Tagger Stochastischer Tagger von Eric Brill von Helmut Schmid Fehlererkennung und Un- Die Formate der Dateien wer- Die Formate, das verwendekompatibilität den nicht überprüft. Proble- te Tagset und das Satzenme (behebbar im Quellco- dezeichen werden überprüft. de) mit Zeichenkodierungssy- Das Lexikon wird nach dopstemen (UTF-8, Latin-2). Der pelten Einträgen geprüft. Der zweite Schritt des Taggens Tree Tagger hat keine Proble(Final-Tagger) trägt zu kei- me mit Zeichenkodierungssynen Verbesserungen bei. stemen und arbeitet einwanderfrei sowohl mit UTF-8, Latin-2 als auch mit Latin-1. Taggingdauer Es werden alle Dateien (Le- Nur die Parameterdatei wird xikon, Bigrammliste, Korpus analysiert. Das Tagging erund Regeln) durchsucht. Das folgt deutlich schneller. Tagging erfolgt auch in zwei Phasen (Start-Tagger und Final-Tagger). Der Taggingprozess ist deswegen sehr langsam. Präzision 96.7697 % fürs Polnische; 93.9345 % fürs Deutsche; 94.5258 % fürs Deutsche 90.1585 % fürs Polnische. Es muss aber betont werden, dass die verwendeten Lexika aus Korpora generiert wurden, und somit fehlerhafte Einträge enthalten, die zu klaren Fehlern führen. Tabelle 4.7: Vergleich des Brill Taggers und des Tree Taggers 4.6 Zusammenfassung In diesem Kapitel wurden zwei der wichtigsten Ansätze beim automatischen Part-of-Speech Tagging beschrieben: ein stochastischer sowie ein regel-basierter Ansatz. Stochastische Tagger arbeiten mit Wahrscheinlichkeit und Statistik und liefern für jedes Wort das wahrscheinlichste Tag. Bei regelbasierten Taggern werden die Tags aufgrund von benachbarten Wortformen, Wortarten sowie Präfixen und Kombinatorik ermittelt. Weiterhin wurden zwei Tagger detailliert besprochen: der stochastische Tagger von Helmut Schmid, sowie der Tagger von Eric Brill (Transformation-Based Error-Driven Learning). Beide Tagger habe ich sowohl fürs Deutsche als auch fürs Polnische trainiert und getestet. Der Brill-Tagger hat im Allgemeinen bessere Resultate erreicht (96.7697 % fürs Polnische), obwohl die zweite Etappe des Taggens, der Final-Tagger, zu keinen Verbesserungen beigetragen hat. Der Tree Tagger liefert ebenfalls ziemlich gute Resultate (93.9345 % fürs Deutsche), wobei für das Training Lexika verwendet wurden, die klare Fehler enthalten. Der Tree Tagger arbeitet im Allgemeinen schneller (Training und Tagging) und zuverlässiger. Es sind somit vier TaggingModule mit klaren Ergebnissen (zwei fürs Deutsche und zwei fürs Polnische) entstanden, die in beliebigen TTS-Systemen problemlos eingesetzt werden können. 57 Kapitel 5 Anbindung des Regelbasierten-Taggers an TTS-System 5.1 Festival Festival ist ein allgemeines mehrsprachiges Sprachsynthesesystem, das in der Abteilung für Rede-Technologie-Forschung (CSTR) an der Universität von Edinburgh entwickelt wurde und ist ein allgemeines Grundgerüst zum Programmieren von Spracherzeugungssystemen (Sprachsynthese, wie in Kapitel 2.1 definiert) Festival ist die bekannteste Open-Source-Sprachsynthese. Festival ist in C++ geschrieben, mit Scheme-a"hnlicher Sprache gesteuert und als freie Software verfügbar. Sie unterstützt Englisch, Spanisch und Walisisch. Weitere 9 Sprachen sind von Drittanbietern erhältlich. Deutsch ist leider nicht darunter. Die traditionellen Features von Festival beinhalten: 1. External einstellbare sprachenunabhängige Module: • Phoninventare • Lexikon • „letter-to-sound“ (Phon-Graphem) Regeln • Tokenisierung • POS-Tagging • Intonation und Dauer 2. Audiosignalsynthetisatoren • Diphonbasiert: LPC und PSOLA (Kapitel 2.2.2( • Unterstützung von MBROLA Datenbanken • Generalisierung von Statistikmodulen mit Viterbi zur besseren Übersicht • XML-Unterstützung für Relationen 58 Die aktuelle stabile Version stammt von Juni 1999 (Version 1.4.3). Daneben gibt es seit Juli letzten Jahres eine Betaversion für Festival 2.0, die bereits sehr stabil ist und die die Sprachqualität deutlich verbessert. Hierzu wurde ein neues System von sogenannten MultiSync Stimmen entwickelt, die aufgrund detaillierten Daten sehr groß sind und beim ersten Systemstart einige Zeit zum Laden benötigen. Sprachen mit nicht-lateinischen Alphabeten werden von Festival zur Zeit nicht oder nur mit größeren Schwierigkeiten unterstützt, da Unicode-Unterstützung in Festival fehlt. Die neue Version von Festival verwendet auch eine Syntheseengine, das auf HTS1 Hidden Markon Modelllen basiert (allgemein HMM-basierte Synthese genannt). In HMM-basierten Systemen werden spektrale Energie (Vokaltrakt), Grundfrequenz F0 (Quelle) und Dauer (Prosodie) gleichzeitug von HMMs modeliert. Das Audiosignal wird dann durch HMMs auf der Basis von „Maximum likelihood criterion“ generiert. Festival lässt sich als Phonem-Generator mit richtigen Stimmen aus anderen Sprachsynthesen wie Cepstral2 oder Mbrola3 kombinieren. Hierdurch wird oft eine bessere Qualität erzielt als wenn man diese Stimmen ohne Festival verwendet. Festival hat eine sehr gute Qualität und einen großen Funktionsumfang, ist aber wegen seiner Größe im Server- oder Embedded-Bereich z.B. nicht immer die Ideallösung. Weitere Informationen gibt es auf der Internetseite: http://www.cstr.ed.ac.uk/projects/festival/. 5.1.1 Modularisierung von Festival Bei der Synthese in Festival wird eine Reihe von Modulen benutzt. Die einzelnen Module entsprechen im Grossen und Ganzen, der in den Kapiteln 2.2.1 und 2.2.2 vorgestellten Modulariesierung. In den meisten Fällen wird durch jedes Modul eine neue Relation eingeführt bzw. eine exisitierende Relation modifiziert. Es werden verschiedene Relationen gebaut, die Listen von einzelnen Aufbauelementen miteinander verketten. Alle Elemente die zu einer bestimmten Strukturrelation gehören sind in einer Liste angeordnet. Viele Relationen bestehen aus verschachtelten Listen, die wiedrum mit Elementen aus anderen Relationen vernüpft sind - da sie gleiche Elemente enthalten. Beispiele von Festivalrelationen, die für den Satz „Ich bin ein deutscher Satz“ erzeugt wurden, werden im Anhang B.2 vorgestellt. Welche Module zur Synthese benutzt werden, hängt von dem aktuellen Äusserungstyp ab. Festival stellt eine Reihe von Äusserungstypen zur Verfügung: Phrase, Concept, Tokens, Text, Words usw. Jeder Typ definiert die Module, die durchlafen werden müssen, die wiederum als Folge eine erwünschte, hierarchisch aufgebaute Relationstruktur liefern. Diese 1 HTS ist eine Sprachsynthese für Japanisch und Englisch. Für Englisch wird intern Festival verwendet. HTS ist freie Software unter einer BSD-artigen Lizenz und ist in C++ geschrieben. Weitere Informationen gibt es auf der Internetseite: http://hts.ics.nitech.ac.jp/ 2 Cepstral ist eine von mehreren proprietären Sprachsynthesen für Linux. Sie basiert auf Flite und stammt ebenso wie diese aus Pittsburgh, USA. Cepstral ist neben Englisch, Französisch und Spanisch auch für Deutsch erhältlich und kostet 29,99 USD. Weitere Informationen gibt es auf der Internetseite: http://epos. ure.cas.cz/ 3 MBROLA ist eine Sprachsynthese von der Fachhochschule Mons in Belgien und unterstützt die größte Zahl an Sprachen (30 Sprachen einschließlich Deutsch und Polnisch). MBROLA hat zwei Schwierigkeiten, die der Entwicklung einer benutzerfreundlichen Gesamtlösung entgegenstehen. Erstens ist MBROLA keine vollständige TTS-Synthese: Zusätzlich wird noch ein Phonemgenerator benötigt, der für die meisten Sprachen als C-Programm oder als Skript erhältlich ist. Zweitens ist MBROLA Closed Source und darf nur für nichtkommerzielle und nicht-militärische Zwecke verwendet werden. Der bekannteste deutsche Phonemgenerator für MBROLA ist Hadifix. Das Hadifix-Programm ist mit Quelltext verfügbar, verwendet aber dieselbe Lizenz wie MBROLA. Eine bessere Qualität lässt sich erzielen, wenn man die deutschen MBROLA-Stimmen mit Festival oder Epos zusammen verwendet. Die Festival-Patches zur Unterstützung der deutschen MBROLAStimmen sind mit ebenfalls Quelltext erhältlich, dürfen aber nicht weitergegeben werden und erfordern die Registrierung mit E-Mail-Adresse. Die Patches beziehen sich außerdem auf eine veraltete Festival-Version und benötigen mehrerer Änderungen, um sie z.B. auf einem aktuellen SuSE-System kompilieren zu können. 59 Struktur ist die Basis der Synthese. Eine detaillierte Beschreibung aller Typen ist nicht der Gegenstand dieser Arbeit. Bei dem für typische Synthese in Festival meist verwendetem Äusserungstyp „Text“ werden folgende Module der Reihe nach durchlaufen (vergleiche mit den in Kapitel 2.2 vorgestellten Modulen): 1. (Initialize utt) 2. (Text utt) 3. (Token_POS utt) 4. (Token utt) 5. (POS utt) 6. (Phrasify utt) 7. (Word utt) 8. (Pauses utt) 9. (Intonation utt) 10. (PostLex utt) 11. (Duration utt) 12. (Int_Targets utt) 13. (Wave_Synth utt) 5.1.2 Part-of-Speech-Tagging in Festival Das Part-of-Speech-Tagging findet in Festival im Modul (POS utt) statt. Das Modul (POS utt) fügt das Merkmal pos hinzu, wie z.B. in der Relation WORD zu sehen ist (vergleiche Anhang B.2): ((("Ich" ((id "_6") (name "Ich") (pbreak "NB") (pos "N")))) (("bin" ((id "_7") (name "bin") (pbreak "NB") (pos "V")))) (("ein" ((id "_8") (name "ein") (pbreak "NB") (pos "ADV")))) (("deutscher" ((id "_9") (name "deutscher") (pbreak "NB") (pos "ADJ")))) (("Satz" ((id "_10") (name "Satz") (pbreak "NB") (pos "N"))))) Festival verwendtet zum Taggen verschiedene Methoden, die intern durch den Parameter „POS_Method“ definiert wird. Die „POS_Method“ kann innerhalb der Sprachdefinition entsprechend gesetzt werden, kann aber auch im interaktiven Festivalmodus frei geändert werden. Der Parameter „POS_Method“ ruft im Modul (POS utt) die entsprechende Tagging Methode, die beliebig definierbar und programmierbar ist. Manche Festivalstimmen verwenden überhaupt keinen Tagger (No_POS), andere basieren auf einfachen CART Bäumen, die eine minimale Basiswortartzuweisung durchführen. Die „POS_Method“ in Festival kann von allen, in Kapitel 4.2 vorgestellten Tagging Ansätzen Gebrauch machen. Die Festivalversion, die für die Zwecke dieser Arbeit benutzt wurde 60 (und die auf den Rechnern des Instituts für Maschinelle Sprachverarbeitung an Universität Stuttgart installiert ist), verwendet bei manchen deutschen Stimmen den Tree Tagger (siehe Kapitel 4.3), implementiert und an Festival von Helmut Schmid und Mark Breitenbuecherangebunden (Parameter „POS_German“). Der Einsatz von weieteren Tagging Ansätzen ist möglich, benötigt allerdings eine Verkettungsstelle, soweit sie nicht in Scheme oder anderen LIPS Dialekten implementiert worden ist. Der Prozess und Ablauf einer möglichen Anbindung vom Brill Tagger an Festival wurde im Kapitel 5.3 beschrieben. 5.2 Anpassung des Algorithmus von Eric Brill an Festival Die Implementierung des im Kapitel 4.4 vorgestelltes regelbasierten Tagging Ansatz (Transformation-Based Error-Driven Tagger) wurde von seinem Entwickler, Eric Brill, im Jahre 1993 am MIT und an der University of Pennsylvania fertig geschrieben. Der Code kann heute noch von seiner Homepage des „Department of Computer Science“ unter http://www.cs.jhu.edu/~brill/ heruntergeladen werden. Das Paket enthält neben dem Tagger-Code (in C programmiert) auch zahlreiche Werkzeuge (in Perl programmiert), die während des Trainings zum Einsatz kommen, sowie umfangreiche Dokumentation und fertige Trainingsdaten fürs Englische. In dieser Arbeit wird lediglich auf die in C programmierten Taggerdateien eingegangen. 5.2.1 Originalquellcode und Struktur des Algorithmus Der eigentliche Tagger Code, vollständig in C programmiert, besteht aus drei Teilen: • tagger.c • start-state-tagger.c • final-state-tagger.c Aufgerufen wird die Hauptfunktion in „tagger.c“, die je nach Parametriesierung für den weiteren Ablauf sorgt, und entsprechend die Hauptfunktionen in „start-state-tagger.c“ und „final-state-tagger.c“ (vergleiche Kapitel 4.4.1 und Kapitel 4.4.2), was die Funktionsweise dieses Tagger-Ansaztes abbildet. Der vollständige und richtige Aufruf des Taggers sollte (nach der Anleitung) die Namen der Dateien als Argumente verwenden, die im Laufe des Trainings entstanden sind (vergleiche Kapitel 4.4.4) und die zum richtigen Taggen benötigt werden (YOUR-CORPUS ist der Dateiname des Korpuses, der getaggt werden sollte): tagger LEXICON YOUR-CORPUS BIGRAMS LEXICALRULEFILE CONTEXTUALRULEFILE Nach dem Aufrufbefehl, können optional, je nach Bedarf verschiedene Parameter (im Code FLAGS genannt) gesetzt werden, die den Ablauf verändern. Es sind, unter anderem folgende Parameter möglich: -w wordlist: ermöglicht die Übergabe einer zusätzlichen Menge von Wortformen (WortTag Paare), die nicht im LEXICON (Lexikondatei) enthalten sind. -S: verwendet zum Taggen nur den Start-Tagger (das Argument CONTEXTUALRULEFILE entfällt, da es nur Informationen enthält, die für den Final-Tagger brauchbar sind) 61 -F: verwendet nur den Final-Tagger. In diesem Fall muss der Korpus (YOUR-CORPUS) vorgetaggt werden; die Tags werden entsprechend der kontextuellen Regeln geändert. Je nach Parametriesierung werden die Start- und Final-Tagger-Funktionen mit richtigen Argumenten aufgerufen. Der Tagger, für die Zwecke der Anbindung an Festival im Kapitel 5.3, sollte mit dem -F Parameter aufgerufen werden. Der Tagger ruft dann intern den Start-Tagger Algorithmus aus der Datei start-state-tagger.c auf. Folgender Befehl wird in der Anbindung verwendet: start-state-tagger LEXICON YOUR-CORPUS BIGRAMS LEXICALRULEFILE 5.2.2 Änderungen des Algorithmus Damit der Brill Tagger an Festival angebunden werden konnte, musste dessen Algorithmus modifiziert und an die Gegebenheiten von Festival angepasst werden. Da der „Final State Tagger“ zu keinen Verbesserungen beim Taggen beigetragen hat (siehe Kapitel 4.4.5), kam bei der Anbindung ausschliesslich der „Start-State-Tagger“ zum Einsatz. Im Gegensatz zum ursprünglichen Programmcode, bei dem die Hauptprozedur „tagger.c“ die weiteren Teile, je nach Paramatern, aufgerufen hat, besteht der modifizierte Code lediglich aus einer Funktion, die ohne Parametern aufzurufen ist (die Parametern und Dateien sind hard-coded ). Die wichtigsten Änderungen stellt Tabelle 5.1 dar. Index Originalquellcode Modifizierter Quellcode 1 Die Hauptprozedur nimmt Dateinnamen als Argumente 2 Die Hauptprozedur kann parametriesiert werden, so kann z.B. der Parameter „-S“ ausschliesslich den Start-StateTagger aufrufen Die Hauptprozedur (TAGGER) ruft weitere externe Prozeduren auf. Je nach Parametern entweder nur den StartState-Tagger, oder nur den Final-StateTagger, oder beide nacheinander Die Hauptprozedur benötigt keine Dateinamen als Argumente - die Dateiennamen sind hard-coded im Quellcode, als: LEXIKON.BRL, BIGRAMS.BRL und LEXIKALRULEFILE.BRL. Die Dateien müssen in dem gleichen Verzeishnis vorliegen und können ausgetauscht werden. Die Anbindung an Festival bleibt somit sprachunabhängig. Die ausgetauschten Dateien können auch Informationen enthalten , die aus dem Trainigsprozess auf einer anderen Sprache herkommen können Die Hauptprozedur kann nicht paramatriesiert werden 3 Die Hauptprozedur ist ausschliesslich der Start-State-Tagger und ruft keine weiteren externen Prozeduren auf. Fortsetzung auf der nächsten Seite 62 Index 4 Tabelle 5.1 – Fortsetzung aus der letzen Seite Origineller Code Modifizierter Code Die Hauptprozedur nimmt Dateinna- Die Hauptprozedur nimmt eine Satzmen als Argumente struktur (Struct) von Festival als Argument, in der die Wörter und die Tags gespeichert werden können typedef struct { int number_of_words; /*number of words to be tagged*/ char **word; /*array of pointers to the words*/ char **tag; /*array of pointers to the tags*/ } TAGGER_STRUCT; 5 Das Programm kann Texte beliebiger Länge bearbeiten. Der Textkorpus wird in Form einer Datei übergeben, die in einem Satz-pro-Zeile Format vorliegen muss. Der Korpus muss vortokenisiert sein und jede Zeile muss mit einem Leerzeichen enden 6 Das Programm taggt einen Korpus aus einer Datei 7 Das Programm zeigt die gefundenen Tags auf dem Standartoutput 8 Das Programm macht eine Reihe von Ausgaben auf der Standartausgabe, die dem Ablauf des Programmes entsprechen Tabelle 5.1: Änderungen im Brill-Tagger Algorithmus 5.3 Das Programm bearbeitet Texte aus einer extern gelieferten Struktur. Die maximale Länge des Textes beträgt 50.000 ASCII-Zeichen bzw. maximal 5120 Wörter. Diese Länge entspricht grob 33 bedruckten DIN-A4 Seiten, und sollte für die meisten TTS-Anwendungen ausreichend sein Das Programm taggt den Text, der in der Struktur TAGGER_STRUCT, als ein Array von Zeigern auf die einzelnen Wörter gespeichert ist Das Programm speichert die gefundenen Tags in die TAGGER_STRUCT, als ein Array von Zeigern Das Programm macht keine Ausgaben auf der Standartausgabe Anbindung an Festival Die Anbindung des Brill Tagger Algorithmus an Festival, in der Form die im Kapitel 5.2.2 vorgestellt wurde, basiert auf der Anbindungsmethode, die (siehe Kapitel 4.3) Helmut Schmid und Mark Breitenbuecher (Institut für maschinelle Sprachverarbeitung, Universität Stuttgart, 1998) für den Tree Tagger programmiert haben. Die Funktionen, die ursprünglich intern mit dem Tree Tagger gearbeitet haben, und damit auch den Text getaggt haben, wurden so modifiziert und geändert, dass die den Anforderungen des Brill Taggers entsprechen und mit ihm richtig arbeiten können. Bei der modifizierten Version, ruft die Anbindungsfunktion intern, anstatt des Tree Taggers, den Brill Tagger vom Kapitel 5.2.2 auf. In diesem Kapitel werden die wichtigsten Stellen in dem Anbindungmodul besprochen, wobei zu beto63 nen ist, dass viele davon lediglich Modifikationen des Quellcodes von Helmut Schmid bzw. Mark Breitenbuecher sind (die Lizenz gestattet dessen Modifikationen und Verwendung für wissenschaftliche Zwecke). 5.3.1 Neues POS-Modul Wie in Kapitel 5.1.2 bereits erwähnt, kann Festival beliebige Methoden zum Taggen verwendet. Die aktuelle Methode wird durch den Parameter POS_Method intern definiert. Dieser Parameter kann im interaktiven Modus von Festival mit dem Befehl (Param.get ‘POS_Method) angezeigt werden. Um eine neue Part-of-Speech Tagging Methode zu benutzen (in diesem Fall ist es der Brill Tagger) sollte zuerst der richtige Parameter gesetzt werden. Für unseren Zweck nennen wir ihn POS_Brilltagger. Mit dem Befehl (Param.set’POS_Method’POS_Brilltagger) wird die Methode als neuer Parameter definiert. Solch eine Definition kann entweder online im interaktiven Modus stattfinden, oder auch innerhalb der aktuell verwendeten Sprachedefinition, wie z.B. innerhalb einer theoretischen Funktion (define (polnisch_voice_rulebased) ), z.B. in der Datei voices_polish.scm 4 : (define (polish_voice_rulebased) "POLISH_VOICE_RULEBASED uses for tagging a rulebased extern tagging module from Eric Brill" ... (Param.set ’Token_Method ...) (Param.set ’POS_Method ’POS_Brilltagger) (Param.set ’Phrasify_Method ...) (Param.set ’Word_Method ... (Param.set ’Pause_Method ...) (Param.set ’PostLex_Method ...) ... ) Anschließend muss die Funktion POS_Brilltagger definiert werden. Die Funktion muss in der Skriptsprache von Festival, einer LISP-verwandten Sprache die Scheme ähnlich ist, definiert werden. Festival arbeitet aber in zwei Sprachen, einerseits ist es LISP, andererseits C/C++, die Sprache, in der auch der Bril Tagger programmiert wurde. Die Definition von POS_Brilltagger sollte also den zu taggenden Text, von Festival als Satzstruktur repräsentiert (siehe Kapitel 5.1.1, Seite 59), weiter an eine externe C bzw. C++ Umgebung leiten, z.B. an die Funktion (Brilltagger_Polish utt). Solch eine Definition sollte bei den anderen POS-Modulen stehen, z.B. in der Datei polnisch_pos.scm: (define (POS_Brilltagger utt) "(POS_Brilltagger utt) uses the brill tagger. The language of the tagger depends on the language of the trained BRL files " (Brilltagger_Polish utt)) 4 Alle Festivaldateien, die in SCHEME bzw. LISP programmiert sind, befinden sich im Verzeihnis \lib, bzw. in seinen sprachspezifischen Unterverzeihnissen z.B. \lib\polish bzw. \lib\german 64 5.3.2 Anbindungsstelle, Ablauf und Funktionsweise Die Funktion (Brilltagger_Polish utt) befindet sich in einer C bzw. C++ Umgebung, in einem externen Modul (meistens in dem Verzeichnis \src\modules). Das Modul frrdas Brill-Tagging kann z.B. im Verzeihnis \src\modules\brilltagger) vorliegen und die Funktion (Brilltagger_Polish utt) selber kann in der Datei ims_bril_POS.cc definiert werden. Die Funktion (Brilltagger_Polish utt) ist die eigentliche Verkettungstelle, zwischen Festival (SCHEME orientiert) und externen Modulen (C/C++ orientiert. Sie wandelt die SCHEME-Funktion ((Brilltagger_Polish) utt) in die C/C++ Funktion FT_Brilltagger_Polish um. Das geschieht mit Hilfe folgender C++ Prozedur: void festival_polish_POS_init (void) { festival_def_utt_module ("Brilltagger_Polish", FT_Brilltagger_Polish, "(POS_Brilltagger UTT)/n calls the Start Brill Tagger for tagging"); } Die Prozedur FT_Brilltagger_Polish wird ebenfalls in der Datei ims_bril_POS definiert. Sie bekommt als Argument die interne Festivalstruktur (siehe Kapitel 5.1.1) und kann auf deren NAME- sowie POS-Features zugreifen. Aus dem Argument werden iterativ Wörter (Feature NAME) sowie die Interpunktionzeichen ausgelesen: for (word = (u->relation("Word"))->head(); word && i<slength; ++i, word=next(word)) { wort = word->name(); token= daughter1(word, "Token"); punc = ffeature(word, "R:Token.parent.punc").String(); ts.word[i] = strdup((char *) wort); if (punc.matches(make_regex("[\\,\\.!\\?\\;\\:]"))) { i++; ts.word[i] = strdup((char *) punc); } } Die Wörter werden dann in einer internen Struktur (TAGGER_STRUCT, siehe Tabelle 5.1, Seite 63) gespeichert, und der externen Brill-Tagger-Funktion zur weiteren Verarbeitung (zum Taggen) weitergegeben, mit brill_for_festival(ts), wobei brill_for_festival als void brill_for_festival (TAGGER_STRUCT my_sentence) definiert ist, und in die entsprechenden Stellen in TAGGER_STRUCT die gefundenen Tags reinschreibt: for (i=0, word = u->relation("Word")->head(); word && i<ts.number_of_words; i++){ if (ts.tag[i][0] != ’$’){ word->set("pos",(EST_String) ts.tag[i]); word=next(word); } } Den ganzen Ablauf der Anbindung stellt die Abbildung 5.1, auf Seite 66, grafisch dar. 65 Abbildung 5.1: Prozess der Anbindung von dem Brill Tagger an Festival 66 Kapitel 6 Zusammenfassung und Kommentar 6.1 Zusammenfassung In Kapitel 1.2 wurden für diese Arbeit verschiedene Ziele gesetzt. Die Struktur der Arbeit wurde an das Hauptziel angepasst - Fertigstellung eines neuen Moduls für die automatische Zuweisung von Wortarten (innerhalb der Arbeit als „Tagging“ definiert und verwendet). Dieses Modul sollte ziemlich kompakt und direkt in einem TTS-System verwendbar sein. Dieses Ziel wurde erreicht. Es ist ein Modul enstanden, das einen regelbasierten Ansatz (den BrillTagger) verwendet um die polnischen Texte mit einer Präzision von 96,7697 % zu taggen. Jegliche Änderungen wurden besprochen, so dass dieses Modul direkt in Festival, einem mehrsprachigen Open-Source-Synthesesystem, direkt angebunden werden konnte. Zusätzlich dazu wurden andere Tagging Systeme vorgestellt welche auf polnischen und deutschen Textmaterialien trainiert worden sind. Nach dieser Arbeit, können also zwei verschiedene Taggermodule, je für zwei Sprachen, direkt in Festival angebunden und in einem größerem Syntheseprojekt als POS-Modul verwendet werden. Weiterhin wurde im Kapitel 5 eine Anbindungsmethode vorgestellt, nach deren Prinzipen auch andere Module, die in C/C++ programmiert sind, ohne Probleme an Festival angebunden werden können. Das entstandene Modul ist sprachenunabhängig und kann sofort für andere Sprachen einegsetzt werden, sobald die Trainingsdaten für diese Sprache vorliegen. Es reicht lediglich die drei Dateien mit der Erweiterungen BRL mit neuen Dateien zu ersetzen. Im Kapitel 2 wurde sehr allgemein der Aufbau und die Probleme eines Sprachsynthesesystems vorgestellt. Das Modul, das für das POS-Taggen zuständig ist, ist nur ein Teil eines grossen Systemes und dient meistens nur einer spezifischen Aufgabe — der Zuweisung von Wortklassen. Im Kapitel 3 und 4 wurde dann gezeigt wie komplex die Vorbereitung dieses kleines Modules sein kann und somit die Mächtigkeit von Sprachsyntese demonstriert. Kapitel 3 beschreibt den Prozess der Erstellung und die Komplexität von Korpora, die lediglich für einen Teil des Taggertrainings verwendet werden. Es wurden der Aufbau, Konstruktion und Datenerschliessung von kleinen und großen Korpora besprochen. Weiterhin wurden hier kurz Tagsets bestimmt, Mengen von möglichen Wortartentypen und deren Formalisierung für die Zwecke der Sprachsynthese. Im Kapitel 4 wurden allgemein verschiedene Taggingansätze besprochen. Der Aufbau und die Funktionsweise von zwei bekannten Taggingsystemen, dem Treetagger von Helmut Schmid und dem Brill-Tagger von Eric Brill, wurden sehr ausführlich präsentiert. Die Präzision und der Ablauf der beiden Taggersysteme, die ent67 sprechend einem regelbasierten und einem stochastischen Ansatz folgen, wurden dann direkt verglichen. Mit Hilfe von, mit beiden Implementierungen mitgelieferten Trainingstools wurden dann Daten für das Polnische und das Deutsche erzeugt. Im Kapitel 5 wurde technisch sehr detailliert auf den Brill Tagger und Festival eingegangen; die für die Anbindung an Festival benötigten Änderungen im Quellcode besprochen, sowie eine Anbindungsmethode an Festival vorgeschlagen. Im Laufe der Arbeit wird auf verschiedene Bereiche der Linguistik, Computerlinguistik, Statistik, Programmiersprachen, Zeichenkodierungsystemen u.a. eingegangen. Es wurden auch verschiedene computerlinguistische Methoden und Werzkzeuge besprochen. Somit wurde das zweite Ziel, das Nebenziel dieser Arbeit erreicht — die Vielseitigkeit der Wissenschaft der Computerlinguistik zu präsentieren, und einen groben Übersicht über dieses Feld zu leisten. Diese Arbeit hat sowohl theoretische als auch praktische Techniken behandelt. Sie hat einerseits Elemente der Fachgebiete der Computerlinguistik diskutiert wie Phonetik und Phonologie (Kapitel 2), Morphologie (Kapitel 3), Syntax (Kapitel 4) und Statistik (Kapitel 4); andererseits aber die Anwendungsgebiete und verwendeten Techniken wie Sprachsynthese (Kapitel 2 und 5), Generierung und Verarbeitung von Korpora und Extraktion von Daten (Kapitel 3), Generierung von Regeln (Kapitel 4) sowie zahlreiche Programmiertechniken, die den Techniken zu Hilfe kommen. 6.2 Zukunft der Sprachsynthese Wir haben in dieser Arbeit ein grosses Gebiet der Computerlinguistik kennengelernt — die Sprachsynthese. Sprachsynthese die von Thierry Dutoit, 1997 als „the production of speech by machines, by way of the automatic phonetization of the sentences to utter“ und in dieser Arbeit als der Versuch eine der komplexesten kognitiven Fähigkeiten der Menschen, die Fähigkeit zu sprechen, zu modellieren. Ohne Zweifel lässt sich (wie in der voliegenden Arbeit gezeigt) feststellen, das Sprachsynthese im allgemeinen ein sehr komplexes Problem ist. Ist es aber möglich „das menschliche Sprechen“ mit formalen, computerlinguistischen Methoden so zu modellieren, dass es sich von einer „natürlichen“, und von einem gesunden Menschen produzierten Sprache nicht unterscheidet? Wenn die Antwort auf die Frage „nein“ lautet, könnte man wiederum fragen: „Warum?“ bzw. „Welche Merkmale der Sprache, die deren Natürlichkeit bestimmen, lassen sich nicht formalisieren?“. Würde andersrum die Antwort „ ja“ lauten, fällt sofort die Frage ein: „Warum gibt es bis heute kein System, dass jegliche sprachliche Äusserungen natürlich synthetisieren kann?“ bzw. „Was muss noch erforscht werden, damit man alle Merkmale der natürlichen Sprache modellieren könnte?“. Es wird in diesem Kapitel versucht, eine Stellung zu den oben formulierten Fragen zu nehmen. Frage: „Wie sieht die Zukunft der Sprachsynthese aus und ist es überhaupt möglich die Sprache so zu modellieren, dass es sich völlig natürlich in allen, in der natürlichen Sprache vorkommenden Kombinationen, wie eine natürliche Sprache anhört?“. Wäre ich dazu gebracht, diese Frage beantworten zu müssen, würde ich zuerstmal den zweiten Teil der Frage bestätigend beantworten. Ja, es ist meiner Meinung nach möglich, nur nicht ohne riesigen Aufwand in der Forschung verschiedener Gebiete. Einerseits ist wichtig zu betonen, dass Sprache ein untrennbarer Teil der Menschen ist und ohne Menschen nicht existieren kann.. Man könnte eventuell bemerken, dass es sich bei der Sprachsynthese nicht um die Sprache selbst, sondern um die Fähigkeit sprechen zu können (in dem Sinne „Laute zu produzieren“) handelt. Somit kann es auch ohne Menschen existieren (z.B. in der Form einer Audioaufnahme). Die Fähigkeit „Laute produzieren zu können“ ist definitiv keine instruktionell erlernte Fertigkeit. Sie basiert auf Erlebnissen aus 68 der Kindheit, langjährigem unbewussten (Sprache eingeboren?) Training der Sprechorgane und Erfahrungen, und ist daher ein Teil der Sprache (in der abstrakten, psychischen Bedeutung), ein Teil der Psyche eines Menschen. Soeben kann diese Fähigkeit nicht ohne Menschen existieren, da nur die Menschen solch einen komplexen phonetischen Apparat haben und auf so einer komplexen Weise miteinander kommunizieren. Die Sprachsynthese versucht diese Tatsache zu umgehen, und modelliert die Merkmale in der produzierten Äusserungen und nicht die Sprache selbst. Vielleicht heisst die Wissenschaft deswegen „Computerlinguistik“ und nicht „Computerpsychologie“? Wie kann man aber die Sprache selbst modellieren, wenn es dafür keine entsprechenden und allgemein akzeptierten Modelle gibt? Die Wissenschaft der „Psycholinguistik“ befindet sich noch momentan eigentlich in dem Entwicklungsstadium, in dem es nur ein logisch gesehen akzeptables Modell der Sprache gibt, das erste und einzige „Parameter setting model“. Es wurde 1979 zusammen mit der bekannten Vorlesungen zu „Government and Binding“ von Noam Chomsky vorgestellt, und gilt als der Anfang der eigentlichen Psycholinguistik. Mit einem begrenzten Instrumentarium von grammatikalischen Regeln und einer endlichen Anzahl von Wörtern kann eine unbegrenzte Menge von Sätzen gebildet werden, darunter solche, die noch nie zuvor gesagt wurden. Die Fähigkeit, unsere Äußerungen auf diese Weise zu strukturieren, ist angeboren und somit ein Teil des genetischen Programms des Menschen. Dieses wird Universalgrammatik genannt. Wir sind uns dieser Strukturprinzipien im Allgemeinen genausowenig bewusst wie wir es uns der meisten unserer biologischen und kognitiven Eigenschaften sind.(Quelle: http://de.wikipedia.org/wiki/Noam_Chomsky) Ob die Theorie gilt oder nicht, lässt sich schlecht verifizieren, nichtdestotrozt berufen sich bis heute viele Wissenschaftler bei ihren Überlegungen darauf. Die psychischen und mentalen Aspekte der Sprache sollte aber auch bei der Entwicklung von Sprachsynthesesystemen nicht vergessen werden. Um die Natürlichkeit der Synthese zu erreichen müssen diese Aspekte berücksichtigt werden. Es ist noch aber zu früh um Annahmen zu nehmen, was in der Zukunft passieren könnte. Andererseits könnten, oder sollten die Erforschungen aus dem Gebiet der Neurolinguistik auch in der Sprachsynthese ihre Anwendungen finden. Bei der Neurolinguistik handelt es sich um den interdisziplinären Zusammenschluss von Teilen der Linguistik, Psycholinguistik, Sprachphilosophie, Neurobiologie, Neurologie, Neuropsychologie und Neuroinformatik. Sie versucht also die Sprache in dem menschlichen, gesunden Gehirn zu lokalisieren und die zu beschreiben, und könnte wichtige Hinweise bezüglich der menschlichen Verarbeitung von Sprache liefern, was wiederum zur Natürlichkeit der Synthese beitragen wird. Die Sprachsynthese heutzutage versucht lediglich menschliche Äusserungen nachzubilden und nicht die menschliche Sprache selbst. Das scheint ein sinvoller Ansatz zu sein, da die diese Äusserungen die einzigen Elemente der Sprache sind, die man tatsächlich untersuchen und klare Ergebnisse bekommen kann. Ich wiederhole hier nochmal den Anfang des Zitates von oben: Mit einem begrenzten Instrumentarium von grammatikalischen Regeln und einer endlichen Anzahl von Wörtern kann eine unbegrenzte Menge von Sätzen gebildet werden, darunter solche, die noch nie zuvor gesagt wurden. Im Kapitel 3 wird ein Experiment beschrieben, bei dem Texte analysiert werden, wobei geprüft und abgespeichert wird, wieviele neue Wortformen bei einer bestimmten Menge vom neuen Text vorkommen, im Vergleich zu einer abgespeicherten Menge von Wortformen, die von anderen Texten kommen. Das Experiment hat sich verschiedene, und nicht 69 alle Wortformen angeschaut. Es wurde da gezeigt, dass sogar nach 90GB analysiertem Text (was 9.000.000 Zeichen Text entspricht), sogar in einem kurzen Text viele neue Wörter verkommen können. Für die die Sprachsynthese sind aber die Kombinationen von Wortformen, und nicht die Wortformen selbst, relevant. Das Problem sieht also umso schwieriger. Rein kombinatorisch gesehen gibt es eine unendliche Anzahl von möglichen Kombinationen. Die Sprachsynthese müsste, um immer völlig natürliche Sprache zu erzeugen, alle diese Kombinationen kennen. Zusammen mit den immer schnelleren Rechnern, die immer mehr Daten speichern und bearbeiten können, wird auch die synthetisierte Sprache immer besser. Werden die Computer eines Tages dazu fähig, online auf riesige (zu lesen: „unendlich“ große) Korpora und Informationsammlungen problemlos zuzugreifen, kann man sich, mindestens rein theoretisch den Idealfall der Unit Selection Synthese vorstellen, nämlich dass der zu synthetisierte Satz schon in solch einer Form in der Datenbank vorkommt, und es somit während der Synthese zu keiner Verkettung der Sprachteile kommen muss. Die Geschwindigkeit der Rechner und die Kapazität wird die Zukunft der Sprachsynthese definieren. Wann wird es also möglich sein, dass die Menschen eine natürliche Sprache von einer computergenerierten Sprache nicht unterschieden werden? Meiner Meinung nach, ist es nicht anderes als die Frage, wann die Rechner den Turing-Test bestehen, da eine natürliche Sprache in der Originalformulierung des Testes, die 1950 von Alan Turing in seiner Publikation „Computing machinery and intelligence“ für das Bestehen notwendig ist. Der Rechner sollte, laut Raymond Kurzweil1 diesen Test im Jahre 2029 bestehen (Ray Kurzweil, Kurzweil Foundation). „Scientists have already reverse-engineered two dozen of the several hundred regions of the human brain; we’ll understand its principles of operation and be in a position to re-create its powers in synthetic substrates well within 30 years. But we won’t program human intelligence link by link in some massive expert system. Nor will we simply set up a single genetic algorithm and have intelligence at human levels automatically evolve itself. Rather, we will set up an intricate hierarchy of self-organizing systems, based largely on the reverse-engineering of the human brain, and then provide the computer entity with an education, which, given the increasing power of machines, can proceed hundreds if not thousands of times faster than the comparable process for humans.“ (Quelle: http://www.wired.com/wired/archive/10.05/longbets.html?pg=5). 1 Raymond Kurzweil ist ein Pionier der optischen Texterkennung (OCR), Text-To-Speech Synthese , Spracherkennung, Flachbett-Scannertechnologie und im Bereich elektronischer Musikinstrumente, insbesondere den Keyboards. Außerdem ist er der Autor der Bücher „The Age of Intelligent Machines“ und „The Age of Spiritual Machines“ (deutscher Titel: "Homo S@piens"). Kurzweil gilt als einer der bedeutendsten Visionäre der KI (Künstlichen Intelligenz). 70 Anhang A Tagsets A.1 Modifiezierte S-Tagset mit IPI PAN Zuordnung Tag V ADJPAP Bedeutung Verb Beispiele siedze VNONP adjektivisches Passivpartizip adjektivisches Aktivpartizip Infinitivform adverbiales Perfektpartizip adverbiales Präsenspartizip unpersönliche Verbform N Nomen ADJPRP INF ADVANP ADVPRP 71 IPI PAN fin: finites Verb nicht in der Vergangenheitsform będzie bedzie: Zukunftsform von być (sein) -my aglt: Suffixe des Verbes być[PL], sein[DE] próbowała praet: Pseudopartizip zapiewaj impt: Befehlsform, Imperativ winien winien: die Lexeme winien, powinien, rad enthalten, die nur analytische Zeitformen bilden chowany ppas: adjektivisches Passivpartizip celujący pact: adjektivisches Aktivpartizip biegać inf: Infinitivform ujżawszy pant:adverbiales Perfektpartizip celując pcon:adverbiales Präsenspartizip mówiono imps:unpersönliche Verbform pies subst: Nomen ludzie depr: depratiatives Nomen Manhattan xxs:fremdes Wort an der Position einer Nominalphrase Forsetzung auf der nächsten Seite Tabelle A.1 – Forsetzung aus der letzen Seite Tag Bedeutung Beispiele chowanie ADJ Adjektiv biały historyczno prostu ADV PRON Adverb Pronomen blisko ty on INTER Interjektion siebie ach, och, ech (INTER+PART) NUM (NUM+ NUMCRD+ NUMORD) Partikel Numeral nie, tu, nieco tyle IPI PAN ger: Ein vom Adjektiv gebildetes Substantiv adj:Adjektiv adja: unflektierbares Adjektiv adjp: postpräpositionales Adjektiv adv: Adverb ppron12: Pronomen 1. und 2. Person ppron3: Pronomen 3. Person siebie: Pronomen siebie qub: unflektierbare Form, die zu anderen Kategorien nicht passt Kardinalzahl dziesięć num: Kardinalzahl Ordinalzahl dwunastego Sammelzahl pięćdziesięciu numcol:Sammelzahl P Präposition przy, od prep: Präposition CONJ Konjuktion i,a, oraz conj Konjunktion SENT ($.) Interpunktion am Ende ., !, ? interp Interpunktion des Satzes $, Interpunktion innerhalb komma, -, interp Interpunktion des Satzes Tabelle A.1: Unifikation von PJWST-Tagset und IPI PAN Tagset 72 Anhang B Relationstrukturen und Festival B.1 Interne Festivalsatzstruktur im Fringe-Format Interne Festivalsatzstruktur des deutschen Satzes „Ich bin ein deutscher Satz “ nach der linguistischen und akkustischen Analyse; Fringe-Format, Ausschnitt: EST_File utterance DataType ascii version 2 EST_Header_End Features max_id 45 ; type Text ; iform "\"Ich bin ein deutscher Satz\"" ; Stream_Items 1 id _1 ; name Ich ; whitespace "" ; prepunctuation "" ; 2 id _2 ; name bin ; whitespace " " ; prepunctuation "" ; 3 id _3 ; name ein ; whitespace " " ; prepunctuation "" ; 4 id _4 ; name deutscher ; whitespace " " ; prepunctuation "" ; 5 id _5 ; name Satz ; whitespace " " ; prepunctuation "" ; 6 id _10 ; name Satz ; pbreak NB ; pos N ; 7 id _9 ; name deutscher ; pbreak NB ; pos ADJ ; 8 id _8 ; name ein ; pbreak NB ; pos ADV ; 9 id _7 ; name bin ; pbreak NB ; pos V ; 10 id _6 ; name Ich ; pbreak NB ; pos N ; 11 id _11 ; name phrase ; 12 id _12 ; name IC ; stress 1 ; 13 id _15 ; name bIn ; stress 1 ; 14 id _19 ; name aIn ; stress 1 ; 15 id _22 ; name dOY ; stress 1 ; 16 id _25 ; name tS6 ; stress 0 ; 17 id _30 ; name zats ; stress 1 ; 18 id _35 ; name _ ; dur_factor -0.11171 ; end 0.576103 ; 19 id _39 ; end 0.598103 ; name ? ; dur_factor -0.233915 ; 20 id _13 ; name I ; dur_factor 1.11578 ; end 0.68762 ; 21 id _14 ; name C ; dur_factor -0.254969 ; end 0.772306 ; 22 id _16 ; name b ; dur_factor -0.162112 ; end 0.834752 ; 23 id _17 ; name I ; dur_factor 0.11924 ; end 0.901212 ; 24 id _18 ; name n ; dur_factor 0.0406929 ; end 0.969725 ; 73 25 id _40 ; end 0.991725 ; name ? ; dur_factor 0.0249055 ; 26 id _20 ; name aI ; dur_factor -0.441345 ; end 1.10944 ; 27 id _21 ; name n ; dur_factor -0.589756 ; end 1.15599 ; 28 id _23 ; name d ; dur_factor -0.49279 ; end 1.19451 ; 29 id _24 ; name OY ; dur_factor -0.371358 ; end 1.32732 ; 30 id _26 ; name t ; dur_factor 0.192649 ; end 1.39517 ; 31 id _27 ; name S ; dur_factor -0.0506968 ; end 1.49355 ; 32 id _28 ; name "6" ; dur_factor -0.235125 ; end 1.5518 ; 33 id _31 ; name z ; dur_factor 0.321983 ; end 1.6493 ; 34 id _32 ; name a ; dur_factor -0.0253699 ; end 1.74031 ; 35 id _33 ; name t ; dur_factor -0.351615 ; end 1.79246 ; 36 id _34 ; name s ; dur_factor 0.485125 ; end 1.91015 ; 37 id _36 ; name _ ; dur_factor -0.079054 ; end 2.49155 ; 38 id _37 ; name L*H ; end 0.772306 ; start 0.576103 ; 39 id _38 ; name H*L ; end 1.91015 ; start 1.5518 ; 40 id _44 ; f0 85.7779 ; pos 1.70261 ; 41 id _43 ; f0 96.8459 ; pos 1.60835 ; 42 id _42 ; f0 106.242 ; pos 0.871015 ; 43 id _41 ; f0 89.7162 ; pos 0.651813 ; 44 id _45 ; wave "[Val wave]" ; End_of_Stream_Items B.2 Interne hierarchnisch aufgebaute Festivalsatzstruktur, die entsprechend der Module des Äusserungstypen TEXT erzeugt wurde Bei der Verwendung des Types TEXT werden folgende Relationen erzeugt: (Token Word Phrase Syllable Segment SylStructure IntEvent Intonation Target Wave) 1. Relation (Token) (utt.relation_tree utt ’Token) ((("Ich" ((id "_1") (name "Ich") (whitespace "") (prepunctuation ""))) (("Ich" ((id "_6") (name "Ich") (pbreak "NB") (pos "N"))))) (("bin" ((id "_2") (name "bin") (whitespace " ") (prepunctuation ""))) (("bin" ((id "_7") (name "bin") (pbreak "NB") (pos "V"))))) 74 (("ein" ((id "_3") (name "ein") (whitespace " ") (prepunctuation ""))) (("ein" ((id "_8") (name "ein") (pbreak "NB") (pos "ADV"))))) (("deutscher" ((id "_4") (name "deutscher") (whitespace " ") (prepunctuation ""))) (("deutscher" ((id "_9") (name "deutscher") (pbreak "NB") (pos "ADJ"))))) (("Satz" ((id "_5") (name "Satz") (whitespace " ") (prepunctuation ""))) (("Satz" ((id "_10") (name "Satz") (pbreak "NB") (pos "N"))))) 2. Relation (Word) (utt.relation_tree utt ’Word) ((("Ich" ((id "_6") (name "Ich") (pbreak "NB") (pos "N")))) (("bin" ((id "_7") (name "bin") (pbreak "NB") (pos "V")))) (("ein" ((id "_8") (name "ein") (pbreak "NB") (pos "ADV")))) (("deutscher" ((id "_9") (name "deutscher") (pbreak "NB") (pos "ADJ")))) (("Satz" ((id "_10") (name "Satz") (pbreak "NB") (pos "N"))))) 3. Relation (Phrase) (utt.relation_tree utt ’Phrase) ((("phrase" ((id "_11") (name "phrase"))) (("Ich" ((id "_6") (name "Ich") (pbreak "NB") (pos "N")))) (("bin" ((id "_7") (name "bin") (pbreak "NB") (pos "V")))) (("ein" ((id "_8") (name "ein") (pbreak "NB") (pos "ADV")))) (("deutscher" ((id "_9") (name "deutscher") (pbreak "NB") (pos "ADJ")))) (("Satz" ((id "_10") (name "Satz") (pbreak "NB") (pos "N")))))) 4. Relation (Syllable) (utt.relation_tree utt ’Syllable) ((("IC" ((id "_12") (name "IC") (stress 1)))) (("bIn" ((id "_15") (name "bIn") (stress 1)))) (("aIn" ((id "_19") (name "aIn") (stress 1)))) (("dOY" ((id "_22") (name "dOY") (stress 1)))) (("tS6" ((id "_25") (name "tS6") (stress 0)))) (("zats" ((id "_30") (name "zats") (stress 1))))) usw. B.3 Beispielsitzung und Tagging im Festival wiacekmz@pinguin /home/users7/wiacekmz/fest/festival/bin 205: clear 1. Festival wird gestartet. 75 wiacekmz@pinguin /home/users7/wiacekmz/fest/festival/bin 206: ./festival German Festival 1.2 (1.9.5):release Oct 2004 Festival Speech Synthesis System 1.96:beta July 2004 Copyright (C) University of Edinburgh, 1996-2004. All rights reserved. For details type ‘(festival_warranty)’ 2. POS Methode wird definiert. festival> (define (POS_Brilltagger utt) > "(POS_Brilltagger utt) > uses the brill tagger. The language of the tagger depends on the trained BRL files " > (Brilltagger_Polish utt)) #<CLOSURE (utt) (begin "(POS_Brilltagger utt) uses the brill tagger. The language of the tagger depends on the trained BRL files " (Brilltagger_Polish utt))> 3. POS Methode wird gesetzt. festival> (Param.set ’POS_Method ’POS_Brilltagger) #<feats 0x93ff978> 4. Variable utt wird gesetzt. festival> (set! utt (Utterance Text "Festival jest bardzo dobrym programem, a Brill najlepszym taggerem.")) #<Utterance 0xb753d158> 5. Vorhandene Relationen werden angezeigt . festival> (utt.relationnames utt) nil 6. TTS Module werden von Hand ausgeführt. Neue Relationen werden hinzugefügt festival> (Initialize utt) #<Utterance 0xb753d158> festival> (utt.relationnames utt) nil festival> (Text utt) #<Utterance 0xb753d158> festival> (utt.relationnames utt) (Token) festival> (Token_POS utt) #<Utterance 0xb753d158> festival> (utt.relationnames utt) (Token) festival> (Token utt) 76 #<Utterance 0xb753d158> festival> (utt.relationnames utt) (Token Word) 6. Relation Word wird ausgegeben. festival> (utt.relation_tree utt ’Word) ((("Festival" ((id "_10") (name "Festival")))) (("jest" ((id "_11") (name "jest")))) (("bardzo" ((id "_12") (name "bardzo")))) (("dobrym" ((id "_13") (name "dobrym")))) (("programem" ((id "_14") (name "programem")))) (("a" ((id "_15") (name "a")))) (("Brill" ((id "_16") (name "Brill")))) (("najlepszym" ((id "_17") (name "najlepszym")))) (("taggerem" ((id "_18") (name "taggerem"))))) 7. Relation Token wird ausgegeben. festival> (utt.relation_tree utt ’Token) ((("Festival" ((id "_1") (name "Festival") (whitespace "") (prepunctuation ""))) (("Festival" ((id "_10") (name "Festival"))))) (("jest" ((id "_2") (name "jest") (whitespace " ") (prepunctuation ""))) (("jest" ((id "_11") (name "jest"))))) (("bardzo" ((id "_3") (name "bardzo") (whitespace " ") (prepunctuation ""))) (("bardzo" ((id "_12") (name "bardzo"))))) (("dobrym" ((id "_4") (name "dobrym") (whitespace " ") (prepunctuation ""))) (("dobrym" ((id "_13") (name "dobrym"))))) (("programem" ((id "_5") (name "programem") (punc ",") (whitespace " ") (prepunctuation ""))) (("programem" ((id "_14") (name "programem"))))) (("a" ((id "_6") (name "a") (whitespace " ") (prepunctuation ""))) (("a" ((id "_15") (name "a"))))) (("Brill" ((id "_7") (name "Brill") (whitespace " ") (prepunctuation ""))) (("Brill" ((id "_16") (name "Brill"))))) (("najlepszym" ((id "_8") (name "najlepszym") (whitespace " ") (prepunctuation ""))) (("najlepszym" ((id "_17") (name "najlepszym"))))) (("taggerem" 77 ((id "_9") (name "taggerem") (punc ".") (whitespace " ") (prepunctuation ""))) (("taggerem" ((id "_18") (name "taggerem")))))) 8. POS Methode wird abgefragt. festival> (Param.get ’POS_Method) "POS_Brilltagger" 9. Tagging Modull, der Brill Tagger wird ausgeführt. Relation POS wird hinzugefügt. festival> (POS utt) #<Utterance 0xb753d158> 10. Relation Word wird nochmal ausgegeben . festival> (utt.relation_tree utt ’Word) ((("Festival" ((id "_10") (name "Festival") (pos "N")))) (("jest" ((id "_11") (name "jest") (pos "V")))) (("bardzo" ((id "_12") (name "bardzo") (pos "ADV")))) (("dobrym" ((id "_13") (name "dobrym") (pos "ADJ")))) (("programem" ((id "_14") (name "programem") (pos "N")))) (("a" ((id "_15") (name "a") (pos "CONJ")))) (("Brill" ((id "_16") (name "Brill") (pos "N")))) (("najlepszym" ((id "_17") (name "najlepszym") (pos "ADJ")))) (("taggerem" ((id "_18") (name "taggerem") (pos "N"))))) festival> (utt.relationnames utt) (Token Word) 11. Relation Token wird nochmal ausgegeben . festival> (utt.relation_tree utt ’Token) ((("Festival" ((id "_1") (name "Festival") (whitespace "") (prepunctuation ""))) (("Festival" ((id "_10") (name "Festival") (pos "N"))))) (("jest" ((id "_2") (name "jest") (whitespace " ") (prepunctuation ""))) (("jest" ((id "_11") (name "jest") (pos "V"))))) (("bardzo" ((id "_3") (name "bardzo") (whitespace " ") (prepunctuation ""))) (("bardzo" ((id "_12") (name "bardzo") (pos "ADV"))))) (("dobrym" 78 ((id "_4") (name "dobrym") (whitespace " ") (prepunctuation ""))) (("dobrym" ((id "_13") (name "dobrym") (pos "ADJ"))))) (("programem" ((id "_5") (name "programem") (punc ",") (whitespace " ") (prepunctuation ""))) (("programem" ((id "_14") (name "programem") (pos "N"))))) (("a" ((id "_6") (name "a") (whitespace " ") (prepunctuation ""))) (("a" ((id "_15") (name "a") (pos "CONJ"))))) (("Brill" ((id "_7") (name "Brill") (whitespace " ") (prepunctuation ""))) (("Brill" ((id "_16") (name "Brill") (pos "N"))))) (("najlepszym" ((id "_8") (name "najlepszym") (whitespace " ") (prepunctuation ""))) (("najlepszym" ((id "_17") (name "najlepszym") (pos "ADJ"))))) (("taggerem" ((id "_9") (name "taggerem") (punc ".") (whitespace " ") (prepunctuation ""))) (("taggerem" ((id "_18") (name "taggerem") (pos "N")))))) festival> 79 Literaturverzeichnis [Wahrig, 1996] Wahrig. „Deutsches Wörterbuch“. Bertelsmann Lexikon Verlag GmbH, 1996. [Christ u.a., 2001] Oliver Christ, Ulrich Heid, Bruno Maximilian Schulze, Helmut Schmid, Christine Stöckert. „Laborübungen Corpora I/II; Institut für maschinelle Sprachverarbeitung“. Universität Stuttgart, Stuttgart 2001 [Przepiórkowski, 2004] Adam Przepiórkowski. „Korpus IPI PAN, Wersja Wstępna“. Instytut Podstaw Informatyki. Warszawa 2004. [Wöllstein-Leisten u.a, 1997] Angelika Wöllstein-Leisten, Axel Heilmann/ Peter Stepan, Sten Vikner. „Deutsche Satzstruktur, Grundlagen der syntaktischen Analyse“. Stauffenburg Verlag Brigitte Narr GmbH. Tübingen 1997. [Marasek, 2003] Krzysztof Marasek. „Synteza Mowy: przegląd technologii i zastosowań ze szczególnym uwzględnieniem języka polskiego“. Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa 2003. [Dogil, 1995] Grzegorz Dogil. „Articulatory correlates of secondary stress in Polish and Spanish. Phonetik Word Stress“. Arbeitspapiere des Instituts für Maschinelle Sprachverarbeitung. Stuttgart 1995. [Durand u.a., 2001] .Durand, A.Durand-Deska, R.Gubrynowicz, B.Marek. „Polish: Prosodic Aspects of „Czy Questions“. Department of Phonetics, University of Provence, Frankreich; Polska Akademia Nauk, Polen; Katolicki Uniwersytet Lubelski, Polen. [Olivier, 1998] livier Dominika. „Polish Text To Speech Synthesis“. Master Thesis, University of Edinburgh, 1998. [Schiller, A., Teufel, S. Thielen, C., 1995] Schiller, A., Teufel, S. Thielen, C.. „Guidelines für das Tagging deutscher Textkorpora mit STTS.“ Technical Report, IMS-CL, University Stuttgart, 1995. http://www.sfs.nphil.uni-tuebingen.de/Elwis/stts/stts. html [Draguhn, 2004] Draguhn, Andreas. „Swinging in the Brain“.Institut für Physiologie und Pathophysiologie, Universität Heidelberg, 2004. http://www.uni-heidelberg.de/ presse/ruca/ruca04-03/s18swing.html [Hawkins u.a, 2004] Hawkins, Jeff, Blakeslee, Sandra. „On Intelligence“. Times Books, 2004. [Brodbeck, 1997] Karl-Heinz Brodbeck. „Das Gehirn ist kein Computer“. http://www. fh-wuerzburg.de/fh/fb/bwl/Offiziel/BWT/pages/pp/2/brodbeck.htm [Spitzer, 1996] Spitzer, M. „Geist im Netz“. Heidelberg-Berlin-Oxford, 1996. 80 [Kurzweil, 1993] Kurzweil, R. „The Age of Intelligent Machines“. Massachusetts Institute of Technology, 1990. [Vasilakopoulos, 2003] Vasilakopoulos, A. „Improved unknown word guessing by decision tree induction for POS tagging with TBL“. In: Proceedings of CLUK 2003, Edinburgh 2003. [Hall, 2003] Hall, J. „ A Probabilistic Part-of-Speech Tagger with Suffix Probabilities“. Master’s Thesis. Växjö University, Växjö, Schweden 2003. [Brill, 92] E. Brill. „A simple rule-based part of speech tagger“. In Proceedings of the Third Conference on Applied Natural Language Processing, ACL, Trento, Italy, 1992. [Brill, 93] E. Brill. „A Corpus-Based Approach to Language Learning“. PhD thesis, Department of Computer and Information Science, University of Pennsylvania, 1993. [Brill, 94] E. Brill. „Some advances in rule-based part of speech tagging“. Proceedings of the Twelfth National Conference on Artificial Intelligence (AAAI-94), Seattle, Wa., 1994. [Schmid, 95] H. Schmid. „Improvements In Part-of-Speech Tagging With an Application To German“. Institut für maschinelle Sprachverarbeitung, Universität Stuttgart, 1995. [Schmid, 94] H. Schmid. „Probabilistic Part-of-Speech Tagging using Decision Trees“. Institut für maschinelle Sprachverarbeitung, Universität Stuttgart, 1994. [Brill u.a, 1993] E. Brill, M.Marcus. „Tagging an unfamiliar text with minimal human supervision“. ARPA Technical Report. 1993 [Schüzte, 1993] Schütze, Hinrich. „Part-of-speech induction from scratch“. Proceedings of the 31st Annual Meeting of the Association for Computational Linguistics, 251-258. 1993 [Brill, 1995] E. Brill. „Unsupervised learning of disambiguation rules for part of speech tagging“.1995. 81