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