02.02.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!