Unit-Selection-Datenbank

Universität Stuttgart Institut für maschinelle Sprachverarbeitung Azenbergstraße 12 70174 Stuttgart Erstellung eines graphischen Tools zur interaktiv...
Author: Franz Sachs
3 downloads 1 Views 1MB Size
Universität Stuttgart Institut für maschinelle Sprachverarbeitung Azenbergstraße 12 70174 Stuttgart

Erstellung eines graphischen Tools zur interaktiven Korpusauswahl für eine Unit-Selection-Datenbank Dai Dai Diplomarbeit Nr.: 59

Prüfer: PD Dr. phil. Bernd Möbius Prüfernummer: 01386 Betreuerin: Bettina Säuberlich

30. Dezember 2006 – 30. Juli 2007 1

Erklärung Hiermit erkläre ich, dass ich die vorliegende Arbeit selbständig verfaßt habe und dabei keine andere als die angegebene Literatur verwendet habe. Alle Zitate und sinngemäßen Entlehnungen sind als solche unter genauer Angabe der Quelle gekennzeichnet.

Ort, Datum

(Dai Dai)

2

Inhaltsverzeichnis 1 Einleitung...................................................................... 5 1.1 Geschichte der Sprachsynthese....................................................................................5 1.2 Überblick über die datenbasierte Sprachsynthese .....................................................6 1.3 Unit Selection ...................................................................................................................7 1.4 Aufgabestellung und Gliederung der Arbeit...............................................................11

2 Korpusdesign ............................................................. 13 2.1 Störende Probleme........................................................................................................13 2.2 Bestimmung von bester Abdeckung ...........................................................................17 2.2.1 Einheitendefinition ..............................................................................................17 2.2.2 Phonetische Kriterien.........................................................................................18 2.3 Auswahlalgorithmen ......................................................................................................19 2.3.1 Greedy-Algorithmus ...........................................................................................20 2.3.2 Andere Auswahlalgorithmen .............................................................................21

3 Modulbeschreibung ................................................... 23 3.1 Datenaufbereitung .........................................................................................................25 3.2 Erzeugung des Textkorpus auf Segmentebene ........................................................26 3.3 Korpusstatistik ................................................................................................................26 3.4 Korpusauswahl mithilfe des Greedy-Algorithmus .....................................................27

4 Verwaltung der Korpora ............................................ 29 4.1 Grundlage der relationalen Datenbank ......................................................................29 4.2 Beziehungen zwischen Tabellen .................................................................................32 4.3 Spezifikation unserer Unit-Selection-Datenbank ......................................................32

5 Erstellung des graphischen Tools............................ 44 5.1 Hauptfenster ...................................................................................................................44 5.2 Menü-Funktionen...........................................................................................................46 5.2.1 Menü Datenbank ................................................................................................47 5.2.2 Menü Korpus.......................................................................................................48 5.2.3 Menü Tabelle .......................................................................................................50

6 Technische Realisierung ........................................... 51 6.1 Erstellung der Datenbank .............................................................................................51 6.2 Anzeigen des Textkorpus..............................................................................................52 6.3 Löschen eines Satzes...................................................................................................54

3

6.4 Editieren eines Satzes ..................................................................................................54 6.5 Erzeugen der Korpusstatistik .......................................................................................55

7 Statistische Untersuchungen.................................... 57 7.1 Statistische Charakteristiken des Ausgangskorpus..................................................57 7.1.1 Frequenzverteilung der Einheiten ....................................................................57 7.1.2 Abdeckung der Einheiten ..................................................................................60 7.1.3 Einfluss von Featurevektoren auf die Korpusstatistik ...................................61 7.2 Evaluierung der Korpusauswahl..................................................................................64

8 Zusammenfassung und Ausblick ............................. 67 Literatur.......................................................................... 70 Anhang A: Beispiel eines Transkriptionsfiles ............ 74 Anhang B: Menüpunkte des graphischen Tools........ 81 Anhang C: Beispielsätze des Korpusfiles .................. 86

4

1 Einleitung 1.1 Geschichte der Sprachsynthese Schon seit langer Zeit versuchen viele Wissenschaftler gesprochene Sprache maschinell zu erzeugen. Schon in der zweiten Hälfte des 18. Jahrhunderts begannen manche von ihnen wie Christian Gottlieb Kratzenstein und Wolfgang von Kempelen mit dieser Arbeit (Kempelen 1791), indem sie eine sprechende Maschine bauten, die den Sprechapparat simuliert, womit nur einzelne Sprachlaute oder auch Wörter und kürzere Sätze hervorgebracht werden konnten. Die weiteren Nachfolger machten zwar einige Fortschritte, waren aber grundsätzliche Neuerungen auf dem Gebiet der Sprachsynthese eigentlich nicht zu verzeichnen. Am Anfang des 20. Jahrhunderts, besonders seit 1950, war es wegen der Entwicklung in der Elektrotechnik möglich, Sprachschall auf elektrischem Weg zu produzieren. Um diese Zeit wurden elektrische Modelle der Sprachproduktion entwickelt. Diese Modelle basierten auf der so genannten „Quelle-Filter“-Theorie. Ein typischer Vertreter dieser Theorie war G. Fant. Nach (Fant 1960) kann man sich die Sprachschall-Erzeugung aus zwei Teilmechanismen zusammengesetzt denken: Die Glottis (Quelle) erzeugt ein Schallsignal (entweder ein periodischer Klang wie Vokale oder aperiodisches Rauschen wie Frikative), das dann im Vokaltrakt mit einer bestimmten Übertragungsfunktion (Filter) vorformt wird. Seit den 70er Jahren gelang ein weiterer Durchbruch, der eng mit der elektronischen Datenverarbeitung verknüpft ist. Ein Computer hat die notwendige Leistungsfähigkeit, Sprachsynthese für praktische Zwecke einzusetzen, und es wurden verschiedene Systeme zur Umwandlung von Text in Sprache entwickelt. Dazu gehört zum einen die Formantsynthese, die aus der Quelle-Filter-Theorie der Sprachproduktion ausging und Sprachsignale komplett virtuell modellierte. Zum anderen wurde eine solche Idee, Sprache durch Verkettung von kleinen Segmenten zu erzeugen, aufgegriffen. Dies wird als konkatenative oder datenbasierte Sprachsynthese bezeichnet. Jedoch können einzelne kleine Segmente nicht ohne weiteres erfolgreich zu einer kontinuierlichen Äußerung verkettet werden, weil die akustischen Eigenschaften eines Sprachlautes von seiner jeweiligen lautlichen Umgebung mitbestimmt werden (Koartikulation). Besser geht es mit sogenannten Diphonen, die aus der zweiten Hälfte eines 5

Sprachlautes und der ersten des folgenden bestehen. Das ergibt dann eine große Anzahl von Elementen, die zu speichern sind. Mit dem konkatenativen oder datenbasierten Syntheseverfahren lässt sich eine ziemlich hohe Natürlichkeit erzielen, ohne eine vollständige Beschreibung ihrer akustischen Grundlage zu erfordern. Mit der Entwicklung des modernen Rechners und immer größerer Speicherkapazität und Rechenleistungsfähigkeit wird in der konkatenativen Sprachsynthese ein korpusbasierter Ansatz durchgesetzt. Bei diesem Ansatz werden umfangreiche, prosodisch und phonetisch annotierte Sprachkorpora benötigt, woraus die längsten verfügbaren Segmente zur Laufzeit ausgewählt und aneinander verkettet werden, statt separat gespeicherte und offline definierte Lautsegmente fester Länge zusammenzufügen. Dieser korpusbasierte Ansatz wird auch Unit Selection genannt. Da die Sprachsynthesequalität stark durch die zur Verfügung stehenden Sprachkorpora bestimmt wird, ist daher eine sehr sorgfältige Erstellung des Sprachkorpus notwendig. Die folgenden Abschnitte stellen dann eine kurze Einführung in das datenbasierte Sprachsynthesesystem vor1. Dort werden die Funktionsweise ihrer zwei Hauptansätze bzw. Diphonsynthese und Unit Selection (ausführliche Beschreibung in Abschnitt 1.3) beschrieben. Dieser Teil der Arbeit soll uns ein klares Bild vermitteln, in welcher Stellung sich das Korpusdesign in der datenbasierten Sprachsynthese befindet, und was ein „designtes“ Korpus motiviert (s. Kapitel 2).

1.2 Überblick über die datenbasierte Sprachsynthese Die datenbasierte Synthese ist heutzutage das am häufigsten eingesetzte Syntheseverfahren. Wie der Name sagt, verfügt die datenbasierte Synthese über eine Sprachdatenbank. Bei der Synthese werden aus dieser Sprachdatenbank die passenden Sprachsegmente in Form von Sprachsignalen ausgewählt und dann aneinander verknüpft. Im Hinblick auf die Sprachdatenbank und insbesondere die Methode zur Verknüpfung lassen sich die datenbasierten Sprachsynthesesysteme in zwei Hauptverfahren klassifizieren: a. Diphonsynthese: Bei der Diphonsynthese wird das Sprachsignal durch Verknüpfung von Diphonen, die im stabilen Zustand eines Phons (steady state) beginnt und in der Mitte des folgenden Phons enden, erzeugt. Eine relativ kleine Anzahl der 1

Um den Rahmen dieser Arbeit nicht zu sprengen, beschränkt sich die TTS-Synthese hier nur auf die datenbasierte Sprachsynthese. Eine detaillierte Einführung in verschiedene Sprachsynthesesysteme ist in (Möbius 2001) zu finden. 6

Diphone ermöglicht die Generierung eines beliebigen Textes einer Sprache. Dieses Syntheseverfahren ist sehr effizient im Hinblick auf Speicherplatz und Rechenzeit. Die Nachteile sind die enorme Anzahl der Schnittpunkte und der Bedarf an starker Modifizierung der prosodischen Parameter, was zu mangelnder Natürlichkeit und Verständlichkeit führt. b. Unit Selection: Unit Selection ist ein Verfahren, um die Probleme, die durch die Limitierungen eines fixierten Inventars entstehen, zu überwinden2. Die zentrale Idee der Unit Selection ist folgende: Dieses Verfahren verfügt über ein großes Sprachkorpus als akustisches Einheiteninventar. Zur Laufzeit wird die längste verfügbare Sequenz phonetischer Segmente ausgewählt, die mit der Sequenz der Ziellaute übereinstimmt. Durch die Auswahl der Einheiten aus einer großen Datenbank kann der phonetische und prosodische Kontext optimal approximiert und der Koartikulationseffekt besser modelliert werden. Die Einheiten bei der Unit Selection sind auch durchschnittlich länger als bei der Diphonsynthese. Somit wird die Anzahl der Verkettungsstellen minimiert und die Notwendigkeit der Signalverarbeitung reduziert, was zur Natürlichkeit der Sprachausgabe beiträgt. Der folgende Abschnitt konzentriert sich auf dieses Syntheseverfahren. Die grundlegenden Verfahren und Techniken dafür werden ausführlich vorgestellt.

1.3 Unit Selection Unit Selection hat sich in den letzten 10 Jahren als ein Standardverfahren für Sprachsynthesesysteme etabliert und wird heutzutage in vielen Anwendungsdomänen am häufigsten eingesetzt. Wie schon in Abschnitt 1.2 beschrieben, steht bei diesem Verfahren ein vollständiges Sprachkorpus zur Verfügung. Viele Einheiten, egal welcher Typ von Einheiten verwendet wird, kommen mehrfach in unterschiedlichen phonetischen und prosodischen Kontexten vor. Um eine viel natürlichere Sprache zu produzieren, werden immer die längsten verfügbaren Fragmente aus dem Sprachkorpus während der Laufzeit ausgewählt und aneinander konkateniert, die mit der Sequenz der Ziellaute der Äußerung anhand prosodischer und spektraler Charakteristiken wie Grundfrequenz, Duration, Amplitude und Betonung übereinstimmen. Die Basis-Einheiten können Diphon, Demiphon (CSELT/Loquendo: Balestri et al., 1999) / Halbphon (AT&T: Beutnagel et al., 1999; Conkie 1999)3 oder Phon sein. Doch die ausgewählten Einheiten haben in den meisten Fällen eine 2 (Carlson & Granstrom 1991) nannte die Hauptmotivation der Unit Selection: “The best solution to the synthesizer problem is to avoid it.” 3 Demiphone/half-phone sind definiert als das Sprachsignalintervall zwischen Lautgrenze und Diphongrenze.

7

durchschnittliche Länge größer als Diphone oder Halbsilben. Idealerweise würde die Äußerung als Ganzes im Korpus gefunden werden (Möbius 2000). Bei ACTOR (Unit-Selection-Synthesesystem auf Italienisch) wurde ein Test über die Verteilung der bei der Synthese ausgewählten Einheiten angeführt, der zeigt, dass über 90% der gewählten Einheiten länger als Diphone waren (Freese 2001). Abbildung 1.1 zeigt die Testergebnisse. Die längeren Segmente sind von Vorteil, dass sie mehr sprachliche Phänomene wie Prosodie, Koartikulation, Transition usw. enthalten, und je passender das gewählte Synthese-Segment ist, desto weniger nachträgliche Modifikationen müssen vorgenommen werden. Mit diesem Verfahren wird die Anzahl der Verkettungsstellen erheblich minimiert, das Maß an notwendigen Signalmodifikationen kann auch reduziert werden, so dass die unerwünschte Verschlechterung der Output-Qualität, die oft durch die Signalmodifikationen verursacht wird, vermieden werden könnte. Für die Auswahl der besten Einheiten aus dem Sprachkorpus wird während der Laufzeit ein geeigneter Auswahlalgorithmus eingesetzt. (Hunt & Black 1996) unterscheidet hierbei zwei Arten von Kosten, Einheitenkosten (target cost) und Übergangskosten (concatenation cost). Die Einheitenkosten sind eine Einschätzung der Abweichung der Inventareinheiten, die als Kandidaten für die Synthese von den Einheiten der zu synthetisierenden Zieläußerung ausgewählt werden. Die Übergangskosten sind eine Einschätzung der Differenz zweier aufeinanderfolgender Inventareinheiten an der Konkatenierungsstelle. Vor der Auswahl wird das Sprachkorpus zuerst offline mittels automatischer Werkzeuge oder manuell aufbereitet. Die Einheiten des Korpus sind mit multidimensionalen Merkmalsvektoren annotiert, die linguistische und kontextuelle Eigenschaften beschreiben. Während der Einheitensuche werden die Merkmalsvektoren der Targetäußerung berechnet. Ausgehend von den Werten der Merkmalsvektoren berechnet dann der Auswahlalgorithmus die beiden Kosten und versucht sie zu minimieren, um die passendste Sequenz zu finden. In Abbildung 1.2 ist ein Überblick über den Aufbau des Unit-Selection-Synthesesystems. Hier sieht man sehr deutlich, wie ein allgemeines Sprachsynsthesesystem aufbaut ist. Die Funktionsweise der Sprachsynthese kann in zwei Phasen geteilt werden. In der ersten Phase wird der eingegebene Text in eine Struktur bzw. in eine phonetische Transkription umgewandelt. Diese Struktur besteht aus Informationen über die Charakteristiken der Textstruktur (Syntax, Semantik, usw.). Dabei werden auch prosodische Informationen wie Lautdauer, Intonationen und Intensität bestimmt. In der zweiten Phase erfolgt die akustische Synthese des Sprachsignals nach den oben beschriebenen Kriterien. Man kann also sagen, dass die Einheitenauswahl auf dem Sprachkorpus basiert. Die Informationen (vgl. Abschnitt 2.1.3), die das Sprachkorpus enthält, werden von allen anderen Modulen des Unit-Selection-Systems verwendet. Die Qualität bzw. die Größe und Abdeckung des Sprachkorpus korreliert direkt mit der Qualität der synthetisierten Sprachausgabe: Expandiert man die Korpusgröße und 8

Abdeckung, erhöht sich die Wahrscheinlichkeit, Spracheinheiten mit spezifischen Eigenschaften (wie Dauer, F0-Kontur, Kontext) zu finden. Somit werden die Bedürfnisse zur Modifizierung des Sprachsignals auch reduziert. Als Ergebnis ist die synthetisierte Sprache viel natürlicher und von höherer Qualität. Deshalb muss bei der Verwendung eines Sprachkorpus eine sorgfältige Auswahl und Aufbereitung der Daten vorgenommen werden. In dieser Arbeit werden zuerst folgende Fragen auf den Punkt gebracht:  Wie groß soll das Sprachkorpus sein? Welche Anforderungen werden an ein Sprachkorpus gestellt? Welche störenden Phänomene treten beim Design eines perfekten Korpus auf? Was ist der Abdeckungsgrad? Welchen Abdeckungsgrad soll ein Sprachkorpus erreichen?



Default Selection Criteria 25

20

15

10

5

0

0

1

2

3

4

5

6

7

8

9 10 11 12 13 14 15 16 17 18 19 20

Abb. 1.1: Länge der bei Synthese gewählten Einheiten (in Demiphonen). (Entnommen aus Balestri et al. 1999).

Im folgenden Kapitel wird auf solche Aufgaben eingegangen.

9

Text

Linguistische Analyse

Prosodie Generierung

Einheiten-Auswahl:

Ti-1

Ti

Ti+1

Ui-1

Ui

Ui+1

Korpus

Waveform Verkettung/ Signalmodifikation

Synthetisierte Sprache

Abb. 1.2: Aufbau eines Unit-Selection-Sprachsynthesesystems

10

1.4 Aufgabestellung und Gliederung der Arbeit Ziel der vorliegenden Diplomarbeit ist die Erstellung eines graphischen Tools für das Design, der Aufbau und die Charakterisierung eines großen Korpus für das Unit-Selection-Synthesesystem. Wie im vorhergehenden Abschnitt beschrieben, steht bei der Unit Selection ein vollständiges Sprachkorpus als akustisches Inventar zur Verfügung. Bei der Synthese werden aus diesem Korpus die passenden Spracheinheiten ausgewählt und aneinander verknüpft. Die Qualität des Sprachkorpus hat gewaltigen Einfluss auf die Qualität der Sprachsynthese. Um weiterhin eine optimale Abdeckung der möglichen Sprachphänomene einer Sprache gewährleisten zu können, ist eine sehr sorgfältige Erstellung des Sprachkorpus notwendig. Aber wie man ein „gutes“ Sprachkorpus definiert, welche Korpusgröße eine optimale Abdeckung verspricht und welche Probleme die Generierung eines perfekten Korpus stören, sind Fragen, die im folgenden Kapitel behandelt werden. In Kapitel 2 werden einige grundsätzliche Überlegungen für das Korpusdesign gemacht. Es wird vorgeschlagen, dass das zugrundeliegende große Korpus in Anlehnung an linguistische und phonetische Kriterien optimiert bzw. kondensiert wird: Alle phonetischen und prosodischen Sprachvarianten werden abgedeckt und das resultierende Korpus bleibt aber möglichst klein und kompakt. Folgende Einheiten werden zur Synthese verwendet: Wörter, Silben, Diphone und Phoneme. Die Diphone bzw. Phone sind zwar die fundamentalen Einheiten in konkatenativen Sprachsynthesesystemen, es werden aber längere Einheiten bevorzugt, um möglichst viele Koartikulationseffekte abzudecken. Wir betrachten hierbei die Kontextvariationen für die Einheiten sooft wie möglich. Das heißt, dass der Maßstab phonetischer Reichhaltigkeiten nicht die Anzahl von Einheittypen, sondern die von kontextabhängigen Einheitentokens ist. Dafür betrachten wir prosodische Informationen wie Betonung, Akzent und positionelle Aspekte innerhalb einer Einheitenebene und lassen sie in die Auswahl mit eingehen. Die Art und Anzahl der Einheiten müssen vor der Korpusauswahl vom Benutzer spezifiziert werden. Für eine gute Synthesequalität müssen wir zwischen der gewünschten Abdeckung und einer angemessenen Korpusgröße einen Kompromiss schließen. Die zugrundeliegenden Korpora werden in einer SQL-Datenbank verwaltet. Die Auswahl und Bewertung geeigneter Sätze erfolgt per SQL-Anfragen. Die hier verwendete Unit-Selection-Datenbank hinsichtlich der Datenorganisation und Verwaltung wird in Kapitel 3 spezifiziert. Auf der Basis der Unit-Selection-Datenbank wird die Korpusauswahl prozessiert. Kapitel 4 gibt einen Überblick über den Ablauf der Korpusauswahl, die aus meheren Modulen besteht. Die Funktionsweise einzelner Module und 11

ihr Zusammenspiel werden in diesem Kapitel beschrieben. Für das Design, den Aufbau und die statistischen Untersuchungen des Textkorpus wird ein graphisches Tool erstellt, um die interaktive Korpusauswahl zu implementieren. Die Sichtung, Auswahl und Korrektur der Daten können auf bequeme Weise auf der graphischen Benutzeroberfläche dargestellt werden. Kapitel 5 befasst sich mit der Bedienung des graphischen Tools. Kapitel 6 behandelt die technische Realisierung des ganzen Prozesses. Hier wird die programmiertechnische Bewerkstelligung (Java-Swing) sowie die SQL-Anfragen, mithilfe derer die Auswahl und Bewertung geeigneter Sätze erfolgt, erklärt. Zum Abschluss der Arbeit wird ein kleines Experiment durchgeführt, bei dem ich zunächst ein Korpus für ein Unit-Selection-Synthesesystem spezifizieren und anschließend mit dem graphischen Tool erstellen werde. Für das Korpus werden statistische Untersuchungen durchgeführt, besonders die Frequenzverteilung und Abdeckung verschiedener Einheiten werden analysiert. Diese Informationen werden benutzt, um zu bestimmen, wie man die Einheiten in Bezug auf unterschiedliche Featurekombinationen behandelt und bessere Methoden zur Optimierung der Abdeckung erkennt. Die Korpusstatistik findet sich in Kapitel 7. Die Ergebnisse der Korpusauswahl nach verschiedenen Auswahlkriterien durch den Greedy-Algorithmus werden zum Schluss ausgewertet und mit dem ursprünglichen großen Korpus verglichen. Kapitel 8 fasst das Korpusauswahlverfahren und die dabei aufgetretenen Probleme zusammen und gibt einen Ausblick über mögliche Verbesserungen und weiterführende Arbeiten.

12

2 Korpusdesign Wie schon im vorigen Abschnitt beschrieben, werden immer die längsten verfügbaren Segmente ausgewählt. Sie sollen sich auch möglichst an die spektrale Charakteristik der Targeteinheiten anpassen, um die Anzahl der Konkatenationspunkte und Signalmodifikationen zu reduzieren und eine höherwertige Synthesequalität zu erzielen. Wie man die Größe des Sprachkorpus, aus dem die aufzunehmenden Sätze extrahiert werden, bestimmt, welche entscheidenden Faktoren beim Erstellen des Korpus berücksichtigt werden müssen und wie groß die Auswirkung des zugrundeliegenden Korpus auf die Synthesequalität sein kann, sind Probleme, an denen schon lange Zeit viel geforscht und experimentiert wurde. Ein zentraler Punkt beim Korpusdesign ist, dass ein gut durchdachtes Sprachkorpus eine optimale Größe von Textdaten haben soll (Möbius 2000). Die Optimierung des Sprachkorpus nach Möbius bedeutet: alle möglichen phonetischen Sprachsequenzen in unterschiedlichen prosodischen Kontexten und Sprechstilen abzudecken, möglichst viele Koartikulationseffekte zu berücksichtigen, um minimale Diskontinuitäten bei Verknüpfung von Elementen zu verursachen. Also es scheint so, dass die Synthesequalität mit der Größe des Korpus steige. Jedoch sprachen viele Linguisten auch für ein kleines Sprachkorpus zur zuverlässigeren Segmentierung und Annotation. Welche Korpusgröße verspricht optimale Abdeckung? Im Folgenden sollen einige Forschungsansätze für das Korpusdesign anhand mancher Überlegungen und im TTS auftretende Probleme (sprachlich und technisch) erklärt werden: In Abschnitt 2.1 werden störende Phänomene bzw. Korpusgröße, LNRE-Verteilung der Sprache und Koartikulation diskutiert, und in Abschnitt 2.2 werden phonetische Designkriterien vorgestellt, auf denen die hier vorzustellende Arbeit aufbaut. Abschnitt 2.3 konzentriert sich auf die am häufigsten verwendeten Auswahlalgorithmen zur Korpusauswahl. Eine ausführliche Beschreibung des Greedy-Algorithmus findet sich in Abschnitt 2.3.1.

2.1 Störende Probleme Das Ziel beim Korpusdesign ist, dass so viele phonetische und prosodische Variationen wie möglich abgedeckt werden. Um dieses Ziel zu erreichen, muss das Sprachkorpus so groß sein, dass es alle für die Sprache repräsentativen sprachlichen Phänomene enthält. Das war früher überhaupt nicht vorstellbar 13

wegen der kleinen Speicherkapazität und Rechenleistung. Dank der schnellen Entwickelung moderner Rechner ist es zwar möglich, ein größeres Korpus zu organisieren, jedoch ist es auch problematisch und nicht realisierbar, da große Korpora schwer aufzubereiten und zu warten sind. Gegen die Realisierbarkeit eines großen Korpus sprechen z.B. auch in (Freese 2001) die Argumente, dass die Einheitenauswahl beim Syntheseschritt wegen des großen Suchraumes viel komplexer wird, mehr Fehler mit der Größe des Korpus auftreten können und die meisten von ihnen nicht auffindbar sind. Ein großes Korpus bedeutet gleichzeitig große Redundanz, da viele Phänomene mehrfach vorkommen würden, was gar nicht nötig ist. Das Korpus ist dann schwer zu kontrollieren. Neben den technischen Problemen gibt es noch sprachliche Probleme. (Van Santen 1997) ermittelt die Realisierbarkeit von einigen Domänen für TTS, einschließlich des Designs von konkatenativen Korpora. Er zeigt uns, dass es aufgrund der Kombinatorik und Komplexität der Sprache unmöglich ist, eine komplette Abdeckung oder mindestens einen sehr hohen Abdeckungsgrad zu erreichen, insbesondere bei nicht eingeschränkten Domänen. Zur Unterstützung seiner Ansicht definiert Van Santen in seinem Paper ein wichtiges Konzept coverage index. Coverage index bezeichnet die Wahrscheinlichkeit, dass alle Featurevektoren eines zufällig ausgewählten Testsatzes in einem Trainingsset eines Korpus vorkommen. Zum Testen konstruiert er für Diphon-Einheiten einen kontextuellen Featurevektor, der prosodische Faktoren wie Wortakzent und Position in der Äußerung beinhaltet. Van Santen berechnet dann den coverage index und als Ergebnis erhält er für ein Trainingsset von 25,000 Featurekombinationen einen Wert von 0.03. Das heißt, dass mehr als 150,000 Featurekombinationen benötigt werden, um einen coverage index von 0.75 zu erreichen, die Unit-Selection Synthese würde zum Erzielen eines angemessenen Abdeckungsgrades absurd große Sprachkorpora erfordern. Die oben erwähnten Ergebnisse resultieren aus den Untersuchungen, in denen Trainings- und Testmaterialien aus ein und derselben Domäne stammen. Es ergeben sich sogar noch viel schlechtere Werte vom coverage index, wenn die Testsätze und das Trainingsset aus verschiedenen Textgenres gewählt werden, da sich die linguistischen Merkmale bzw. die Frequenzverteilung von Korpus zu Korpus sehr stark variieren. Für diese entmutigenden Resultate ist die LNRE-Charakteristik (Large Number of Rare Events) der Sprache verantwortlich. Die LNRE-Charakteristik der Sprache ist ein wirklich durchdringendes Problem im TTS-System, insbesondere bei linguistischer Textanalyse, segmenteller Dauermodellierung und akustischem Korpusdesign. Im Fall eines akustischen Korpusdesign weist diese Charakteristik eine extrem schiefe Frequenzverteilung von 14

Spracheinheiten auf (s. Abb. 2.1): Die überwiegende Mehrheit der Einheiten im Korpus hat eine extrem geringe Auftretenswahrscheinlichkeit, während relativ wenige Klassenmitglieder eine sehr große Auftretenshäufigkeit aufweisen. Die kumulative Wahrscheinlichkeitsmasse der seltenen Ereignisse garantiert, dass

f

V Abb.

2.1:

LNRE-Funktion:

Relativ

wenige

Klassenmitglieder

mit

sehr

großer

Auftretenshäufigkeit, die überwiegende Mehrheit mit extrem geringer Auftretenshäufigkeit.

jeder Satz mindestens ein seltenes Ereignis enthält (Möbius 2003). Die seltenen Spracheinheiten können nicht einfach weggelassen werden. Seltene Einheiten werden im späteren Syntheseschritt für Einheitenauswahl bevorzugt, da sie eine signifikante Qualitätsteigerung mit sich bringen können. Deshalb muss jedes Synthesesystem für solche seltenen Einheiten vorbereitet werden4. Aber das heißt nicht, dass alle Einheiten im Trainingsset eingeschlossen werden müssen (Van Santen & Buchsbaum 1977). Sie erklären, dass z.B. im TTS viele Komponenten Regeln mit einbeziehen, welche die Generalisierung unsichtbarer Fälle aus sichtbaren Fällen erlauben. Deswegen ist es nicht nötig, jede Einheit in einem beliebigen Kontext bereitzulegen. Generell kommen hochfrequente Einheiten im Korpusdesign in Betracht. Noch ein wichtiges Phänomen, welches das Korpusdesign stört, ist der Koartikulationseffekt. Aufgrund der Tatsache, dass die natürliche Sprache üblicherweise aus einer kontinuierlichen Lautfolge besteht, ist der Artikulationsvorgang dieser Lautfolge auch als ein kontinuierlicher Prozess zu begreifen. Sie beschreibt das Phänomen, dass Laute normalerweise nicht isoliert sondern in einem intonatorischen oder prosodischen Kontext, also innerhalb eines Wortes und meist auch innerhalb einer Phrase, artikuliert werden. Es gibt zwar bestimmte Artikulationsstellen bzw. Artikulationsarten für die Bildung eines jeden Lautes, jedoch werden sie durch die benachbarten Laute beeinflusst. Beim Bilden eines Lautes formt man meist schon die artikulatorische Bewegung für den nächsten Laut. Gleichzeitig wird ein Laut 4 Seltene Einheiten sind in Wirklichkeit im Korpus enthalten, indem sie in sorgfältig konstruierten Sätzen eingebettet werden.

15

aber auch durch die Artikulation des vorangegangenen Lautes beeinflusst. Zur Koartikulation gehören z.B. die Reduktion, also die Kürzung oder Tilgung von Vokalen, sowie die Assimilation, d.h. die Angleichung von Lauten in einzelnen Artikulationseigenschaften. Koartikulation ist von vielen Faktoren abhängig. Zum einen sind sie im Sprachsystem selbst zu finden; die Koartikulation hängt von der lautlichen Umgebung (wie z.B. bei Lippenrundung, Nasalierung oder Entstimmung), oder von der Position des Lautes im Wort und von der morphologischen Bedeutung ab. Zum anderen ist es von manchen äußeren Aspekten bedingt, wie z.B. Kommunikationssituation (d.h. wer wann und wo mit wem spricht), oder Sprechtempo (je schneller, desto mehr Assimilationen und Reduktionen), sowie die stilistische Aspekte (ob es sich z.B. um einen Vortrag oder um ein Gespräch mit Freunden handelt). Noch eine statistische Bedingung ist in der „mental syllabary“-Theorie zu finden: Koartikulation ist in hochfrequenten Silben als in seltenen stärker ausgeprägt (Levelt & Wheeldon 1994). Die Auswirkungen der Koartikulation lassen sich anhand von Spektrogrammen identifizieren. Abbildung 2.2 zeigt ein Beispiel der Koartikulation. Hier wird „ada“ sowohl isoliert als auch kontinuierlich gesprochen. Wie die Abbildung zeigt, steigen die Formanten bei „ada“ zum „d“ hin an und senken sich beim zweiten „a“ vom „d“ beginnend wieder ab, während die Formanten bei den isolierten Einzellauten nahezu waagerecht über der Zeit verlaufen.

Abb. 2.2: (links) isoliert gesprochene Folge "a-d-a", (rechts) kontinuierlich gesprochene Folge "ada" (entnommen aus Fellbaum 1996).

Im statistischen Sinne werden durchschnittliche Formantwerte für jeden Laut ermittelt (s. Tabelle 2.1). Also kann man grundsätzlich annehmen, dass alle Laute besonders Vokale ihre für sie typische Formantstruktur haben, durch die 16

sie sich voneinander unterscheiden, und verschiedene Realisierungen der Laute aufgrund prosodischer oder positioneller Faktoren mehr oder weniger von diesen durchschnittlichen Formantwerten abweichen. Obwohl Sprachproduktion aufgrund von Koartikulation ein komplexer Prozess und schwer zu modellieren ist, sollen wir beim Korpusdesign so viele koartikulatorische Phänomene wie möglich berücksichtigen.

Vokal i I ε æ ɑ ‫כ‬ U u Λ

F1 270 390 530 660 730 570 440 300 640

F2 2290 1990 1840 1720 1090 840 1020 870 1190

F3 3070 3550 2480 2410 2440 2410 2240 2240 2390

Tabelle 2.1: Durchschnittliche Formantwerte der Vokale (entnommen aus: Peterson, Barney 1952, S. 183).

Aufgrund der Tatsachen, die oben erwähnt wurden, kamen die Forscher zu der Erkenntnis, dass es keine Patentlösung für die uneinheitliche Eigenschaft gibt, die im Kontext der korpusbasierten Synthese angetroffen wird, jedoch schlägt (Möbius 2003) vor, sorgfältig die linguistischen und phonetischen Kriterien, denen die Korpora nachkommen sollten, zu definieren, um den Abdeckungsgrad von Sprachkorpora zu erhöhen. Im nächsten Abschnitt wird darauf eingegangen, wie man solche Kriterien definiert, basierend auf dem Kompromiss zwischen Korpusgröße und dem erwarteten Abdeckungsgrad.

2.2 Bestimmung von bester Abdeckung 2.2.1 Einheitendefinition Bevor wir auf die Kriterien zur Bestimmung des besten Abdeckungsgrades eingehen, diskutieren wir zunächst die Einheitenauswahl für das Korpusdesign, da die Abdeckung eines Domains über das Konzept der Einheit definiert wird. In dieser Diplomarbeit werden Phone, Diphone, Silben und Wörter als Einheit benutzt. Phone werden gewählt, da sie die zugrundeliegenden segmentellen phonetischen Einheiten sind. Mit Phonen wird das Abdeckungsproblem auch 17

offensichtlich vereinfacht: Das phonetische Inventar ist relativ klein im Vergleich zu Einheiten mit einem größeren Umfang. Die Nachteile von Phonen sind, dass die Anzahl der Konkatenationspunkte sehr vergrößert und eine viel schlechtere und unangenehmere Synthesestimme produziert wird. Deshalb ist eine größere Einheitengröße für synthetisierte Sprache hoher Qualität notwendig. Diphone, Triphone, Silben und Wörter werden häufig als Grundeinheiten für Unit-Selection Synthese benutzt, da längere Segmente mehr weiterreichende koartikulatorische Effekte abdecken, und es ist daher gewissermaßen möglich, ein Textkorpus mit hoher Abdeckung zu gestalten. Zwar ist ein größerer Umfang prinzipiell möglich, doch die daraus resultierende Anzahl der einzubeziehenden Einheiten könnte leicht die Speicherkapazität sprengen (Freese 2001). Sie berechnete die VLU-Verteilung 5 und die Zuwachsrate und fand heraus, dass je mehr Phoneme es gibt, aus denen die Einheit besteht, umso exponentieller ist die Zuwachsrate. Außerdem treten die längeren Einheiten in der Sprachproduktion mit niedrigerer Frequenz auf, was dazu führt, dass die Anzahl der aufzunehmenden Sätze auch exponentiell zunehmen würde, wenn man seltene Einheiten auch in die Menge der abzudeckenden Einheiten aufnehmen will. Beim Bestimmen der Anzahl der Einheiten müssen wir noch einen weiteren Kompromiss machen: zwischen guter Abdeckung und gegebenen praktischen Beschränkungen (wie Aufnahmezeit, Speicherkapazität oder verfügbare menschliche Arbeitsleistung beim Korpusdesign). Ziel der Unit Selection ist aber natürlich trotzdem ein möglichst großes zusammenhängendes Stück aus dem Sprachkorpus auszuwählen.

2.2.2 Phonetische Kriterien Einige Kriterien sind erforscht worden, um festzustellen, wie man die „beste“ Abdeckung definiert. Generell ermittelt wurde die Optimierung der Sprachdatenbank bezüglich der phonetischen Kriterien. In der Arbeit von (François & Boeffard 2001) wurde der phonetische Reichtum eines Textkorpus in der Anzahl von Einheiten gemessen. Die Einheiten können aus Phonemen, Diphonen, Silben oder Wörtern bestehen und finden sich in einer ihrer wahrscheinlichsten Transkriptionen statt. Das heißt, dass an den Einheiten noch entsprechende Featuremerkmale annotiert bzw. vordefiniert sind, um ein phonetisch möglichst reichhaltiges Korpus zu erhalten. Als Featuremerkmale6 werden prosodische (wie z.B. Stress, Akzent) oder positionelle Informationen 5

Die in (Freese 2001) für die Unit Selection gewählten Einheiten sind Sequenzen aus zwei oder mehr Phonemen und erhielten daher den Namen VLU (Variable Length Unit). 6 Van Santen und Buchsbaum definierten in ihrer Abeit (Van Santen & Buchsbaum 1977) für jede Einheit einen Featureraum(feature space) £: £ = F1 x ... x FN, wobei FN ein Featurefaktor ist. Jedes individuelle phonetische Vorkommen p entspricht einem Featurevektor ƒ(p) = (ƒ1,..., ƒN) ∈ £, wobei ƒi ∈ Fi mit 1 ≤ i ≤ N. Sie betrachteten die Anwendung, dass der Featurervektor auf eine bestimmte akustische Variable wie z.B. die Segmentdauer abgebildet wird. 18

(wie z.B. vorhergehende und folgende Phone) mit einbezogen, die ebenfalls in die Textselektion mit eingehen sollen. Wie können andere Featuremerkmale den Einheiten sehr leicht hinzufügen, jedoch, wie in (van Santen & Buchsbaum 1997) aufgezeigt, ist es ziemlich unerschwinglich und unrealisierbar, alle möglichen Features und Kontexte zu repräsentieren: Die Hinzufügung von einem beliebigen Featurefaktor multipliziert die Menge der Daten, die für die systematische Darstellung des ganzen Featureraumes benötigt werden (Black & Lenzo 2001). Ein allgemeiner Ansatz von phonetischen Kriterien besteht darin, die LNRE-Charakteristiken der Frequenzverteilung von Einheiten in Anspruch zu nehmen. Die Forscher setzen den Akzent auf die Tatsache, dass manche Einheiten viel häufiger vorkommen als andere. Sie stellen dar, falls sie nur die Phoneme abdeckten, die mehr als 1000 Vorkommen haben, wird der Prozentanteil von Tokentypen auf 14% verringert, jedoch kann 87% der Tokens des ganzen Korpus abgedeckt werden (Saikachi 2003). Anders formuliert, ist es realisierbar, das große Textkorpus zu komprimieren, woraus das resultierende Subkorpus aufgrund der logarithmischen Eigenschaft von Einheiten ebenfalls eine uniforme Abdeckung aufweist. Die Notwendigkeit dieses Verminderungsvorgangs ist unmittelbar klar, da kleinere Korpora viel zuverlässiger segmentiert und annotiert werden können, und kleine akkurat gelabelte Sprachkorpora bessere Synthesequalität liefern als große automatisch segmentierte Korpora (Black & Campbell 1995). Problematisch ist hier, wie man feststellen kann, welche Teile des Korpus abgeschnitten werden können, ohne den Abdeckungsgrad und folglich die Synthesequalität zu schwächen. Das ist der Grund dafür, warum die Forscher statistische Untersuchungen vornehmen müssen. Die Korpusstatistik werden wir in Kapitel 7 ausführlich diskutieren. Die Auswahl des Textmaterials wird technisch durch die Verwendung eines Auswahlalgorithmus realisiert, der diejenigen Sätze auswählt, die bestimmte Kriterien erfüllen, um das Textkorpus kompakt und klein zu halten. Mehrere Algorithmen stehen uns zur Verfügung. Im Fogenden werden auf die heutzutage häufig verwendeten Auswahlalgorithmen eingegangen.

2.3 Auswahlalgorithmen Um die Einheiten-Abdeckung des Textkorpus für die Aufnahme des Syntheseinventars zu optimieren, stehen mehrere Algorithmen zur Verfügung, wie oben erwähnt. (François & Boeffard 2001) vergleichen drei Set-Covering-Methoden: Greedy-Algorithmus, Spitting-Algorithmus und Pair-Exchange-Algorithmus. Jeder Algorithmus wird durch einige Kriterien 19

definiert, welche die Satzauswahl leiten. Sie beziehen sich auf die Anzahl, auf die Länge und auf die Seltenheit von Einheiten der Sätze. Da eine vollständige Suche nach dem besten Set von Sätzen rechnerisch sehr teuer ist, wird ein Greedy-Algorithmus dazu am häufigsten eingesetzt. Der Greedy-Algorithmus kann nicht immer optimale Lösungen erbringen, aber er ist normalerweise der einfachste und leistungsfähigste der Algorithmen, die bisher vorhanden sind. Außerdem ist er sehr leicht zu implementieren. Der Greedy-Algorithmus besteht darin, die geschätzten Kosten zum Erreichen des Ziels zu minimieren (François & Boeffard 2002).

2.3.1 Greedy-Algorithmus Der Greedy-Algorithmus kann mit den folgenden Schritten zusammengefaßt werden: 

Input:  Das große Textkorpus, annotiert mit Merkmalsvektoren.  Menge der abzudeckenden Einheiten  Ein leeres Korpus



Algorithmus:  Schritt 1: Berechne für jeden Satz seinen Wert: Bei der Satzbewertung werden die Parameter wie die Gewichte der Einheiten, sofern vorhanden, das Verhältnis von geforderten Einheiten zu redundanten Einheiten und die Satzlänge berücksichtigt.  Schritt 2: Wähle den Satz mit der höchsten Satzbewertung7 aus.  Schritt 3: Speichere den besten Satz in das resultierende Korpus und lösche ihn aus dem ursprünglichen Korpus.  Schritt 4: Lösche die im ausgewählten Satz enthaltenen Einheiten aus der Menge der abzudeckenden Einheiten.  Wiederhole Schritt 1,2,3,4, bis die vorher festgelegte Korpusgröße erreicht ist, bzw. die Liste der abzudeckenden Einheiten leer ist.



Output:  Ein kleines Subkorpus, das möglichst viele Einheiten Einheitsvektoren abdeckt, dabei aber möglichst klein bleibt.

bzw.

Die Implementierung dieses Algorithmus ist sehr einfach, jedoch ist das Problem, wie man den optimalen Satz in Schritt 1 definiert, nicht so einfach. Wie in (François & Boeffard 2001) beschrieben, kann ein Satz ausgewählt 7

Der Satz mit der höchsten Bewertung wird als der beste Satz (best sentence) angenommen. Dieser ist die Wahl des Greedy-Algorithmus. 20

werden, wenn er eines der folgenden Kriterien erfüllt:    

die maximale Anzahl von Einheitentypen der Äußerung; die maximale Anzahl von Einheitentokens der Äußerung; die seltensten Einheiten; eine Kombination von den oben erwähnten Kriterien, gewichtet durch die Satzlänge.

Hier unterscheidet man Einheitentypen und Einheitentokens: die letzteren sind individuelle Instantiierungen der ersteren. Das unten stehende Beispiel illustriert die ersten beiden Kriterien für Satzbewertung:    

Einheitenliste: 3 Tokens für „gu:“, 3 Tokens für „t@n“, 3 Tokens für „ta:“ Satz A hat 1 Token von „gu:“, 1 Token von „t@n“ und 1 Token von „ta:“ Satz B hat 2 Tokens von „gu:“ und 2 Tokens von „ta:“ Beim Kriterium 1: Satz A erhält einen Satzwert von 3, Satz B von 2; Satz A wird gewählt. Beim Kriterium 2: Satz A erhält einen Satzwert von 3, Satz B von 4; Satz B wird gewählt.

2.3.2 Andere Auswahlalgorithmen Neben dem Greedy-Algorithmus stehen uns noch zwei weitere oft verwendete Auswahlalgorithmen zur Verfügung: Spitting-Algorithmus und Pair Exchange -Algorithmus. Die beiden Methoden haben das gleiche Operationsprinzip wie die Greedy-Methode, und zwar nehmen sie als Eingabe ein großes Textkorpus und eine Liste mit den Einheiten, die im resultierenden Korpus abgedeckt werden sollen. Als Ausgabe wird ein kleineres Korpus erzeugt, das so viele gewünschte Einheiten wie möglich enthält, dabei aber die Redundanz so klein wie möglich hält. Voneinander unterscheiden sie sich in den Kriterien, welche die Auswahl von Sätzen leiten. Die Kriterien beziehen sich entweder auf die Anzahl der Einheiten der Sätze, oder auf die Einheitenlänge, oder auf die Seltenheit der Einheiten. Die Spitting-Methode funktioniert nach dem umgekehrten Kriterium im Vergleich zur Greedy-Methode. In jeder Schleife entfernt sie aus dem großen Textkorpus sukzesiv den Satz mit der schlechtesten Bewertung, solange bis kein Satz mehr aus dem Korpus entfernt werden kann, ohne die Qualität zu mindern. Die Pair Exchange-Methode kann entweder mit einer totalen Abdeckung, die mittels der Greedy- oder Spitting-Methode erzielt wurde, oder mit einem 21

zufälligen Subkorpus beliebiger Größe beginnen. Diese Methode tauscht solange Sätze mit dem Ausgangskorpus aus, bis keine Sätze mit besserer Bewertung mehr in diesem enthalten sind. In (Francois & Boeffard 2002) werden die drei Auswahlalgorithmen auf ein Korpus mit 3000 Sätzen angewendet und verglichen. Sie kommen zu dem Schluss, dass die Pair Exchange-Methode eine totale Abdeckung nicht garantieren kann. Die Greedy- und die Spitting-Methode haben vergleichbare Leistungen. Die Greedy-Methode ist etwas besser als Spitting und vor allem weniger zeitraubend. Die Greedy-Methode wird daher in Sprachsynthesesystemen sehr oft eingesetzt. In der vorliegenden Arbeit wird auch die Greedy-Methode verwendet, deren Auswahlkriterien gewissermaßen abgeändert werden. Der modifizierte Greedy-Algorithmus wird bei der Modulbeschreibung der Korpusauswahl in Kapitel 4 noch ausführlich erklärt.

22

3 Modulbeschreibung Diese Diplomarbeit sollte das Ziel erreichen, dass durch Kombination statistischer und linguistischer Verfahren eine optimale Abdeckung linguistischer und phonetischer Merkmale durch ein möglichst kleines Sprachkorpus gewährleistet werden. Dabei findet ein Zusammenspiel mehrerer Module statt, welches in der folgenden Abbildung 3.1 grob vorgestellt und nachfolgend näher erläutert wird.

23

Datenbank

Erstellung des Korpus

Greedy-Algorithmus

Aufzunehmende Sätze

Abb. 3.1: Ablauf der Korpusauswahl

24

des

Löschen / Korrigieren

des

Featureliste

Festlegung Feature-Raumes

Festlegung Feature-Raumes

Korpusstatistik

3.1 Datenaufbereitung Wie der Name “datenbasierte Sprachsynthese” schon andeutet, sind Daten die Grundlagen des ganzen Systems. Eine große Menge von Daten ist notwendig für gute Statistiken, nicht nur für TTS-Systeme. Sie dient auch als Trainingsmaterial für andere Domänen der Computerlinguistik (ASR8 etc.). Für beschränkte Anwendungsdomänen kann eine zufällige Auswahl eines Subkorpus zum Trainingszwecke schon genügen (van Santen & Buchsbaum 1977). Aber meistens sind die Anwendungsdomänen unbeschränkt, besonders in TTS-Applikationen. In solchen Fällen ist das Thema der Abdeckung sehr wichtig (s. auch Kapitel 2). (Van Santen & Buchsbaum 1997) haben beobachtet, dass die Frequenzverteilung der sprachlichen Phänomene unter Umständen von Textgenre zu Textgenre variiert. Deshalb muss man damit rechnen, dass das Ausgangskorpus möglichst mehrere Textgenres enthält, um zu vermeiden, die Phänomene, die überwiegend in einer bestimmten Domäne vorkommen, nicht überzubewerten. Natürlich muss das Ausgangskorpus eine Vielfalt an phonetischen und prosodischen Kontexten, und auch verschiedene Sprechstile enthalten. Nach der Zusammensetzung der Sätze für das Ausgangskorpus können wir dann mit der Transkribierung des Ausgangskorpus starten. Die Sätze werden von einem zuvor entwickelten automatischen Prozessor (in unserem Fall mit Festival) mit phonetischer und prosodischer Transkription gelabelt (Möhler 1999). Natürlich kann die Transkribierung fehlerhaft sein, da sie automatisch stattgefunden hat. Die Transkription wird in dieser Arbeit in dem Format in Textdateien abgespeichert, dass jedes Wort eines Satzes auf drei Segmentebenen bzw. auf Wort-, Silben- und Phonebenen dargestellt wird, die ihre entsprechenden Merkmale beinhalten (s. Tabelle 3.1, vgl. Anhang A).

Ebene Wortebene

Merkmale Wortstring Silbenstring, Silbenebene stress, accent, falls vorhanden Phonstring, Silben-stress, vorangehendes und nachfolgendes Phon, Position innerhalb der Silbe, Phonebene Silben-Informationen (Silbenstring, stress, accent, tone, Position innerhalb der Phrase), Wort-Informationen (part-of-speech tag, Wortstring) Tabelle 3.1: Übersicht über die Merkmale der Transkriptionsdatei.

8

ASR = Automatic Speech Recognition. 25

Die Transkriptionsinformation wird in einer sogenannten SQL-Datenbank verwaltet. Wie die Datenbank aufgebaut wird und wie die Daten verwaltet werden, ist das Thema des nächsten Kapitels.

3.2 Erzeugung des Textkorpus auf Segmentebene Nachdem die transkribierten Sätze in die SQL-Datenbank eingelesen werden, kann man nun das Textkorpus auf unterschiedlicher Segmentebene erstellen. Das hier gemeinte Textkorpus soll in einem Format erscheinen, dass jedem Satz eine mit der in Tabelle 3.1 aufgelisteten Merkmale annotierte Sequenz zugeordnet wird (vgl. Anhang C). Welche Einheit für die Unit Selection gewählt wird, und welche Featuremerkmale mit in die Korpusauswahl eingehen, müssen noch vor der eigentlichen Korpusauswahl vom Benutzer spezifiziert werden. Wie oben im letzten Kapitel schon erwähnt, sollten die Sätze des Korpus eine syntaktisch möglichst richtige phonetische Transkription und möglichst regelmäßige und korrekte Struktur (zur leichten Lesbarkeit) besitzen, da die für einen Sprecher eventuell ungewöhnlichen Ausdrücke und Syntax oder zu lange Sätze einem reibungslosen Ablauf der Sprachaufnahmen hinderlich sein können. Die richtige phonetische Transkription ist aus zwei Gründen wichtig: Erstens geht aus ihr hervor, welche Einheiten von den Sätzen abgedeckt werden. Zweistens wird sie von einem Aligner (z.B. dem am IMS von Stefan Rapp entwickelten Aligner, Rapp 1995) für das Segmentieren und Etikettieren der aufzunehmenden Sätze des Sprachkorpus verwendet. Deshalb ergibt sich die Notwendigkeit manueller Korrektur aus Qualitätsmängeln bei dem Ausgangskorpus, die nicht vollständig beseitigt werden können. Das so entstandene Textkorpus mit Featureinformationen wird nach der manuellen Qualitätskontrolle als Input dem Auswahlprogramm übergeben, welches eine Menge von Sätzen extrahiert, die für das TTS aufgenommen werden sollen.

3.3 Korpusstatistik Bei der Korpusauswahl handelt es sich um die Extrahierung der Sätze, die eine möglichst repräsentative Verteilung der sprachlichen Phänomene erhalten, mit dem Zweck, einen guten Kompromiss zwischen Inventargröße und Abdeckung zu bekommen. Als Hauptkriterium dafür wird meistens die

26

Frequenz genommen. Die Aufgabe dieses Moduls ist es, die häufigsten und wichtigsten Phänomene der gesprochenen Sprache zu bestimmen. Nachdem der Benutzer die Features, die mit in die Korpusauswahl eingehen, schon festgestellt hat, wird die Statistikkomponente auf die Datenbank angewendet und gibt als Ergebnis die nach der Frequenz sortiert Liste aller in dem Ausgangskorpus enthaltenen „komplexen“ Einheiten aus. Diese Frequenzliste fungiert auch als Input für das Auswahlprogramm. Hierbei muss man sich noch klar machen, falls insbesondere die Sprachkorpus-Größe schon vorher festgestellt ist, besteht die Gefahr, dass es für die Abdeckung der sehr niederfrequenten Einheiten keine Garantie gibt, da nur diejenigen Einheiten, die häufig im Ausgangkorpus auftreten, in das Sprachkorpus integriert werden, was bei der Synthese wegen des unbekannten Textmaterials zu einer schlechteren Synthesequalität führen kann. Es ist ebenfalls wichtig, wie schon in Kapitel 2 erwähnt, dass das als Quelle verwendete große Korpus sehr sorgfältig geplant werden muss, da die Auswahl der abzudeckenden Einheiten stark abhängig davon ist.

3.4 Korpusauswahl mithilfe des Greedy-Algorithmus Nach der statistischen Auswahl der abzudeckenden Einheiten, die in der Featureliste aufgelistet sind, wird das resultierende Korpus (inklusive phonetischer und positioneller Annotation) für das Sprachkorpus automatisch unter Verwendung eines Greedy-Algorithmus aus dem großen Sprachkorpus extrahiert. In Kapitel 2 wurden schon der Greedy-Algorithmus im allgemeinen Sinne beschrieben. Jedoch, wie in (Van Santen & Buchsbaum 1977) erwähnt, ist die Optimierung der frequenzgewichteten Abdeckung sehr sinnvoll zum Trainieren von akustischen Modellen. Immer nur ein Token einer Einheit ist nicht ausreichend für gute Modellierung. Zu diesem Zweck müssen wir den Algorithmus bzw. die Kriterien für die Auszeichnung des best sentence abändern: Anstatt die Typenzählung zu maximieren, maximiert man die frequenzgewichtete Typenzählung. Wie in (Van Santen & Buchsbaum 1977) und (François & Boeffard 2001) erläutert, wird an jeder Einheit ein Counter verbunden, der mit einer vorher bestimmten Zahl (sagen wir für die Arbeit 3) initialisiert. Jedesmal wenn ein Satz, der diese Einheit enthält, ausgewählt wird, wird 1 vom Counter abgezogen. Wenn der Counter bei 0 ist, wird die Einheit aus der Einheitenliste gelöscht. Doch nicht alle Einheiten haben die vorher festgelegte Tokenzahl in dem ganzen Textkorpus erreicht, deswegen müssen wir noch entscheiden, ob solche Einheiten gewissermaßen abgedeckt werden 27

sollen (partial covering)9 oder ignoriert werden können (total set covering)10. Beim letzteren Kriterium würde es in das Risiko geraten, dass auf eine Einheit während der späten Synthese gestoßen wird, die nicht im Korpus abgedeckt ist. Aber wir müssen erkennen, dass die Anzahl der benötigten Sätze viel größer wird, wenn wir die Einheiten nicht wegnehmen, die im Korpus weniger als drei mal vorkommen. Welches Kriterium hier verwendet wird, ist abhängig davon, welche Mothoden eingesetzt werden 11 oder welche Größe die Satzmenge für die Aufnahme haben muss. In dieser Arbeit wird die erste Lösung genommen. Das heißt, dass für diejenigen Einheiten, welche die vorher definierte Frequenzzahl erreichen oder überschreiten, das target count auf diese feste Zahl gesetzt wird, während für andere Einheiten die ursprüngliche Frequenzzahl als ihre traget counts genommen wird. Bei der Satzbewertung wird ein Faktor mit einbezogen, nämlich die Satzlänge (Anzahl der Einheiten), über die wir noch nachdenken müssen. Es ist leicht zu verstehen, dass der Greedy-Algorithmus im Allgemeinen längere Sätze bevorzugt, da dessen Bewertungsmechanismus die maximale Tokenzählung mit sich bringt, jedoch sind längere Sätze sehr schwer auszulesen. Um dieses Problem zu lösen, können wir vor der Textselektion ein Limit der Satzlänge festlegen. Im Mittel passen 70-120 Phoneme pro Satz bei der Textselektion.

9

Das heißt, dass für diejenigen Einheiten, die weniger als drei mal vorkommen, die originale Frequenzzahl als die abzudeckende Frequenzzahl angenommen wird. 10 Das heißt, dass nur diejenigen Einheiten, die mehr als drei mal vorkommen, berücksichtigt werden. 11 (François & Boeffard 2001) zog total set covering vor und argumentierte dafür, dass partial covering die Verwendung mancher spezifischen Methoden(z.B. für seltene Einheiten) verbietet. (Saikachi 2003) führte Tests an, die zeigen, dass das resultierende Subkorpus trotzdem mehr Variationen als die abgezielten abdecken kann, aufgrund der Suboptimalität des Greedy-Algorithmus. 28

4 Verwaltung der Korpora Das Unit-Selection-Synthesesystem verfügt über ein großes Korpus. Große Datenmengen verlangen prinzipiell nach einer adäquaten Organisation. Eine Organisationseinheit eines Computers, welche zentral die gespeicherten Daten verwaltet, wird als ein Datenbanksystem bezeichnet. Mit Datenbanksystemen können redundante Informationen vermieden werden. Mit weniger Personal-Aufwand und geringerem Speicherbedarf verbessert sich auch die Chance, einen stets aktuellen Datenbestand für bestehende und zukünftige Anwendungen bereitzustellen. In Übereinstimmung mit den (strukturellen) Eigenschaften linguistischer Daten und zur Analyse der Anforderungen an ein Sprachinventar wird ein relationales Datenbankmodell entwickelt, auf welches ich in diesem Kapitel im Detail eingehen möchte. Bevor nun damit angefangen wird, müssen zuerst einige wichtige Definitionen der relationalen Datenbank erklärt werden.

4.1 Grundlage der relationalen Datenbank Eine relationale Datenbank ist eine Datenbank, die auf dem relationalen Datenbankmodell basiert. Die erste Aufgabe für diese Diplomarbeit ist die Erstellung einer mächtigen bzw. adäquaten relationalen Datenbank. Mit der gewünschten Datenbank soll es möglich sein, linguistische Daten der Unit Selection auf überschaubare Weise darzustellen und sie schneller und bequemer zu handhaben. Auf der anderen Seite ist es dabei von Vorteil, dass die relationale Datenbank von der deskriptiven Abfragesprache SQL 12 unterstützt wird. Das bedeutet, dass auch ein gelegentlicher Benutzer eine echte Chance hat, in kurzer Zeit die Datenbank zu nützen und mit ihr zu arbeiten. Außerdem ist die leichte Handhabung ein großer Vorteil in Gegensatz zu anderen Datenbanktypen, denn diese erfordern meistens Programierkenntnisse um die Datenbank auswerten zu können. Aus diesen Gründen ist die relationale Datenbank heute die meist angewandte Datenbank. Die Tabelle 4.1 zeigt einige Beispiel-Tabellen unserer Unit-Selection-Datenbank, mit Hilfe derer wir die grundlegendsten und

12

Im Rahmen der vorliegenden Arbeit wird MYSQL für Datenhaltung benutzt. MYSQL verwendet die SQL-Syntax (Structured Query Language) zum Abfragen und Bearbeiten relationaler Datenbanken, die auf ANSI-SQL/92 basiert. Für eine komplette Beschreibung von SQL-Sprache wird auf die Fachliteratur verwiesen. 29

wichtigsten Konzepte relationaler Datenbanken, nämlich Relation, Tupel, Attribut, sowie Primärschlüssel und Fremdschlüssel erläutern. Man kann sich im Allgemeinen eine relationale Datenbank als eine Kollektion von Tabellen vorstellen, in welcher eine Menge der Datensätze eines bestimmten Typs abgespeichert ist. Diese Art der Datenrepräsentation ist sehr kompakt, sichert eine gute Lesbarkeit und ermöglicht damit auch prinzipiell direkte manuelle Korrekturen. Jeder Datensatz ist somit eine Zeile (Tupel) in einer Tabelle. Ein Tupel ist eine endliche, geordnete Menge von Attributwerten (Attribute, oder Ausprägungen zu den Attributen), die Eigenschaften einer Entität beschreiben (z.B. WordID und SylID bei der SENTENCE-Tabelle, Syllable und Frequency bei der SYLLABLE-Tabelle oder Phon und SylPosition bei der PHON-Tabelle in Tabelle 4.1). Die Menge aller Tupel mit den gleichen Attributen wird nun wiederum als Relation bezeichnet. Die Tabelle 4.1 illustriert vier Relationen unserer Unit-Selection-Datenbank SENTENCE, SYLLABLE, PHON und SYLSTRING. So können in der SENTENCE-Relation die Attributwerte (ID, SentNo, Genre, WordID, WordPos, SylID und SylPos) zur Beschreibung eines Satzes dienen. Z.B. beschreibt mit den obigen Attributen das Tupel (4, 1, 1, 2, 2, 4, 1) die Aussage, dass der Satz-Nr. 1 mit der Genre-Nr. 1 in der 2. Wortposition das Wort-Nr. 2 und das Wort-Nr. 2 in der 1. Silbeposition die Silbe-Nr. 4 besitzt, und dises Tupel die Identifizierungsnummer 4 hat. Das Ähnliche versteht man in der SYLLABLE-Relation, in welcher die Attributwerte (ID, Syllable, Frequency, Position, Stress, Tone, Accent, Previous, Next, POS) zur Beschreibung einer Silbe, und in der PHON-Relation, in welcher die Attributwerte zu (ID, Phon, Frequency, SylStress, Previous, Next, SylPosition) zur Beschreibung eines Phons dienen. Das Tupel (1, 1, 1, 1, 0, 4, 3, 60, 38, 1) der SYLLABLE-Relation heißt z.B., dass die Silbe-Nr. 1 Stress-Nr. 0, Tone-Nr. 4, Akzent-Nr. 3 und Postag-Nr. 1 aufweist, ein mal im Korpus vorkommt und sich in der 1. Phrase-Position stattfindet, der das Phon-Nr 60 vorangeht und das Phon-Nr. 38 nachfolgt, deren Identifizierungsnummer 1 ist.

30

Relationenname Attribute/Spalten

SENTENCE: ID SentNo Genre WordID

WordPos

SylID

SylPos

1

1

1

1

1

1

1

2

1

1

1

1

2

2

3

1

1

1

1

3

3

4

1

1

2

2

4

1

...

...

...

...

...

...

...

Tupel/Zeilen

SYLLABLE: ID

Syllable

Frequency

Position

Stress

Tone

Accent

Previous

Next

POS

1

1

1

1

0

4

3

60

32

1

2

2

1

1

0

4

3

38

52

1

3

3

1

2

1

4

2

9

60

2

4

4

1

2

1

4

3

60

15

1

...

...

...

...

...

...

...

...

...

...

PHON: ID

Phon

Frequency

SylStress

Previous

Next

SylPosition

1

0

1

0

60

34

2

2

34

1

0

0

38

3

3

38

1

0

34

32

3

...

...

...

...

...

...

...

15

33

1

1

3

18

1

SYLSTRING: ID

Name

1

?Eks

2

tsE

3

lEnt

4

?Is



… Tabelle 4.1: Tabellen der Unit-Selection-Datenbank

31

4.2 Beziehungen zwischen Tabellen In der relationalen Datenbank spielt die Beziehung zwischen verschiedenen Relationen eine entscheidende Rolle. Hierbei spricht man von zwei Arten von Schlüsseln: Primärschlüssel (primary key) und Fremdschlüssel (foreign key). Um Relationen eindeutig verknüpfen zu können, muss jedes Tupel einer Relation eindeutig identifiziert werden. Ein Attribut, das ein Tupel mit allen seinen Attributwerten eindeutig identifiziert, wird als Primärschlüssel bezeichnet. Die Verknüpfung zwischen Relationen erfolgt über Werte, die als Fremdschlüssel bezeichnet werden. Ein Fremdschlüssel ist ein Attribut, das sich auf einen Wert des Primärschlüssels einer anderen (oder der gleichen) Relation bezieht. Aus den Beispieltabellen (Tabelle 4.1) ergibt es sich, dass die Primärschlüssel durch das ID-Attribut13 der vier Relationen dargestellt werden. Man kann auch erkennen, dass die SENTENCE-Relation nur direkte Verknüpfung zur SYLLABLE- und nicht zur PHON- und SYLSTRING-Tabelle besitzt, während die SYLLABLE-Relation sich mit der PHON- und SYLSTRING-Relation verbindet. Hierbei ist das SylID-Attribut als Fremdschlüssel definiert (das heißt, dass das SylID der SENTENCE-Relation auf die ID der SYLLABLE-Relation verweist). Die Grundidee bei der Erstellung einer relationalen Datenbank ist, dass jede Beziehungsmenge besser als eigenständige Tabelle definiert werden kann, wobei die Identifikationsschlüssel der zugehörigen Entitätsmengen als Fremdschlüssel in dieser Tabelle auftreten müssen. Der Primärschlüssel der Tabelle kann der aus den Fremdschlüsseln zusammengesetzte Identifikationsschlüssel sein oder ein anderer Schlüsselkandidat, z.B. in Form eines künstlichen Schlüssels. Weitere Merkmale erscheinen als zusätzliche Attribute in der Tabelle. In Tabelle 4.1 sieht man, dass jeder Tabelle ein künstlicher Identifikationsschlüssel ID hinzugefügt wird, der zur Überführung der Beziehungsmengen in Relationen führt.

4.3 Spezifikation unserer Unit-Selection-Datenbank In der vorliegenden Arbeit wurden die linguistischen Daten bzw. die verschiedenen phonetischen Einheiten (Sätze, Wörter, Silben und Phone) der Unit Selection in eine solche Struktur einer SQL-Datenbank konvertiert. Um eine effiziente Verwaltung und eine schnelle Suche zu ermöglichen, wurden die Einheiten jeweils in eine eigenständige Tabelle gespeichert. Jeder Einheittyp wurde durch eine Menge von für ihn typischen (phonetischen, 13

In vielen Fällen besitzen Tupel allerdings keinen Primärschlüssel, der sich aus den Daten ergibt. In diesem Fall ist ein zusätzliches Attribut wie z.B. eine durchnummerierte ID zu definieren, die dieser Primärschlüssel aufnimmt. 32

prosodischen und positionellen) Merkmalen charakterisiert. Die Datenbank enthielt auch statistische Informationen für Korpusstatistik (z.B. Anzahl der Vorkommen der Einheit im Textkorpus). Die ganze Unit-Selection-Datenbank enthält insgesamt 14 Tabellen bzw. Relationen. Davon sind 8 Tabellen für das Speichern der phonetischen Einheiten und ihre zugehörigen Merkmale, alle anderen beziehen sich auf Informationen über die betreffenden Merkmale. Im Folgenden werde ich eine Übersicht über die Unit-Selection-Datenbank geben, indem ich den Aufbau aller Tabellen und die Beziehung zwischen ihnen beschreibe:

Tabelle SENTENCE: ID SentNo Genre WordID WordPos SylID SylPos Die SENTENCE-Tabelle speichert alle Satzinformationen. Das „Genre“-Attribut gibt an, aus welcher Textsorte ein Satz stammt. Eine Textsorte kann Zeitung, Sport, Literatur oder ein Reisebericht usw. sein. Obwohl die meisten Einsatzgebiete für Sprachsynthesesysteme über eine eingeschränkte Anwendungsdomäne verfügen, ist die Synthese von unbeschränktem Text immer ein Forschungsziel. Das heißt, dass die in der Datenbank enthaltenen Textsorten möglichst quantitativ ausgewogen sein müssen, um eine domänenunabhängige Frequenzverteilung zu erhalten. In (Bozkurt & Ozturk & Dutoit 2003) wird ein Vergleichstest für fünf türkische Textkorpora unterschiedlicher Textgenres (Theaterstück, Roman, Astronomie, Geschichte und Nachrichten) durchgeführt, um die Triphonverteilung und -abdeckung zu untersuchen. Der Test zeigte, dass nur 56% der Triphone in allen Korpora vorkommen. Durch die Auswahl der häufigsten Triphone könnte man eine ziemlich hohe Abdeckung erzielen, jedoch ist diese hohe Abdeckung nicht bei einem anderen Textkorpus garantiert. Bozkurt & Ozturk & Dutoit kommen zu der Erkenntnis, dass der Ansatz, die häufigsten Einheiten abzudecken, nur für eingeschränkte Anwendungsdomänen geeignet ist. Die SENTENCE-Tabelle stellt auch strukturelle Informationen dar, die angeben, aus welchen Wort-(WordID) und Silbensequenzen (SylID) der Satz besteht und in welcher Reihenfolge (WordPos und SylPos) solche Sequenzen stehen.

33

Tabelle WORD: ID Word Frequency POS Die WORD-Tabelle listet alle Wortformen auf. Jeder Wortform wird ihr Part-of-Speech-Tag (POS-Attribut) zugewiesen. Aus der linguistischen Sicht betrachtet, ist POS-Tagging ein Prozess, bei dem die Wortklasse der Wörter (Substantiv, Adjektiv usw.) bestimmt wird. POS-Tagging ist aber nicht eine einfache Liste von Wörtern und ihren Wortklassen, da viele Wörter je nach Kontext verschiedene Wortklassen repräsentieren können. In Wirklichkeit ist in vielen oder sogar den meisten Sprachen ein großer Prozentsatz von Wortformen mehrdeutig. Die Mehrdeutigkeit kann möglicherweise zu unterschiedlicher Akzentuierung führen. Der dazugehörende Frequenzwert (Frequency) jeder Wortform wird in der WORD-Tabelle auch angegeben, der für die Korpusstatistik verwendet wird.

Tabelle SYLLABLE: ID Syllable Frequency Position Stress Tone Accent Previous Next POS In der SYLLABLE-Tabelle werden alle im Korpus enthaltenen Silbenformen aufgelistet. Jede Silbenform hat ihre Identifikationsnummer (ID) und ihren Namen (Syllable). Die Tabelle speichert weiterhin die für Silben relevanten prosodischen Eigenschaften wie stress, tone und accent. Die drei prosodischen Begriffe werden definiert als wahrgenommene akustische Prominenz, also die Hervorhebung einer Einheit gegenüber benachbarten. In Anlehnung an (Möbius 1993) ist stress die Akzentuierung einer Silbe eines Wortes. Unter tone sind hier Grenztöne bzw. Phrasenakzente gemeint. Ein Grenzton oder ein Phrasenakzent wird immer auf der jeweils letzten Silbe einer Phrase (einer intermediären Phrase oder einer Intonationsphrase 14 ) realisiert und bestimmt die Phrasierung (Pierrehumbert 1980). Von accent soll gesprochen werden, wenn eine betonte Silbe auch tonal, also durch eine Grundfrequenzbewegung makiert ist (Pitchakzent). Stress, tone und accent sind die wichtigsten Korrelate der Prosodie auf der Silbenebene, und meistens sind alle prosodisch relevanten akustischen Größen betroffen wie z.B. Dauer, Grundfrequenz, Energie und spektrale Eigenschaften (mit entsprechend erhöhtem artikulatorischen Aufwand für prominente Silben).

14

Eine Intonationsphrase ist eine prosodische Konstituente, die hinsichtlich verschiedenartiger Kriterien definiert ist. Es wird im Allgemeinen angenommen, dass die Grenzen einer Intonationsphrase den Grenzen einer syntaktischen Konstituente entsprechen. Sie können einer Pause folgen oder vorangehen. Eine Intonationsphrase besteht aus einer oder mehreren Intermediärphrasen. 34

In der SYLLABLE-Tabelle werden auch die phonemische Umgebung bzw. vorangehendes (prev) und nachfolgendes Phon (next) und auch die Stelle der Silbe im Satz (Position) eingekalkuliert. Diese Informationen spielen bei der akustischen Analyse auch eine große Rolle, um die damit verbundenen Intonationsunterschiede zu berücksichtigen, da Dauer, Intensität und Tonhöhe von Sprachlauten beispielsweise beträchtlich je nach ihrer Position im Satz bzw. in einer Phrase variieren; Ein typisches phrasenbezogenes Pränomen ist die Deklination, die damit bezeichnet wird, dass der Grundfrequenzverlauf im Laufe der Äußerung bzw. Phrase eine abnehmende Tendenz in seiner Amplitude aufweisen kann. An Phrasengrenzen tritt auch beispielsweise eine Dehnung der der Phrasengrenze unmittelbar vorausgehenden Silben auf (finale Längerung / final lengthening). Informationen über die phonemische Umgebung sind insofern relevant, dass solche segmentellen 15 Einflussfaktoren , die auf die Mikroprosodie zurückgreifen sollen (Möhler 1998), auch für die F0-Prädiktion sehr bedeutsam sind. Zusätzlich wird hier das POS-Merkmal (POS) angeben, da eine bestimmte Silbe in einem Wort mit verschiedenen grammatischen Kategorien vorkommen kann, und verschiedene grammatische Kategorien können zur verschiedenen Prosodien (wie z.B. zu verschiedenen Akzenttypen) führen. Der dazuhörende Frequenzwert (Frequency) für jede Silbenform wird auch berechnet und in der Tabelle angegeben.

Tabelle PHON: ID Phon Frequency SylStress Previous Next SylPosition Die PHON-Tabelle listet alle Phonformen auf mit den dazugehörenden Frequenzwerten (Frequency), Betonung (SylStress), der phonemischen Umgebung (Previous & Next) und Informationen über die Silbenstruktur (SylPosition). Die Betonung bezieht sich auf die Silbenbetonung. Der Grund zur Ermittlung der phonemischen Umgebung ist auch wie bei Silben auf die Mikroprosodie zurückgegriffen. Die Information über die Silbenstruktur ist wichtig, da angenommen wird, die Verteilung der Lautsegmente innerhalb der Silbe sei für die Grundfrequenz auf Silbenebene relevant (Sehnert & Englert 2001). Silbenstruktur-Informationen sind wichtige Kriterien, um Wörter in prosodischen Wörtern (oder Akzentgruppen16) zu strukturieren.

15

Beispiele der Mikroprosodie sind 1) die Absenkung der F0 zum Silbennukleus nach stimmhaften Konsonanten, Anhebung nach stimmlosen Konsonanten, oder 2) F0-Gipfel am Silbenkernanfang nach stimmlosen Konsonanten, F0-Gipfel in der Silbenkernmitte mit langsamen Anstieg nach stimmhaften Konsonanten, oder 3) P0-Perturbationen im Silbennukleus nach Verschlusslauten. 16 Einheit, die aus einer betonten Silbe und aller folgenden unbetonten Silben besteht (Möbius 1993). 35

Tabelle SYL_PHON: ID IDmain IDsub Subposition Diese Tabelle der Unit-Selection-Datenbank bezieht sich auf den Aufbau der Schnittstelle zwischen anliegenden Einheitenebenen, d.h., aus welchen Einzellauten (IDsub) und in welcher Reihenfolge (Subposition) sich beispielsweise in der SYL_PHON-Tabelle die Silbe (IDmain) zusammensetzt wird. Die Schnittstelle zwischen Wort und Silbe wird nicht extra durch eine Tabelle dargestellt, da schon in der SENTENCE-Tabelle eine solche Verknüpfung repräsentiert worden ist:

Tabelle WORDSTRING: ID

Name

Bei der Tabelle WORDSTRING werden alle im Korpus enthaltenen Wortstrings (Name in Textform) aufgeführt.

Tabelle SYLSTRING: ID

Name

Bei der Tabelle SYLSTRING werden alle im Korpus enthaltenen Silbenstrings (Name in Textform) aufgeführt.

Tabelle PHONDEF: ID Sampa type class length height placeofart roundness voiced sonorant

Die Tabelle PHONDEF stellt das phonetische Lautinventar für die Synthese der deutschen Sprache dar: 60 Vokale, 32 Konsonanten, sowie ein Stille-Zeichen (auch als ein Phon angerechnet). Die Vokale werden wiederum in 4 Schwas, 40 normale Vokale, 10 Diphtonge und 6 nasalisierte Vokale (für die Aussprache von französischen Fremdwörtern) unterteilt. Die Vokale lassen sich im phonetischen Inventar durch Länge (length: kurz/lang), Höhe (height: hoch/tief/mittelhoch/mitteltief/undefiniert bei Diphtongen), horizontale Zungenbewegung (placeofart: vorne/mitten/hinten), und Lippenrundung (roundness: gerundet/ungerundet) klassifizieren. Auf der Grundlage solcher Artikulationskategorien wird die Qualität bzw. die Formantstruktur der Vokale 36

bestimmt, die jedem Vokal einen spezifischen Klang gibt und durch welche die Vokale sich voneinander unterscheiden. Die Artikulationsstellen und -orte der Vokale kann man sehr gut im artikulatorischen Vokalviereck 17 erkennen. Abbildung 4.1 zeigt das traditionelle Vokalviereck der Werte der wichtigsten Vokale des Deutschen 18 nach Formantwerten (durchschnittliche Werte) geordnet. Es kann prinzipiell angenommen werden, dass die Vokalhöhe Auswirkungen auf F1 und die horizontalle Zungenbewegung auf F2 hat. Kurze Vokale werden zentralisierter im Vokalviereck artikuliert als die langen. Bei den Diphthongen stellen sich akustische Verschiebungen des ersten und zweiten Vokalformanten auf der Frequenzachse dar (Petursson & Neppert 1991). Aus Abbildung 4.1 kann man auch entnehmen, dass die Lippenrundung einen Einfluss auf die Stellung des zweiten Formanten hat. Verschiedene prosodische Realisierungen (wie z.B. Betonung, Akzent) der Vokale führen zu Abweichungen von diesen durchschnittlichen Formantwerten. Es wurden z.B. Experimente durchgeführt, die zeigen, dass betonte Vokale sich im Vokalviereck weiter außen als unbetonte befinden (Jessen et al. 1995). Neben den hier genannten Kategorien wird bei Vokalen im unseren phonetischen Lautinventar noch die Unterscheidung hinsichtlich der Position innerhalb eines Wortes bzw. einer Silbe (initial oder nicht) gemacht. Das heißt, dass das Phonem /a/ hierbei in die zwei für die Synthesezwecke relevanten Allophone [a], [?a]19 aufgesplittet wird. Diese Unterscheidung wird in das Lautinventar integriert, da die so entstehenden Varianten unterschiedliche spektrale Qualitäten20 aufweisen. So ergibt sich eine doppelte Anzahl von Symbolen dieses Lautinventares im Gegensatz zu anderen bekannten Systemen mit etwas mehr als 40 Symbolen (wie z.B. dem des Bell Labs Systems GerTTS mit 45 Allophonen) (Möbius 1999). Konsonanten werden im phonetischen Lautinventar durch vier Merkmale beschrieben: Artikulationsstelle und -art, Stimmhaftigkeit und die Sonorant/Obstruenten-Unterscheidung. Die Artikulationsstellen von Konsonanten ergeben sich als Kombination aus einem Artikulator und einem Artikulationsort. Von vorn nach hinten werden sie aufgereiht, wie in Tabelle 4.2. Konsonanten werden auch nach der Art der Verengungen oder Konstriktionen (Artikulationsart) klassifiziert. Durch eine vollständige Konstriktion oder Reibung eines Artikulatores gegen eine bestimmte Artikulationsstelle oder die Kombination der beiden werden jeweils Plosive, Frikative und Affrikate gebildet. Wenn kein Geräusch entsteht, dann spricht man von Sonoranten. Dazu gehören Nasale, Laterale und Gleitlaute. Durch die Stimmhaftigkeit 17

schematische Darstellung des Mundraumes und der Orte, wo die Vokale gebildet werden Die Allophone, die für die Aussprache von Fremdwörtern verwendet werden, werden hier nicht dargestellt. 19 Mit glottal stop (Sampa: [?]) am Silbenanfang. 20 Geht einem Vokal ein glottaler Verschlusslaut voran, sind Verschlusslösungen im Spektrogramm zu sehen. Der glottale Burst weist mehrere Bereiche hoher Energiekonzentration auf, die den Formantwerten des nachfolgenden Vokals entsprechen. Es treten auch keine Formanttransitionen vom glottalen Burst zum Folgevokal auf (Machelett 1996). 18

37

werden stimmhafte und stimmlose Konsonanten unterschieden. Hinsichtlich dieser Merkmale werden Konsonanten in der Hinsicht ihrer akustischen Eigenschaften stark voneinander unterschieden. Die spektrale Qualität der Frikative ist z.B. weitgehend von der Artikulationsstelle und von dem Grad der Engebildung abhängig. Bei den stimmhaften Konsonanten findet sich im niedrigen Frequenzbereich (unterhalb von etwa 500Hz) eine Energiekonzentration gegenüber den stimmlosen. Sonoranten sind akustisch den Vokalen ähnlich. Das Konsonantensystem des Lautinventars in Bezug auf die erwähnten artikulatorischen Eigenschaften zeigt Tabelle 4.2.

Abb. 4.1: traditionelles Vokalviereck der Werte der wichtigsten Vokale des Deutschen nach Formantwerten geordnet (entnommen aus Neppert 1992).

38

ORT ART

Bilabiale

Labiodentale

U

U

p

Stops

V

V

U

V

b

Frikative

f

Affrikate

pf

v

T

D

Alveolare

Postalveolare

Palatale

U

U

U

V

t

d

s

z

ts

m

Nasale (s)

V

S

Z

tS

dZ

39

r

w

Glides (s) das

C

deutsche

Konsonantensystem,

Velare U

V

k

g

x

Uvulare U

V

Glottale U

V

? R

h

N

l

4.2:

V

n

Laterale (s)

Tabelle

Dentale

L j

klassifiziert

Obstruenten/Sonoranten-Unterscheidung. (SMAPA- statt IPA-Symbole). U: stimmlos; V: stimmhaft; S: Sonorant. (entnommen aus Freese 2001)

nach

Arrtikulationsort,

-art,

Stimmhaftigkeit

und

Tabelle TONE: ID 1 2 3 4

Tone H% HL% NONE

Wie oben bereits erwähnt, bezieht sich hier tone auf die beiden Grundkategorien Phrasenakzent und Grenztöne. Grenztöne (Hochtöne H% und Tieftöne L%) 21 werden auf der jeweils letzten Silbe einer Intonationsphrase realisiert. Ein Grenzton kann auch fakultativ am Anfang einer Phrase anwesend sein. Phrasenakzente (hier wird nur der hohe Phrasenakzent H- beachtet) haben Skopus über intermediäre Phrasen.

Tabelle ACCENT: ID 1 2 3

Accent H*L L*H NONE

Zurückgeführt auf (Pierrehumbert 1980), weist ein Pitchakzent einer Silbe eine bestimmte Tonkontur zu, und die Zusammensetzung mehrerer Tonkonturen bezeichnet man als Intonation. Ein Pitchakzent ist stets mit einer betonten Silbe assoziiert. Hier unterscheidet man drei Typen von Akzent: H*L (fallender Akzent), L*H (steigender Akzent) und NONE (wenn die Silbe keinen Akzent hat)22. Bei der Wahl eines Akzenttyps müssen syntaktische, semantische und informationsstrukturelle Kriterien herangezogen werden.

21

Wir verwenden TOBI für TONE und ACCENT (Schweitzer & Haase 2000) und haben das in sog. TOBI-Light überführt wegen der Komplexität. 22 Nach (Pierrehumbert 1983) gibt es 6 wohlgeformte Akzente: zwei monotonale H* und L*, und vier bitonale: H*L, HL*, L*H und LH*. In (Schweitzer & Haase 2000) werden sogar 9 verschiedene Akzente unterschieden (H*l, L*H, L*HL, HH*L, H*M, H*, L*, ..L und ..H). Wir haben eine vereinfachte Akzent-Darstellung. Alle Akzenttypen werden auf 2 abgebildet, um die Komplexität zu reduzieren. 40

Tabelle PHRASEPOS: ID 1 2 3

Phrasepos ini med fin

Will man natürlich kingende Sprachsynthese erreichen, müssen unter anderem geeignete Stellen für eine Phase ermittelt werden. Es gibt drei wichtige Positionen von einer Silbe innerhalb einer intermediären Phrase: ini(tial), med(ial) und fin(al). Die initiale und finale Position bezieht sich jeweils auf die erste und letzte Silbe der intermediären Phrase, während sich alle anderen Silben innerhalb der Phrase in der medialen Position befinden. Verschiedene Positionen zeichnen sich durch verschiedene tonale Strukturen aus.

Tabelle POS: ID 1 2

Pos function content

Beim Part-of-Speech-Tagging handelt es sich um die Zuweisung einer grammatischen Kategorie zu einem Token. In dieser Arbeit werden die Wörter in zwei grobe Kategorien eingeteilt (auch um die Komplexität zu reduzieren), nämlich Funktions-(function) und Inhaltswörter (content). Das POS-Tagging ist ein wichtiges linguistisches Kriterium für Phrasierung und Lautdauermodellierung.

Tabelle SYLPOS: ID 1 2 3

Sylpos onset nucleus coda

Die SYLPOS-Tabelle bezieht sich auf die Silbenstruktur, die aus einem onset (eine Folge von Konsonanten), einem nucleus (Vokale) und einem coda (eine Folge von Konsonanten) besteht. Der onset und der coda sind fakultativ, während der nucleus obligatorisch ist. Silbenstrukturinformationen sind notwendig für das Lautdauermodell, da die Dauer von der Position des Lautes relativ zur Silbengrenze abhängt und sind auch notwendig für das 41

Intonationsmodell. Sie werden zur Alignierung der F0-Kontur mit dem segmentalen Material verwendet (Möbius 1993).

Tabelle GENRE: ID 1

Genre Egal (news, literature, travel, soccer usw.)

Da in der Arbeit unbeschränkte Anwendungsdomänen in Betracht kommen, werden das Textgenre (Genre: news, travel, soccer, literature usw.) in die Datenbank eingetragen. Um eine klare Sicht über die Unit-Selection-Datenbank zu erhalten, wird das komplette Schema aller Fremdschlüsselbeziehungen am Ende in Abbildung 4.2 so abgebildet (Die Primärschlüssel sind unterstrichen, die Fremd- und die Primärschlüssel in der referenzierten Tabelle werden durch rote Pfeile miteinander verbunden):

42

WORD_SYL

GENRE SYLPOS ID Genre

ID Sylpos

SENTENCE ID SentNo Genre WordID WordPos SylID SylPos

ID IDmain IDsub Subposition PHON ID Phon Frequency SylStress Previous Next SylPosition

WORD ID Word Frequency POS

POS ID Pos

PHONDEF WORDSTRING SYLLABLE ID Syllable Frequency Position Stress Tone Accent Previous Next POS

SYLSTRING ID Name

ID Sampa type class length height placeofart roundness voiced sonorant

TONE

ID Name

ID Tone

SYL_PHON ID IDmain IDsub Subposition

PHRASEPOS

ACCENT

ID Phrasepos

ID Accent

Abb. 4.2: Fremdschlüsselbeziehungen zwischen Tabellen der Unit-Selection-Datenbank.

43

5 Erstellung des graphischen Tools Eine der Hauptaufgaben dieser Diplomarbeit ist die graphische Umsetzung der Korpusauswahl für die Unit-Selection-Datenbank, welche neben der komfortablen Übersicht auch eine schnelle Abfrage bzw. graphische Interaktion ermöglicht. In dieser Arbeit wurde ein graphisches Tool entwickelt. Es ist in besonderer Weise dazu gedacht, dem Benutzer eine Übersicht der Modulrealisierung und aller Einstellungsmöglichkeiten zu ermöglichen. Der Benutzer soll die Gelegenheit erhalten, durch das Tool auf die Daten unserer vorhandenen Datenbank zuzugreifen und sie auf das Unit-Selection-System abzustimmen. Der Benutzer kann auch auf sehr komfortable Weise die Art und Anzahl der Einheiten spezifizieren, vor allem die Feature-Kombination an den Einheiten anhand der gegebenen praktischen Beschränkungen (wie z.B. Aufnahmezeit und -kosten) feststellen, die Korpusstatistik erstellen und schließlich den Auswahlalgorithmus durchführen.

5.1 Hauptfenster Zuerst ist der allgemeine Aufbau der Hauptfenster zu klären. Im Allgemeinen soll das GUI die folgenden Punkte nach der Anforderungsanalyse erfüllen: Zugriff auf die Daten der Datenbank, graphisches bzw. tabellarisches Anzeigen der Daten des Textkorpus und aller vom Benutzer zu spezifizierenden Operationen, Erstellung der Inputfiles für den Auswahlalgorithmus und Menü zur Navigation der drei Punkte. Unser GUI besteht von oben nach unten aus 4 Hauptteilen (s. Abb. 5.1):

44

Abb. 5.1: Hauptfenster der graphischen Benutzeroberfläche.

Am oberen GUI-Rand findet man die Menüleiste, welche die Operationen unter Schlüsselbegriffen bzw. den drei Hauptbestandteilen des Korpusauswahlprogramms, nämlich Datenbank, Korpus und Tabelle als Menü-Objekte zusammenfasst. Das Menü ermöglicht eine schnelle Ausführung, ohne genaue Kommandos in Textform oder Tastaturkürzel anwenden zu müssen. Werden die drei Menü-Objekte ausgewählt, öffnet sich eine Liste mit den dazugehörigen Menüpunkten (siehe Anhang B), von denen jeder eine spezielle Funktion in der entsprechenden Domäne vornimmt. Im Datenbank-Menü werden fünf Funktionen definiert, die zum Löschen, zum Neuanlegen, zum Ergänzen, zum Laden einer Datenbank und zum Ausloggen des Systems. Das Korpus-Menü liefert die Funktionen zur Anzeige des Textkorpus und Korpusstatistik auf einer Segmentebene mit spezifizierter Featurekombination. Mittels des Tabelle-Menüs werden Funktionen realisiert, die zum Speichern der aktuellen Tabelle bzw. des Korpus- und Featurelist-Files dienen. Die detaillierte Beschreibung der Menü-Komponenten findet im nächsten Abschnitt (5.2) statt. In der Mitte des Hauptfensters befindet sich das Tabellenfenster. Da das Anklicken auf einen Menüpunkt häufig Abfragen von Daten einer Datenbank 45

hervorruft, und immer eine Tabelle von der Datenbank zurückgeliefert wird, kann diese dann einfach in diesem Tabellenfenster dargestellt werden. Hier wird noch die Sortierfunktion eingesetzt. Mit der Hilfe dieser Sortierfunktion können die Tabellenansichten bzw. die Daten einer Tabellenspalte per Mausklick in die Kopfzeile der Tabelle in besonders bequemer Weise auf- oder absteigend sortiert werden. Die Sortierfunktion ist hilfreich für statistische Untersuchungen. Unmittelbar unterhalb vom Tabellenfenster wird der Benutzeroberfläche wiederum ein Panel implementiert, das zur Sichtung der Daten und manueller Korrektur dient. Die Konfiguration ist ein einfaches Textarea zur Anzeige der Satzinformation und ein „update“-Button zur Aktualisierung der Datenbank. Es gibt zwei Aktionsbuttons bzw. delete- und edit-Button, die unmittelbar oberhalb des Textareas liegen. Der Satz, der in der Tabelle ausgewählt wird, kann mit Hilfe des delete-Buttons gelöscht oder mit Hilfe des edit-Buttons im unteren Textfeld angezeigt werden, um ihn dort zu editieren. Die beiden Funktionen dienen hauptsächlich zu Korrekturzwecken. Die prosodische und positionelle Information des ausgewählten Satzes entspricht dabei dem Format des Transkriptionsfiles (siehe Anhang A). Der Benutzer hat auch die Möglichkeit, selbst SQL-Anfragen zu erstellen, zusätzlich zu den im Tool integrierten Anfragen (über die Menüs). Im ganz unteren Rand des Mainframes sieht man die hierzu integrierte Toolbar. Die Toolbar besteht aus zwei Teilen: einem Textbereich für die Eingabe der SQL-Anfragen und einem Aktionsbutton zur Durchführung der SQL-Anfragen. Im Textbereich kann man nicht nur eine einzelne SQL-Anweisung, sondern gleichzeitig mehrere SQL-Anweisungen nacheinander eingeben, in dem letzten Fall müssen alle Anweisungen durch den „;“-Terminator getrennt und der Reihe nach ausgeführt werden. Auf der rechten Seite des Textbereiches ist der Aktionsbutton, der durch „submit“ gekennzeichnet wird. Der submit-Button führt alle SQL-Anweisungen im Textbereich durch. Immer wenn eine Tabelle von der Datenbank zurückgeliefert wird, wird sie dann in unserem Tabellenfenster dargestellt. Die manuelle SQL-Anfrage kann alles mögliche sein. Da manche Anweisungen gar keine Ergebnisstabelle liefern, z.B. „SHOW CREATE TABLE tablename“, wird in diesem Fall die Anweisung nur einfach so ausgeführt. Die Ergebnistabelle, die im Tabellenfenster angezeigt wird, ist nicht editierbar.

5.2 Menü-Funktionen Im Folgenden sollen die einzelnen Menü-Komponenten im Detail beschrieben werden. Eine komplette Darstellung der Menüs findet sich im Anhang B. 46

5.2.1 Menü Datenbank Unser graphisches Tool bietet dem Benutzer einen schnellen und einfachen Zugang zu der Unit-Selection-Datenbank, die auf der GUI durch eine Reihe von Menüelementen visualisiert wird. Somit kann der Benutzer unterschiedliche Operationen auf eine vorhandene Datenbank ausüben. Das Datenbank-Menü beinhaltet Funktionen zum Löschen, Erstellen, Ergänzen und Laden einer Datenbank (s. Anhang B, B-1).



Loeschen der Datenbank

Das graphische Tool liefert die Operation, die zum Löschen der Datenbank (Menüpunkt „Löschen der Datenbank“) dient. Hierbei werden alle Tabellen aus der gewählten Datenbank entfernt.



Neu Anlegen der Datenbank

Der Menüpunkt „Neu Anlegen der Datenbank“ realisiert die Funktion, die ein oder mehrere Transkriptionsfiles aus einem Verzeichnis einliest und sie entsprechend in die Tabellen der Unit-Selection-Datenbank schreibt.



Ergänzen der Datenbank

Ähnlich wie beim Neu-Anlegen der Datenbank läuft auch das Ergänzen der Datenbank ab, wobei hier die Datenbank um die Sätze der gewählten Transkirptionsfiles erweitert wird.



Laden der Datenbank

Wenn mehrere Datenbanken zur Verfügung stehen, dann können durch die Ladefunktion (den Menüpunkt „Datenbank laden“) zwischen den verschiedenen Datenbanken umgeschaltet werden. Die gewählte Datenbank ist nun die aktuelle Datenbank für nachfolgende Anfragen.



Exit

Das Tool integiert auch die Funktion zum Ausloggen, wenn man die Verbindung mit der Datenbank beenden möchte. Der Fenster-Prozess der graphischen Benutzeroberfläche soll zugleich gelöscht werden. 47

5.2.2 Menü Korpus Das Korpus-Menü sammelt alle Operationen, die auf das Textkorpus angewendet werden sollen (s. Anhang B, B-2). Unter diesem Menü sollen die Benutzerspezifikationen (Einheitenauswahl, Bestimmung der Featurekombination) vorgenommen werden.



Anzeigen des Korpus

Wie in Kapitel 2 schon erwähnt, kann man Wort, Silbe, Phon oder Diphon als Einheit für Unit Selection wählen. Dabei beziehen wir noch die mit den Einheiten verbundenen Featuremerkmale mit ein, wie z.B. Prosodie oder Kontextinformationen. Welche wichtigen Featuremerkmale in Betracht kommen und dabei mit dargestellt werden, muss der Benutzer zunächst spezifizieren. Unser graphisches Tool liefert dem Benutzer die Kombinationsmöglichkeit unter der Featuremenge [POS] bei Wörtern, [stress, tone, accent, previous phone, next phone, phrase-position] bei Silben, [syllable stress, previous phone, next phone, syllable position] bei Phonen und [stress] bei Diphonen (s. Anhang B, B-4,5,6). Die Abbildung 5.2 zeigt als Beispiel die Featureauswahl auf Silbenebene für die Korpusanzeige.

Abb. 5.2: Featurewahl auf Silbenebene für Korpusanzeige.

Das ganze Textkorpus mit den gewählten Featurewerten wird anschließend im Tabellenfenster dargestellt. Den Beispielsatz „Exzellent ist die Dortmunder Museenlandschaft.“ auf Silbenebene stelle man sich so vor wie in Abbildung 5.3:

48

(?Eks#0#NONE#NONE#_#t#ini)

(tsE#0#NONE#NONE#s#l#med)

(lEnt#1#NONE#L*H#E#?I#med)

(?Is#1#NONE#NONE#t#d#med)

(di:#1#NONE#NONE#s#d#med)

(dO6t#1#NONE#NONE#i:#m#med)

(mUn#0#NONE#NONE#t#d#med)(d6#0#NONE#NONE#n#m#med) (mU#0#NONE#NONE#6#z#med) (En#0#NONE#NONE#e:#l#med)

(ze:#1#NONE#L*H#U#E#med) (lant#0#NONE#NONE#n#S#med)

(Saft#0#(H)-#NONE#t#m#fin)

Abb. 5.3: Annotation des Beispielsatzes „Exzellent ist die Dortmunder Museenlandschaft.“ auf der Silbenebene.



Erzeugen einer Statistik

Mittels des Tools lässt sich auch sehr einfach die Korpusstatistik erstellen. Dabei wird ebenfalls gefordert, dass der Benutzer zunächst die einzubeziehende Featurekombination vordefiniert (s. Anhang B, B-7,8,9). Die Abbildung 5.4 zeigt als Beispiel die Featureauswahl auf Silbenebene für Korpusstatistik. Die Featurekombination kann jederzeit modifiziert werden. Als Folge wird das Textkorpus bezüglich der modifizierten Featurekombination neu ausgewertet, die Frequenz für jede Einheit neu berechnet, und die neue Frequenzliste wird zugleich im Tabellenfenster dargestellt.

Abb. 5.4: Featurewahl auf Silbenebene für Korpusstatistik.

49

5.2.3 Menü Tabelle Das Tabelle-Menü wird für das Speichern der aktuellen Tabelle bzw. für die Erstellung des Korpus- und Featurelistfiles entwickelt (s. Anhang B, B-3). 

Tabelle speichern

Unser graphisches Tool ist noch mit der Speichernfunktion ausgerüstet, die durch das Speichern-Menü visualisiert ist. Mit diesem Menüpunkt wird die aktuelle Tabelle in eine Textdatei abgespeichert, die für weitere Programme genutzt werden kann. Das Input-Korpusfile des Greedy-Algorithmus lässt sich mit diesem Menüpunkt erstellen.



Featureliste erstellen

Man kann auch mittels des Menüpunktes “Featureliste erstellen” die Featureliste erstellen und sie dann in eine Datei abspeichern. Diese Featureliste wird später als Input des Greedy-Algorithmus benötigt.

50

6 Technische Realisierung Die vorliegende Arbeit wurde in Java/Swing programmiert. In diesem Kapitel wird sich auf die technische Realisierung der Implementierung der wichtigen Bestandteile der Arbeit konzentriert.

6.1 Erstellung der Datenbank Für die Datenbankbenutzung wurde eine Datenbank-Klasse entwickelt. Diese Klasse definiert alle Methoden, die sowohl zur Definition der Datenbankstruktur, also auch zum Einlesen der Daten aus einem Transkriptionsfile in die Datenbank, sowie zur Löschung, Veränderung, Abfragung von Daten dienen. Alle im Rahmen der vorliegenden Arbeit betreffenden Operationen unter dem Datenbank-Menü erfolgen über das Zusammenspiel des GUI-Programmes mit der Datenbank-Komponente. Zuvor sollte unser GUI-Programm die Verbindung an die vorhandene Unit-Selection-Datenbank voreinstellen23. Bei der Implementierung der Funktion zum Neuanlegen der Datenbank wurde zuerst die gewünschte Datenbankstruktur (Tabellenerstellung mit den zugehörigen Attributen) definiert, die durch die Methode datenbank.createDB() erfolgt. Anschließend wurde eine Schnittstelle bereitgestellt (gleiches gilt beim Ergänzen der Datenbank), die durch eine Schleifefunktion für mehrere Files der Reihe nach die Einlesefunktion readKorpus(transkriptionsfiles) der Datenbank-Klasse aufrief, die wiederum alle transkripierten Sätze mit Genre-Information als Argumente an die Methode addSentence() der Datenbank-Klasse übergibt. Die addSentence()-Methode dient dazu, die Wort-, Silben- und Phon-Daten in die entsprechenden Tabellen abzulegen. Um alle Tabellen einer Datenbank zu löschen, wurde auch eine Schleifefunktion ins Programm integriert, die alle Tabellen der Reihe nach über die SQL-Anfrage “drop table tablename” aus der Datenbank entfernt. Die Datenbank ist nun leer für eine neue Definierung. Zum Laden der Datenbank kann man eine einfache SQL-Anfrage “use databasename” verwenden. 23

Die Anbindung des GUI-Programms mit der Datenbank erfolgt mithilfe von JDBC (Java Database Connectivity). Dazu wird ein so genannter „Treiber“ zur Laufzeit aufgebaut und vor jedem Zugriff auf die Datenbank geladen werden müssen. 51

Wenn man die Verbindung mit der Standarddatenbank beenden möchte, muss noch die Methode connection.close() aufgerufen werden. Mittels des Java-Befehls System.exit(0) wird folglich die GUI gelöscht. Hier wurde bei allen Menüpunkten des Datenbank-Menüs noch ein JfileChooser-Objekt zur Navigation des Dateisystems ins Programm integriert, womit der Benutzer die gewünschte Datenbank als Standarddatenbank aus einem Datenbank-Verzeichnis heraussuchen kann.

6.2 Anzeigen des Textkorpus Die Implementierung der Anzeige des Textkorpus auf unterschiedlicher Einheitenebene erfolgt per SQL-Anfragen. Unter der Benutzung der SQL-Operation „Inner Join“ werden Datensätze aus jeweils zwei Tabellen verknüpft, sobald die Einheiten-IDs miteinander übereinstimmen. Die folgenden SQL-Statements vergleichen auf übereinstimmende Wort-(1), Silben-(2) und Phon(3)-Identifikationsnummer, holen die String-Werte aus der entsprechenden String-Tabelle (Tabelle WORDSTRING, SYLSTRING und PHONDEF) und verketten alle Stringsequenzen eines Satzes mit Hilfe der „group_concat“-Funktion, die vom Leerzeichen getrennt und in der richtigen Reihenfolge der Einheiten (z.B. nach WortPos, SylPos-Attributwerten der SENENCE-Tabelle oder noch Subposition-Attributwerten der SYL_PHON-Tabelle) sortiert werden:

mysql> select SentNo, group_concat(Name order by WordPos separator ' ') as sent from (select distinct WordID,SentNo, Name, WordPos from

(1)

SENTENCE,

(select

WORD.ID

as

wid,

Name

from

WORD,

WORDSTRING where Word = WORDSTRING.ID) as z1 where WordID = wid order by WordPos) as z2 group by SentNo;

mysql> select SentNo, group_concat(word_string order by WordPos separator

'

')

as

sent_string

from

(select

Sentno,

WordID,

group_concat(syl_string order by SylPos separator ' ') as word_string,

(2)

WordPos from (select SentNo, WordID, WordPos, syl_string, SylPos from SENTENCE, (select SYLLABLE.ID as sid, Name as syl_string from SYLLABLE, SYLSTRING where SYLLABLE.Syllable = SYLSTRING.ID) as z1 where SylID=z1.sid order by SentNo, WordPos, SylPos) as z2 group by SentNo, WordPos) as z3 group by SentNo;

52

mysql> select SentNo, group_concat(word_string order by WordPos separator ' ') as sent_string from (select SentNo,WordID, WordPos, group_concat(syl_string order by SylPos separator ' ') as word_string from (select SentNo, WordID, WordPos, SylID, group_concat(Name order by Subposition separator ' ') as syl_string, SylPos from (select SentNo, WordID,

(3)

WordPos, SylID, SylPos, Name, Subposition from SENTENCE, (select IDmain, Name, Subposition from SYL_PHON, (select PHON.ID as pid, Name from PHON, PHONDEF where PHON.Phon = PHONDEF.ID) as z1 where IDsub = pid) as z2 where SylID = IDmain order by SentNo, WordPos, SylPos, Subposition) as z3 group by SentNo, WordPos, SylPos) as z4 group by SentNo, WordPos) as z5 group by SentNo;

Unter Einbeziehung vorspezifizierter Featuremerkmale in Korpusdarstellung ist es etwas komplexer zu realisieren. Grundalgorithmus lässt sich dabei so vorstellen:

die Der

Im ersten Schritt werden von der Datenbank für jeden Satz alle Wort-IDs und dann alle Silben- oder Phon-IDs der Reihe nach in einer Arrayliste angelegt. Die Einheiten-IDs werden nun durch eine Schleifefunktion iterativ an die Methode getSyl() der Datenbank-Klasse übergegeben, somit erhält man als Ergebnis das mit der ID identifizierte Word-, Syllable oder Phone-Objekt. Bei solchen Objekten geht es um die Einheiten-Klassen, die vordefiniert sind und alle Daten über Featuremerkmale speichern. Aus diesen Einheiten-Objekten werden anschließend die Werte der zuvor vom Benutzer auswählten Featuremerkmale ausgelesen und in ein bestimmtes Format gespeichert (bei Wort [Wortstring#POS], bei Silbe [Silbestring#stress#tone#accent#previous-phone#next-phone#phrasepos], und bei Phon [Phonstring#stress#previous-phone#next-phone#sylposition]). Die Features, die nicht beachtet werden sollen, werden einfach durch * ersetzt. Die so entstehenden „Feature-Einheiten“ werden schließlich zusammengesetzt und einer vorher neu erstellten Tabelle hinzugefügt. Die resultierende Tabelle wird dann im Tabellenfenster angezeigt (vgl. Anhang C). Zur Erstellung des Diphonkorpus kann die PHON-Tabelle der Datenbank in Gebrauch genommen werden, da ein Diphon aus zwei nacheinanderfolgenden Phonen besteht. Hierzu ist es nahe liegend, dass für jeden Satz zunächst eine Phonliste erstellt wird (Das „_“-Zeichen, das die Stille bezeichnet, wird an Anfang und Ende der Liste hinzugefügt). Ausgehend von dieser Phonliste werden immer zwei benachbarte Phone mithilfe des „concat“-Befehls verknüpft. Die so entstandenen Diphonsequenzen werden 53

dann mittels des „group_concat“-Befehls in der richtigen Reihenfolge verkettet. Die hier eine große Rolle spielende SQL-Anfrage lautet:

mysql> insert into DIPHONSATZMENGE select sentno, group_concat(diphone order by id separator ' ') from (select t1.id as id, t1.sno as sentno, concat(t1.plist, '-', t2.plist) as diphone from PHONLISTE as t1, P as t2 where t1.id + 1 = t2.id) as z1 group by sentno;

6.3 Löschen eines Satzes Wie in Abschnitt 5.2.2 erwähnt, kann man den markierten Satz, der sich negativ auf die Synthesequalität auswirken könnte, aus der Datenbank entfernen, indem man den delete-Button anklickt. Diese Aktion geschieht durch den Aufruf von der delSentence(sentenceID)-Methode der Datenbank-Klasse. Diese Methode durchsucht die ganze Datenbank, findet alle Einträge (Satz, Wörter, Silben, Phone) in den Untertabellen, die im Satz vorkommen und sich über übereinstimmende Identifikationsnummern aufeinander beziehen, und löscht sie. Die Frequenz der betreffenden Einheiten wird um eins verkleinert.

6.4 Editieren eines Satzes Klickt man auf den editieren-Button, wird dann die Methode Datenbank.sentence_formattransfer(sentenceID) aufgerufen, die den Satz genau so aus der Datenbank (vgl. Anhang A) generiert, dass er dem Format aus den Transkriptionsfiles entspricht24, wobei der „Feature“-Text als String in ein Textfile weitergeleitet und zwischengespeichert wird, der dann wiederum vom Programm aus dem Textfile ausgelesen und ins Textarea unterhalb der Aktionsbuttons (delete- und edit-Button) geschrieben wird. Klickt man nach dem Korrigieren auf den update-Button auf der rechten Seite des Textareas, wird der Text als String in eine ArrayList eingelesen, die dann als Argument an die addSentence-Methode der Datenbank-Klasse übergegeben wird. Als Folge wird der alte Satz über die delSentence-Methode zuerst aus der Datenbank gelöscht und der korrigierte dann neu zugefügt. 24

Dazu wird der Satz als ArrayList zerlegt, ein Eintrag pro Wort und zwar bestehend aus dem Wort (orthographisch), der Silbe mit tone- und accent-Information und dem komplexen Phonstring , so wie es in den Transkriptionsfiles erscheint. 54

6.5 Erzeugen der Korpusstatistik Mit den untenstehenden SQL-Anfragen

mysql>

(1)

select

SUM(Frequency),

FeatureNames

from

WORD,

WORDSTRING where WORD.Word = WORDSTRING.ID group by FeatureNames;

mysql> select SUM(Frequency), FeatureNames from SYLLABLE,

(2)

SYLSTRING where SYLLABLE.Syllable = SYLSTRING.ID group by FeatureNames;

mysql> select SUM(Frequency), FeatureNames from PHON, PHONDEF

(3)

where PHON.Phon = PHONDEF.ID group by FeatureNames;

mysql> select COUNT(Diphon), Diphon from DIPHONLISTE group by

(4)

Diphon;

wird die Korpusstatistik der betreffenden Einheit ((1) Wort-Frequenzliste, (2) Silben-Frequenzliste, (3) Phon-Frequenzliste und (4) Diphon-Frequenzliste) erstellt, wobei die “Featurenames” in den SQL-Anfragen für die vom Benutzer vordefinierte Featurekombination steht. Die SUM-Funktion dient hier dazu, die Einheiten, welche die selben Featurewerte aufweisen, zusammenzuzählen. Die Statistik von Diphonen basiert auf der im letzten Abschnitt (6.2) beschriebenen Implementierung, um alle im Korpus vorkommenden Diphonsequenzen (unter Betrachtung von Wiederholung) zu erhalten, deren Frequenzzahlen werden dann mittels der COUNT-Funktion ausgerechnet. Somit kommt die Frequenzzahl jeder Einheit zustande. Nun werden die SQL-Anfragen ausgeführt und die Featurewerte werden dann zusammengesetzt in dem oben beschriebenen Format. Als Beispiele zeigen sich auf der Frequenzliste die zehn am häufigsten im Ausgangskorpus auftretenden Silben mit der jeweiligen Frequenz (s. Tabelle 6.1 und 6.2):

55

Frequenz

Silbe(ohne Features)

61905 37295 34227 33098 25123 23977 23434 18360 17440 16105

(t@#*#*#*#*#*#*) (di:#*#*#*#*#*#*) (de:6#*#*#*#*#*#*) (t@n#*#*#*#*#*#*) (?Unt#*#*#*#*#*#*) (g@#*#*#*#*#*#*) (tsu: #*#*#*#*#*#*) (?In#*#*#*#*#*#*) (fE6#*#*#*#*#*#*) (b6#*#*#*#*#*#*)

Tabelle 6.1: Frequenzliste, welche die zehn häufigsten Silben (ohne zusätzliche Features) anzeigt.

Frequenz 7412 7082 5460 5126 3643 3580 3462 2765 2692 2679

Silbe(+stress+tone+ accent+previous+next+phrasepos) (?aI#1#NONE#NONE#_#n#med) (?In#1#NONE#NONE#_#d#med) (?In#1#NONE#NONE#_#d#ini) (?aI#1#NONE#NONE#_#n#ini) (t@#0#NONE#NONE#I#f#med) (?aUf#1#NONE#NONE#_#d#med) (ge:#1#NONE#NONE#_#g#med) (ml#1#NONE#L*H#_#t#med) (mi:#0#NONE#NONE#_#n#med) (fEn#0#NONE#NONE#e:#z#med)

Tabelle 6.2: Frequenzliste, welche die zehn häufigsten Silben (mit den genannten Features) anzeigt.

56

7 Statistische Untersuchungen Der Zweck der Korpusauswahl ist, ein Subkorpus aus einer großen Datenbank zu extrahieren, welches so viele phonetische und kontextabhängige Einheiten wie möglich abdeckt. Deshalb müssen wir vor allem bestimmen, was die beste Abdeckung im Sinne von guter Balance zwischen Korpusgröße und Abdeckung sein kann. Um dies zu erreichen, müssen wir die Informationen der Frequenzverteilung verwenden. Dafür werden im ersten Teil dieses Kapitels statistische Charakteristiken des ursprünglichen Textkorpus bzw. die Frequenzverteilung verschiedener phonetischen Einheiten hinsichtlich der Einheitenlänge (Abschnitt 7.1.1) und dann ihre Abdeckung (Abschnitt 7.1.2) untersucht. In Abschnitt 7.1.3 werden zusätzliche Featurevektoren in die Auswahl mit einbezogen und ihre Einflüsse auf die Einheiten (hierfür nahmen wir Silben als Einheit) hinsichtlich der Frequenzverteilung und Abdeckung analysiert. Im zweiten Teil des Kapitels wird die Korpusauswahl mit Hilfe des Greedy-Algorithmus durchgeführt. Die Festlegung der Zielabdeckung und der Kriterien des Algorithmus wird erläutert und die Ergebnisse der Korpusselektion nach unterschiedlichen Kriterien werden analysiert und miteinander verglichen. Wir untersuchen, welches die beste Abdeckung im Sinne von guter Balance zwischen Korpusgröße und Abdeckung sein kann.

7.1 Statistische Charakteristiken des Ausgangskorpus 7.1.1 Frequenzverteilung der Einheiten Zur statistischen Untersuchung des Textselektionsprozesses benutzten wir 19047 Sätze aus dem SOCCER-Korpus 25 als Ausgangskorpus, die automatisch von Festival transkribiert wurden. Hier muss berücksichtigt werden, dass es sich um ein Fußballkorpus handelt. Somit bezieht es sich hier auf beschränkte Anwendungsdomänen. Die 19047 Sätze wurden zunächst mithilfe unseres graphischen Tools in die Datenbank eingelesen. Die Verteilungseigenschaften des Korpus werden festgestellt, indem man die Vorkommensfrequenz der unterschiedlichen Einheiten zählt. Tabelle 7.1 fasst die Frequenzzahlen bzw. Typ/Token-Zahlen 25

Zur Verfügung gestellt vom DFKI, das Korpus umfasst 6200 Dokumente. Quelle: www.kicker.de. 57

aller von uns beobachteten Einheiten des Ausgangskorpus zusammen. Wir beobachten diese Zahlen zuerst ohne Berücksichtigung der Feature-Informationen:

Einheit

Typen

Wörter

23.217

921.456

Silben

4.823

1.856.341

Diphone

1.798

4.964.651

62

4.926.558

Phone Tabelle

7.1:

Tokens

Typ/Token-Zahl

des

Ausgangskorpus

(ohne

Berücksichtigung

der

Featureinformation)

Das Textkorpus mit 19047 Sätzen enthält 921,456 Wörter, 1,856,341 Silben, 4,964,651 Diphone und 4,926,558 Phone: die Tokenzahlen sind riesengroß. Was in Tabelle 7.1 auch sehr offensichtlich ist, ist dass je kleiner die Einheit ist, desto größer ist die Anzahl der Einheittokens. Wenn wir uns ein resultierendes Sprachkorpus von einer kleineren Größe (wie z.B. mit 1,000 Sätzen) wünschen, ist dann eine vollständige Abdeckung der in dem ursprünglichen Korpus enthaltenen Einheiten gar nicht möglich. Dazu müßte jeder Satz mindestens 921 Wörter / 1,856 Silben / 4965 Diphone / 4,926 Phone enthalten! Dabei kriegt man andererseits wieder Probleme mit dem Aussprechen, dass kürzere Sätze bevorzugt werden, um eine natürliche Intonation zu bekommen. Deshalb ist es nötig, ein erreichbares Ziel für die Abdeckung festzustellen. Die Frequenzverteilung aller hier betrachteten Einheiten wurde analysiert. Abbildung 7.1 gibt z.B. die Frequenzverteilung der Silben im Textkorpus wieder, wobei die x-Achse zur besseren Lesbarkeit logarithmisiert wird. Hier sieht man, dass die seltenste Einheit mit einer Frequenz von 1 vorkommt und ungefähr 16% der Silbetypen eine Frequenz von 1 hatten, während aber die hochfrequenteren Typen (mit einer Frequenz von mehr als 10) im Korpus sehr selten vorkommen. Dieses logarithmische Verhalten hat die LNRE-Charakteristiken natürlicher Sprache, die in Kapitel 2 angesprochen wurden, bewiesen: Die überwiegende Mehrheit der Einheitentypen hat extrem geringe Auftretenshäufigkeit, während nur sehr wenige Typen im Gegenteil viele Tokens im ganzen Textkorpus haben, und der Unterschied der Frequenzverteilungen zwischen den beiden Gruppen ist sehr groß.

58

Abb. 7.1: Frequenzverteilung der Silben

Die schnell abflachende Wachstumsrate der Frequenzverteilung kommt bei anderen Segmenten auch vor. Wie man in Abbildung 7.2 an den Kurven erkennen kann, treten über 35% der Wörter mit einer Frequenz von 1 im Korpus auf, wohingegen es bei den Diphonen nur ca. 5% sind. Bei den Phonen sind die Frequenzen gleichmäßig verteilt. Die Phone mit einer Frequenz von weniger als 5 gibt es im Korpus überhaupt nicht. Also je länger die Einheit ist, desto logarithmischer ist die Kurve. Es scheint so, dass die Länge der Einheiten hier wiederum eine entscheidene Rolle spielt. Mit verlängerten Einheiten steigen nicht nur die Kombinationsmöglichkeiten, auch die Anzahl der niederfrequenten Einheiten vergrößert sich.

59

Abb. 7.2: Vergleich der Frequenzverteilung zwischen Wörtern, Silben, Diphonen und Phonen.

7.1.2 Abdeckung der Einheiten Im vorigen Abschnitt wurden statistische Untersuchungen bei allen Einheiten ohne zusätzliche Featurevektoren durchgeführt, die LNRE-Eigenschaften bzw. viele Vorkommen von seltenen Ereignissen aufwiesen. Diese Art von Frequenzverteilung wurde auch von (Francois & Boeffard 2001) beobachtet. Sie sahen trotzdem gleichzeitig davon den Vorteil, dass schon relativ wenige Sätze einen Großteil der frequenteren Einheiten im ursprünglichen Textkorpus abdecken können. Die Abdeckung wird in diesem Abschnitt behandelt. Abbildung 7.3 veranschaulicht diese Verteilung (normalisiert auf den relativen Anteil der Vorkommen anhand der Anzahl der Einheitentypen): Mit knapp 100 der häufigsten Silben wird schon die Hälfte, mit ca. 500 bereits 85% und mit ca. 1500 Silben schon 95% der gewünschten Einheiten abgedeckt. Bei den Diphonen ist dieses logarithmische Verhalten extremer. Mit knapp 650 der häufigsten Diphone sind schon 95% des Korpus abgedeckt. Bei den Phonen kann sogar eine komplette Abdeckung erreicht werden mit nur ca. 90 (die Zahl der Phontypen des phonetischen Lautinventares ist 93). Bei den Wörtern braucht man eine größere Einheitenabdeckung, um einen möglichst großen Prozentsatz zu erreichen.

60

Abb. 7.3: Abdeckung der Wörter, Silben, Phone und Diphone.

7.1.3 Einfluss von Featurevektoren auf die Korpusstatistik Es wurde im vorigen Abschnitt beobachtet, dass nicht nur die Typenzahl sich erhöhte, sondern auch die Frequenzverteilung drastisch geändert wurde, wenn die Einheit länger wird. Eine ähnliche Situation wird erwartet, wenn wir nun zusätzliche Featuremerkmale mit einbeziehen. In diesem Abschnitt werden Silben behandelt. Hierzu werden Silben in Bezug auf unterschiedliche Featurekombinationen subkategorisiert. Wir untersuchen folgende Featurekombinationen: Silbe+stress, Silbe+stress+tone+accent und Silbe+stress+Kontext (phonemische Umgebung) und Silbe+alle Features. Zum Vergleich werden Silben ohne zusätzliche Features hier noch mal betrachtet. Wir werden sehen, wie die Typ/Token-Verteilung verschiedener Einheitengruppen aussehen und wie ihre Frequenzverteilung sowie ihre Abdeckungen sich ändern werden. Der Interaktionseffekt zwischen den verschiedenen Featuremerkmalen bleibt hier außer Betracht. Tabelle 7.2 gibt die Typ/Token-Verteilung der Silben mit den oben genannten Featurekombinationen wieder. Wenn wir nur „stress“ in die Frequenzzählung mit einbeziehen, ist die Typenzahl im Vergleich zu den Silben ohne zusätzliche Features um 37% gestiegen. Wenn wir die drei prosodischen 61

Featuremerkmale (stress+tone+accent) berücksichtigen, wird die Typenzahl von 4823 um 243% auf 16519 erhöht. Und wenn wir neben „stress“ den phonemischen Kontext statt der tone-accent-Kombination in Betracht ziehen, dann ergeben sich 80,440 verschiedene Silben. Kommen alle hier in der Arbeit betrachteten Features mit ein, tritt sogar ein riesiger Sprung auf: 2840-prozentiges Wachstum!

Einheit

Typen

Tokens

Nur Silbe

4.823

1.856.341

Silbe+stress

6.624

1.856.341

16.519

1.856.341

80.440

1.856.341

136.991

1.856.341

Silbe+stress+ Tone+accent Silbe+stress+ Kontext(previous,next) Silbe+alle Features

Tabelle 7.2: Typ/Token-Zahl der Silben des Ausgangskorpus in Bezug auf verschiedene Featurekombinationen.

Wir zeichnen die Frequenzverteilung der Silben unter dem Einfluss der hier erwähnten Featurekombinationen noch auf die Koordinatenachsen. Es ist ersichtlich, dass Abbildung 7.3 ebenfalls eine Art von Logarithmus darstellt. Ca. 42% der Silben kommen in Kombination mit allen zusätzlichen Features im Korpus nur einmal vor, während bei „Silbe+stress+Kontext“ ca. 35%, bei „Silbe+stress+tone+accent“ ca. 22%, und bei „Silbe+stress“ nur 17% eine Frequenz von 1 haben. Das heißt, je mehr prosodische und positionelle Featuremerkmale in Betracht kommen, desto mehr Einheiten haben eine extrem geringe Auftretenshäufigkeit; Die Tendenz der LNRE-Charakteristiken wird extremer gegenüber der Nicht-Berücksichtigung von Featurevektoren. Noch ein Punkt kann an der Abbildung erkannt werden. Die LNRE-Charakteristiken sind mehr von der unmittelbaren Phonemumgebung abhängig, da es viel mehr unterschiedliche Phänomene im Kontext gibt (ca. 93 Phone * 93 Phone)26 als es prosodische Merkmale gibt (3 Accents * 4 Tones).

26

Es kann einem Phon ca. 93 verschiedene Phone (plus Stille-Zeichen) vorangehen und ca. 93 verschiedene Phone nachfolgen. Durch phonotaktische Restriktionen lässt sich diese Zahl aber verkleinern. 62

Abb. 7.3: Frequenzverteilung der Silben in Bezug auf unterschiedliche Featurekombinationen.

Die Abdeckung aller Variationen in Bezug auf verschiedene Features wird in Abbildung 7.4 aufgezeichnet. Mit einer Typenzahl von 1000 kann bei Silben und „Silbe+stress“ schon jeweils 95% und 90% der Einheiten des ganzen Korpus abgedeckt werden, während bei „Silbe+stress+tone+accent“ fast 80%, wohingegen es bei „Silbe+stress+context“ nur ca. 42% und bei „Silbe+alle Features“ nicht einmal 40% sind. Man braucht in den beiden letzten Fällen über 100,000 verschiedene Silben, um einen sehr hohen Abdeckungsgrad (fast komplette Abdeckung) zu erreichen.

63

Abb.

7.4:

Vergleich

der

Abdeckung

der

Silben

in

Bezug

auf

unterschiedliche

Featurekombinationen.

7.2 Evaluierung der Korpusauswahl Der Greedy-Algorithmus, der in Abschnitt 2.3.1 ausführlich beschrieben worden ist, wird auf das große Ausgangskorpus mit 19047 Sätzen angewendet. Zur statistischen Untersuchung der Ergebnisse der Korpusauswahl führe ich fünf Experimente durch, wobei Silben ohne Featurevektoren, „Silbe+stress“, „Silbe+stress+tone+accent“, „Silbe+stress+context(previous+next)“ und dann „Silbe+alle Features“ jeweils als Einheit betrachtet werden. Dazu wird in allen Fällen das minimale target count auf 3 gesetzt. Das heißt, dass jeder Silbentyp im neuen Korpus dreimal vorkommen muss. Nun enthält die Featureliste (der abzudeckenden Einheiten) 14,469 (4,823*3) für Silbe ohne Featurevektoren, 19,872 (6,624*3) für „Silbe+stress“, 25.718 (80.440*3) für „Silbe+stress+tone+accent“, 241,320 (80,440*3) für „Silbe+stress+context(previous+next)“ und 410,973 (136,991*3) für „Silbe+alle Features“. Bei der Durchführung des Greedy-Algorithmus benutzen wir die maximale Anzahl der Einheitentokens und frequenzorientierte Gewichtung der Einheiten zur Bewertung einer Äußerung.

64

Mit all den hier genannten Suchstrategien 27 wird möglichst nach allen abzudeckenden Einheiten gesucht. Die Einheiten, besonders diejenigen, die weniger als 3 Mal im Korpus vorkommen, und die somit nicht 3 Mal im neuen Korpus abgedeckt werden können, werden in ein Logfile ausgegeben („partial covering“, vgl. Abschnitt 2.3.4). Die Unterschiede der Ergebnisse zwischen

Silbe

Silbe (stress)

Silbe (stress+ tone+accent)

Silbe (stress+ context)

Silbe (alle Features)

Sätze (Ausgangskorpus)

19.047

19.047

19.047

19.047

19.047

Sätze (neues Korpus)

2.952

3.743

5.544

13.946

14.672

abzudeckende Einheiten

14.469

19.872

49.557

241,320

410.973

abgedeckte Einheiten

12.534

16.991

35.718

173.159

227.732

enthaltene Einheiten

429.948

545.646

951.472

1.746.251

1.144.535

86,6%

85,5%

72,1%

71,7%

55,4%

(97/145)

(97/145)

(97/171)

(97/125)

(97/172)

Abdeckung in Prozent Einheiten/Satz (vor/nach)

Tabelle 7.3: Vergleich zwischen den unterschiedlichen Kriterien für die Korpusauswahl.

den verschieden Suchstrategien werden in Tabelle 7.3 zusammengesetzt. Im Fall von Silben ohne zusätzliche Featurevektoren besteht der Output aus 2,952 Sätzen mit insgesamt 429,948 Silbentokens. Dabei bleiben nur 23,1%28 aller Tokens des ursprünglichen Korpus erhalten, doch 86,6% der geforderten Einheiten29 wurden abgedeckt. Im Fall von „Silbe+stress“ werden etwas mehr Sätze (3,743) benötigt, um einen hohen Abdeckungsgrad zu erreichen. Mit ca. 29,3% der Korpustokens werden 85,5% des initialen Textkorpus abgedeckt. Wenn wir die drei Features bzw. stress, tone und accent berücksichtigen, erhalten wir ein kondensiertes Korpus, welches mit der 72,1% der Abdeckung 51,2% des Ausgangskorpus repräsentiert. Bei „Silbe+stress+context(previous+next)“ werden 71,7% des Ausgangskorpus sehr ungünstig mit ca. 94,1% der Korpustokens abgedeckt. Beziehen wir alle Featurevektoren mit ein, dann enthält das resultierende Subkorpus 14,672 27 Was für eine Zielabdeckung und Suchkriterien für die Korpusauswahl gewählt werden sollen, ist abhängig davon, was für einen Zweck und welche Anforderungen für die Unit Selection wir haben. 28 enthaltene Einheiten des neuen Korpus / Tokenzahl des ursprünglichen Korpus. 29 abgedeckte Einheiten / abzudeckende Einheiten.

65

Sätze mit gesamt 2,144,535 Korpustokens. Das neue Korpus muss etwa zwei Drittel so groß wie das initiale Textkorpus sein, der Abdeckungsgrad war aber nur 55,4%. Aus den ausgestellten Daten der Tabelle 7.3 erkennt man, je mehr Features mit einbezogen werden und je mehr Variationen ein Featuremerkmal mit sich bringt, desto größer ist das resultierende Korpus, der Abdeckungsgrad ist jedoch immer kleiner. Tabelle 7.3 zeigt auch, dass die durchschnittliche Anzahl der Silbentokens pro Satz nach der Kondensierung des Korpus gestiegen ist. Dies lag an unserer Satzbewertungsfunktion, die längere Sätze bevorzugt, da längere Sätze in jeder Runde die maximale Tokenzahl besitzen. Nach der Kondensierung sollte es linearer als vorher sein, d.h. die Tokenzahl jeder Einheit war ausgeglichener (François & Boeffard 2001).

66

8 Zusammenfassung und Ausblick Im Rahmen dieser Arbeit wurde die Korpusauswahl für die Unit Selection entwickelt, deren Zugriff auf die Daten aus der Datenbank, die Anzeige und Korrektur der Daten durch ein graphisches Tool realisiert und visualisiert. Das graphische Tool erlaubt auch dem Benutzer, Einheitenart und -anzahl selbst zu spezifizieren, und sie ins Programm zu integrieren. Dieses Kapitel bietet einen kurzen Überblick über die verschiedenen Teilbereiche der Diplomarbeit und fasst sie abschließend zusammen. Vor der Beschreibung der Zielsetzung der Vorstellung des Projektes wurde das allgemeine Wissen des datenbasierten Sprachsynthesesystems, insbesondere die Unit Selection vorgestellt (Kapitel 1). Die Unit Selection arbeitet auf Basis eines sorgfältig erstellten Sprachkorpus. Die für die Synthese notwendige Auswahl eines optimalen Bausteins aus dem Korpus erfolgt nach phonetischen und prosodischen Gesichtspunkten, dessen Auswahlstrategie für die Qualität der Synthese entscheidend ist. Das Hauptanliegen sorgfältiger Erstellung des Sprachkorpus ist es, eine optimale Abdeckung der möglichen sprachlichen Phänomene einer Sprache gewährleisten zu können. Aber wie schon bewiesen, ist eine komplette Abdeckung nicht möglich. Kapitel 2 führte die wichtigsten Phänomene auf: Korpusgröße, LNRE-Verteilung der Sprache und Koartikulation. In solcher Hinsicht erforderte die Unit Selection ein Sprachkorpus von absurder Größe, um eine vernünftige Abdeckung zu erzielen. Und eine noch schlechtere Abdeckung bekam man bei Sprachkorpora aus gemischten Textsorten und -genres. Deswegen musste die Zielabdeckung auf Basis eines Kompromisses zwischen optimaler Abdeckung und Korpusgröße festgestellt werden. In dieser Arbeit standen mehrere Einheitenarten verschiedener Länge zur Verfügung, und zwar Sätze, Wörter, Silben, Diphone und Phone. Dabei wurde noch eine Menge von phonetischen und prosodischen Merkmalen in die Korpusauswahl mit einbezogen, die vom Benutzer zu spezifizieren sind. Bislang sahen wir nur die Frequenzverteilung in Bezug auf einen oder mehrere Kontexte auf einmal. In der zukünftigen Arbeit wird nach einer Untersuchung längerer Einheiten verlangt, um eine bessere Synthesequalität zu erzielen. Jedoch führen immer längere Einheiten zu exponentiellen Zuwachs der Anzahl der abzudeckenden Einheiten und folglich zu einem schwer realisierbaren Sprachkorpus. In dieser Hinsicht ist eine intelligente Darstellung der Einheiten sehr erforderlich. Einer der möglichen Ansätze, um 67

dieses Problem zu lösen, ist es, den Interaktionseffekt zwischen Merkmalsvektoren zu betrachten, wie in (Van Santen 1997) beschrieben. Die Auswahlkriterien dieses Projektes waren frequenzorientiert, d.h., die häufigsten und wichtigsten Phänomene sollten möglichst im Korpus abgedeckt werden. Jedoch kann das Weglassen von seltenen Einheiten zur Verminderung der Synthesequalität führen. Deshalb müssen noch die Auswahlkriterien erweitert und verfeinert werden (z.B. Frequenzgewichtung), so dass es möglichst die originale statistische Verteilung der Einheiten widerspiegelt. Weiterhin wurde in Kapitel 3 auf den Ablauf der Korpusauswahl eingegangen. Dabei wurden einzelne Module ausführlich beschrieben. Die modulare Architektur erlaubt ein iteratives Vorgehen beim Erstellen und Erweitern des Korpus, und Verbesserungen der Einzelkomponenten können sofort mit relativ wenig Aufwand ausgenutzt werden. Die automatisierte Generierung der einzelnen Module wurde dann in den nachfolgenden Kapiteln durch die Erstellung eines graphischen Tools umgesetzt. Hierzu wurde zuerst die SQL-Datenbank, die das hier verwendete Korpus verwaltete, vorgestellt (Kapitel 4). Die SQL-Datenbank enthielt mehrere Tabellen, die die Unit-Selection-Einheiten mit den zugehörenden Features und statistischen Daten speicherten. Es wurde erläutert, wie man sich mit dem graphischen Tool bediente (Beschreibung der GUI in Kapitel 5, technische Realisierung in Kapitel 6). Mit Hilfe der erstellten GUI war der Zugriff, die Darstellung, die manuelle Korrektur der Daten und das Anfragen an die Datenbank sehr einfach. Die GUI unterstützte auch die Interaktion zwischen Benutzer und dem Programm. Für die Qualitätssicherung sollte großen Wert auf die Qualität des Ausgangskorpus gelegt werden. Die korrekte phonetische Transkription wurde hierbei als zentrale Voraussetzung erkannt. Jedoch bedeutet manuelle Korrektur einen enormen Arbeitsaufwand und ist daher schwer realisierbar, da Zeit und Budget meist knapp bemessen sind. Denkbar ist, ob ein automatisches Tool für morphologische Analyse entwickelt und ins System integriert werden soll, um das Textkorpus zu säubern. Abschließend wurden in Kapitel 7 statistische Untersuchungen auf den hier verwendeten SOCCER-Korpus durchgeführt. Die statistischen Eigenschaften des Ausgangskorpus, insbesondere die Frequenzverteilung und Abdeckung der hier betrachteten Einheiten hinsichtlich der phonetischen und prosodischen Featuremerkmale wurden in diesem Kapitel untersucht und schematisch gezeigt. Der Korpusauswahlprozess mittels des Greedy-Algorithmus und das Vergleichen der Ergebnisse nach verschiedenen Auswahlkriterien wurden in dem subsequenten Teil des Kapitels evaluiert. Es wurde gezeigt, dass es nicht möglich war, sämtliche Einheiten im Korpus 68

komplett abzudecken. Andere Einheiten hatten noch schlechtere Ergebnisse als die Diphone. Für die Zukunft könnte man sich vielleicht eine solche Modifikation der Auswahlkriterien vorstellen, um möglichst eine komplette Abdeckung zu erreichen: wie in (Saikachi 2003) gemacht, könnten zuerst alle Diphone ohne zusätzliche Features (ein Token für ein Diphon) abgedeckt werden, und dann den normalen Prozess vornehmen. Außerdem ist es in der Zukunkt möglich, die Fähigkeit des regelbasierten Ansatzes zur Generalisierung von sichtbaren Fällen in unsichtbare Fälle zu steigern, um die LNRE-Phänomene zu bewältigen.

69

Literatur Balestri, M., Pacchiotti, A., Quazza, S., Salza, P. L. & Sandri, S. (1999): Choose the best to modify the least: a new generation concatenative synthesis system, in ‚Sixth European Conference on Speech Communication and Technology (EUROSPEECH’99)’, Budapest, Hungary. Black, A. W. & Campbell, N. (1995): Optimising selection of units from speech databases for concatenative synthesis, in ‚Eurospeech 95’, Vol. 1, Madrid, Spain, pp. 581-584. Black, A. W. & Lenzo, K. A. (2001): Optimal data selection for unit selection synthesis, in ‚ISCA, 4th Speech Synthesis Workshop’, Scotland, pp. 63-67. Boëffard, O. (2001): Variable-length acoustic units inference for text-to-speech synthesis, in ‚Eurospeech 2001’, pp. 983-986. corpus design, set covering problem, zu mathematisch, uneinheitliche einheiten mit variabler laenge, optimale abdeckung des korpus. Boëffard O, Emerard F, (1997): Application-dependent prosodic models for Text-to-Speech synthesis and automatic design of learning database corpus using Genetic Algorithm, in: Eurospeech1997, Vol. 5, pp. 2507-2510. Bozkurt, B., Ozturk, O. & Dutoit, T. (2003): Text design for tts speech corpus building using a modified greedy selection, in ‚Eurospeech 2003’, Geneva. Bernd Möbius (1999): The Bell Labs German text-to-speech system. In: Computer Speech and Language, 13, pp. 319-358. Bernd Möbius (2000): Corpus-based speech synthesis: methods and challenges, Arbeitspapiere des Instituts für Maschinelle Sprachverarbeitung (Univ. Stuttgart), AIMS 6 (4), pp. 87-116. Bernd Möbius, (2001): German and Multilingual Speech Synthesis. AIMS 7 (4) Bernd Möbius (2003): Rare events and closed domains: Two delicate concepts in speech synthesis. In: International Journal of Speech Technology, vol. 6, no. 1, pp. 57-71. Campbell, N. & Black, A. W. (1996): Progress in Speech Synthesis, Springer Verlag, chapter Prosody and the Selection of Source Units for Concatenative 70

Synthesis, pp. 279-292. C. Fery (1989): Phythmische und tonale Struktur der deutschen Intonationsphrase. H. Altmann (Hrsg.): Intonationsforschungen. Tübingen (Niemeyer). 1988, pp. 41-64. Euromasters summer school: Tutorial - Festival Speech Synthesis (incl. „building voices“) [http://www.cstr.ed.ac.uk/projects/festival/manual]. Fant, C. Gunnar M. (1960): Acoustic Theory of Speech Production. The Hague, Mouton. Fellbaum (1996): Script zur Vorlesung „Ausgewählte Gebiete Sprachverarbeitung“. LS Kommunikationstechnik, BTU Cottbus.

der

François, H. & Boeffard, O. (2001): Design of an Optimal Continuous Speech Database for Text-to-Speech Synthesis Considered as a Set Covering Problem, in Proc. Eurospeech, Vol. 2, Aalborg, Denmark, pp. 829-832. François, H. & Boeffard, O. (2002): The greedy algorithm and its application to the construction of a continuous speech database, in ‚LREC’, Las Palmas de Gran Canaria, Spain. Vergleich greedy algorithm, spittin algorithm und pair exchange. Freese, M. (2001): Textmaterial und sprachaufnahmen für eine deutsche unit-selection sprachsynthese, Studienarbeit, Master’s thesis, Institut für maschinelle Sprachverarbeitung, Universität Stuttgart. Hunt, Andrew J. und Alan W. Black (1996): Unit selection in a concatenative speech synthesis system using a large speech database. In: Proceedings of the International Conference on Acoustics, Speech, and Signal Processing (ICASSP), Atlanta, GA, USA, 1996. Jessen, M., Marasek, K., Schneider, K. und Clahßen, K. (1995): Acoustic correlates of word stress and the tense/lax opposition in the vowel system of German. In: ICPhS 95 Stockholm, Session 82.9, vol.4, pp. 428-431. Kerstin Sehnert, Fred Englert, (2001): Prädiktion von Intonationsverläufen durch „Unit Selection“. GLDV-Jahrestagung 2001, pp. 59-67. Kristina Spranger (2001): Zeitliche Alignierung der F0-Kontur als Funktion der Silbenstruktur im Deutschen, Studienarbeit, IMS Stuttgart (Mike). Levelt, W.J.M. & Wheeldon, L. (1994): Do speakers have a mental syllabary? 71

In: Cognition 50, pp. 239-269. Möhler, G. (1998): Theoriebasierte Modellierung der deutschen Intonation für die Sprachsynthese. Dissertation Universität Stuttgart. Möhler, G. (1999): The German http://www.ims.uni-stuttgart.de/phonetik/synthesis/.

Festival

system.

Magnus Petursson, Joachim Neppert, (1991): Elementarbuch der Phonetik, Buske: Hamburg, Kap. 7, pp. 125-149. Mayer, Jörg (1997): Intonation und Bedeutung. Aspekte der Prosodie-Semantik-Schnittstelle im Deutschen Ph.D. thesis Universität Stuttgart Arbeitspapiere des Instituts für Maschinelle Sprachverarbeitung/Phonetik (Phonetik-AIMS) Vol. 3 No. 4. Neppert, Joachim (1992): Elemente einer akustischen Phonetik, BuskeVerlag 1992, 3. Auflage, GER RA 5267 Nep A3 1992. Portele, T., Höfer, F. & Hess, W. J. (1996): Progress in Speech Synthesis, Springer Verlag, chapter A Mixed Inventory Structure for German Concatenative Synthesis, pp. 263-278. Pierrehumbert, Janet B. (1980): The phonology and phonetics of English intonation. Doctoral dissertation, Massachusetts Institute of Technology. Richard Sproat (Hg.), (1998): Mltilingual Text-to-Speech Synthesis. Kluwer, Dordrecht. Schwinn Hans, (1992): Relationale Datenbanksysteme. Hanser Verlag, München. 273 S. ISBN 3-446-15782-4. Schweitzer, A. und Haase, M. (2000): Zwei Ansätze zur syntaxgesteuerten Prosodiegenerierung. Konvens 2000, Ilmenau. ITG Fachbericht 161, pp. 197–202. Stefan Rapp, (1995): Automatic phonemic transcription and linguistic annotation from known text with Hidden Markov Models / An aligner for German. In Proceedings of ELSNET goes east and IMACS Workshop „Integration of Language and Speech in Academia and Industry“, Moscow, 1995. Thierry Dutoit, (1997): An Introduction to Text-to-Speech Synthesis. Kluwer, Dordrecht. 72

Van Santen, J. P. H. (1997): Combinatorial issues in text-to-speech synthesis, in ‚Eurospeech97’, Vol. 5, Rhodes, Greece, pp. 2511-2514. Van Santen, J. P. H. & Buchsbaum, A. L. (1997): Methods for optimal text selection, in ‚Eurospeech97’, Vol. 2, Rhodes, Greece, pp. 553-556. Van Santen, Jan P.H; Buchsbaum, A.L. (1997): Methods for Optimal Text Selection. In: Proceedings of Eurospeech ’97 (Rhodes, Greece). Vol.2, pp.553-556. Wolfgang von Kempelen (1791): Mechanismus der menschlichen Sprache nebst Beschreibung einer sprechenden Maschine, Wien: J.V. Degen, daselbst auch in französisch erschienen, Le Méchanisme de la parole, suivi de la description d'une machine parlante. Ein Faksimile-Neudruck der deutschsprachigen Version, mit einer Einleitung von Herbert E. Brekle und Wolfgang Wildgren, ist 1970 bei Frommann-Holzboog in Stuttgart erschienen. Es gibt auch neuere Übersetzungen ins Ungarische und Slowakische. Wagner, Petra, (2002): Vorhersage Betonungsmuster (Diss., Univ. Bonn).

und

Wahrnehmung

deutscher

Y. Saikachi (2003): Building A Unit Selection Voice for Festival. Master’s thesis, University of Edinburgh.

73

Anhang A: Beispiel eines Transkriptionsfiles

Exzellent ?Eks tsE (?E#1#_#k#?Eks#nucleus#0#NONE#NONE#1/13#ADJD#Exzellent) (k#1#?E#s#?Eks#coda#0#NONE#NONE#1/13#ADJD#Exzellent) (s#1#k#t#?Eks#coda#0#NONE#NONE#1/13#ADJD#Exzellent) (t#1#s#s#tsE#onset#0#NONE#NONE#2/13#ADJD#Exzellent) (s#1#t#E#tsE#onset#0#NONE#NONE#2/13#ADJD#Exzellent) (E#1#s#l#tsE#nucleus#0#NONE#NONE#2/13#ADJD#Exzellent) (l#1#E#E#lEnt#onset#1#L*H#NONE#3/13#ADJD#Exzellent) (E#1#l#n#lEnt#nucleus#1#L*H#NONE#3/13#ADJD#Exzellent) (n#1#E#t#lEnt#coda#1#L*H#NONE#3/13#ADJD#Exzellent) (t#1#n#?I#lEnt#coda#1#L*H#NONE#3/13#ADJD#Exzellent) ist ?Is (?I#1#t#s#?Is#nucleus#1#NONE#NONE#4/13#VAFIN#ist) (s#1#?I#d#?Is#coda#1#NONE#NONE#4/13#VAFIN#ist) die di: (d#1#s#i:#di:#onset#1#NONE#NONE#5/13#ART#die) (i:#1#d#d#di:#nucleus#1#NONE#NONE#5/13#ART#die) Dortmunder dO6t mUn (d#1#i:#O#dO6t#onset#1#NONE#NONE#6/13#ADJA#Dortmunder) (O#1#d#6#dO6t#nucleus#1#NONE#NONE#6/13#ADJA#Dortmunder) (6#1#O#t#dO6t#coda#1#NONE#NONE#6/13#ADJA#Dortmunder) (t#1#6#m#dO6t#coda#1#NONE#NONE#6/13#ADJA#Dortmunder) (m#1#t#U#mUn#onset#0#NONE#NONE#7/13#ADJA#Dortmunder) (U#1#m#n#mUn#nucleus#0#NONE#NONE#7/13#ADJA#Dortmunder) (n#1#U#d#mUn#coda#0#NONE#NONE#7/13#ADJA#Dortmunder) (d#1#n#6#d6#onset#0#NONE#NONE#8/13#ADJA#Dortmunder) (6#1#d#m#d6#nucleus#0#NONE#NONE#8/13#ADJA#Dortmunder) Museenlandschaft: mU ze:(L*H) En lant (m#1#6#U#mU#onset#0#NONE#NONE#9/13#NN#Museenlandschaft) (U#1#m#z#mU#nucleus#0#NONE#NONE#9/13#NN#Museenlandschaft) (z#1#U#e:#ze:#onset#1#L*H#NONE#10/13#NN#Museenlandschaft) (e:#1#z#E#ze:#nucleus#1#L*H#NONE#10/13#NN#Museenlandschaft) (E#1#e:#n#En#nucleus#0#NONE#NONE#11/13#NN#Museenlandschaft) (n#1#E#l#En#coda#0#NONE#NONE#11/13#NN#Museenlandschaft) (l#1#n#a#lant#onset#0#NONE#NONE#12/13#NN#Museenlandschaft) (a#1#l#n#lant#nucleus#0#NONE#NONE#12/13#NN#Museenlandschaft) (n#1#a#t#lant#coda#0#NONE#NONE#12/13#NN#Museenlandschaft) (t#1#n#S#lant#coda#0#NONE#NONE#12/13#NN#Museenlandschaft) (S#1#t#a#Saft#onset#0#NONE#(H)-#13/13#NN#Museenlandschaft) (a#1#S#f#Saft#nucleus#0#NONE#(H)-#13/13#NN#Museenlandschaft) (f#1#a#t#Saft#coda#0#NONE#(H)-#13/13#NN#Museenlandschaft) (t#1#f#m#Saft#coda#0#NONE#(H)-#13/13#NN#Museenlandschaft)

74

lEnt(L*H)

d6

Saft((H)-)

Moderne mo: dE6 n@ (m#1#t#o:#mo:#onset#0#NONE#NONE#1/11#ADJA#Moderne) (o:#1#m#d#mo:#nucleus#0#NONE#NONE#1/11#ADJA#Moderne) (d#1#o:#E#dE6#onset#1#NONE#NONE#2/11#ADJA#Moderne) (E#1#d#6#dE6#nucleus#1#NONE#NONE#2/11#ADJA#Moderne) (6#1#E#n#dE6#coda#1#NONE#NONE#2/11#ADJA#Moderne) (n#1#6#@#n@#onset#0#NONE#NONE#3/11#ADJA#Moderne) (@#1#n#k#n@#nucleus#0#NONE#NONE#3/11#ADJA#Moderne) Kunst kUns(L*H) (k#1#@#U#kUns#onset#1#L*H#NONE#4/11#NN#Kunst) (U#1#k#n#kUns#nucleus#1#L*H#NONE#4/11#NN#Kunst) (n#1#U#s#kUns#coda#1#L*H#NONE#4/11#NN#Kunst) (s#1#n#d#kUns#coda#1#L*H#NONE#4/11#NN#Kunst) des dEs (d#1#s#E#dEs#onset#1#NONE#NONE#5/11#ART#des) (E#1#d#s#dEs#nucleus#1#NONE#NONE#5/11#ART#des) (s#1#E#t#dEs#coda#1#NONE#NONE#5/11#ART#des) 20. tsva:n tsIC st@n (t#1#s#s#tsva:n#onset#1#NONE#NONE#6/11#ADJA#zwanzigsten) (s#1#t#v#tsva:n#onset#1#NONE#NONE#6/11#ADJA#zwanzigsten) (v#1#s#a:#tsva:n#onset#1#NONE#NONE#6/11#ADJA#zwanzigsten) (a:#1#v#n#tsva:n#nucleus#1#NONE#NONE#6/11#ADJA#zwanzigsten) (n#1#a:#t#tsva:n#coda#1#NONE#NONE#6/11#ADJA#zwanzigsten) (t#1#n#s#tsIC#onset#0#NONE#NONE#7/11#ADJA#zwanzigsten) (s#1#t#I#tsIC#onset#0#NONE#NONE#7/11#ADJA#zwanzigsten) (I#1#s#C#tsIC#nucleus#0#NONE#NONE#7/11#ADJA#zwanzigsten) (C#1#I#s#tsIC#coda#0#NONE#NONE#7/11#ADJA#zwanzigsten) (s#1#C#t#st@n#onset#0#NONE#NONE#8/11#ADJA#zwanzigsten) (t#1#s#@#st@n#onset#0#NONE#NONE#8/11#ADJA#zwanzigsten) (@#1#t#n#st@n#nucleus#0#NONE#NONE#8/11#ADJA#zwanzigsten) (n#1#@#j#st@n#coda#0#NONE#NONE#8/11#ADJA#zwanzigsten) Jahrhunderts ja:6 hUn(L*H) d6ts((H)-) (j#1#n#a:#ja:6#onset#0#NONE#NONE#9/11#NN#Jahrhunderts) (a:#1#j#6#ja:6#nucleus#0#NONE#NONE#9/11#NN#Jahrhunderts) (6#1#a:#h#ja:6#coda#0#NONE#NONE#9/11#NN#Jahrhunderts) (h#1#6#U#hUn#onset#1#L*H#NONE#10/11#NN#Jahrhunderts) (U#1#h#n#hUn#nucleus#1#L*H#NONE#10/11#NN#Jahrhunderts) (n#1#U#d#hUn#coda#1#L*H#NONE#10/11#NN#Jahrhunderts) (d#1#n#6#d6ts#onset#0#NONE#(H)-#11/11#NN#Jahrhunderts) (6#1#d#t#d6ts#nucleus#0#NONE#(H)-#11/11#NN#Jahrhunderts) (t#1#6#s#d6ts#coda#0#NONE#(H)-#11/11#NN#Jahrhunderts) (s#1#t#?I#d6ts#coda#0#NONE#(H)-#11/11#NN#Jahrhunderts) im ?I (?I#1#s#m#?I#nucleus#1#NONE#NONE#1/7#APPRART#im) Museum mu: ze:(L*H) Um (m#1#?I#u:#mu:#onset#0#NONE#NONE#2/7#NN#Museum) (u:#1#m#z#mu:#nucleus#0#NONE#NONE#2/7#NN#Museum)

75

(z#1#u:#e:#ze:#onset#1#L*H#NONE#3/7#NN#Museum) (e:#1#z#U#ze:#nucleus#1#L*H#NONE#3/7#NN#Museum) (U#1#e:#m#Um#nucleus#0#NONE#NONE#4/7#NN#Museum) (m#1#U#?a#Um#coda#0#NONE#NONE#4/7#NN#Museum) am ?am (?a#1#m#m#?am#nucleus#1#NONE#NONE#5/7#APPRART#am) (m#1#?a#?O#?am#coda#1#NONE#NONE#5/7#APPRART#am) Ostwall, ?Ost(L*H) val(H%) (?O#1#m#s#?Ost#nucleus#1#L*H#NONE#6/7#NN#Ostwall) (s#1#?O#t#?Ost#coda#1#L*H#NONE#6/7#NN#Ostwall) (t#1#s#v#?Ost#coda#1#L*H#NONE#6/7#NN#Ostwall) (v#1#t#a#val#onset#0#NONE#H%#7/7#NN#Ostwall) (a#1#v#l#val#nucleus#0#NONE#H%#7/7#NN#Ostwall) (l#1#a#_#val#coda#0#NONE#H%#7/7#NN#Ostwall) ein ?aIn (?aI#1#_#n#?aIn#nucleus#1#NONE#NONE#1/17#ART#ein) (n#1#?aI#k#?aIn#coda#1#NONE#NONE#1/17#ART#ein) Querschnitt kve:6(L*H) SnIt (k#1#n#v#kve:6#onset#1#L*H#NONE#2/17#NN#Querschnitt) (v#1#k#e:#kve:6#onset#1#L*H#NONE#2/17#NN#Querschnitt) (e:#1#v#6#kve:6#nucleus#1#L*H#NONE#2/17#NN#Querschnitt) (6#1#e:#S#kve:6#coda#1#L*H#NONE#2/17#NN#Querschnitt) (S#1#6#n#SnIt#onset#0#NONE#NONE#3/17#NN#Querschnitt) (n#1#S#I#SnIt#onset#0#NONE#NONE#3/17#NN#Querschnitt) (I#1#n#t#SnIt#nucleus#0#NONE#NONE#3/17#NN#Querschnitt) (t#1#I#m#SnIt#coda#0#NONE#NONE#3/17#NN#Querschnitt) mit mIt (m#1#t#I#mIt#onset#1#NONE#NONE#4/17#APPR#mit) (I#1#m#t#mIt#nucleus#1#NONE#NONE#4/17#APPR#mit) (t#1#I#v#mIt#coda#1#NONE#NONE#4/17#APPR#mit) wertvollen ve:6t fO l@n (v#1#t#e:#ve:6t#onset#1#NONE#NONE#5/17#ADJA#wertvollen) (e:#1#v#6#ve:6t#nucleus#1#NONE#NONE#5/17#ADJA#wertvollen) (6#1#e:#t#ve:6t#coda#1#NONE#NONE#5/17#ADJA#wertvollen) (t#1#6#f#ve:6t#coda#1#NONE#NONE#5/17#ADJA#wertvollen) (f#1#t#O#fO#onset#0#NONE#NONE#6/17#ADJA#wertvollen) (O#1#f#l#fO#nucleus#0#NONE#NONE#6/17#ADJA#wertvollen) (l#1#O#@#l@n#onset#0#NONE#NONE#7/17#ADJA#wertvollen) (@#1#l#n#l@n#nucleus#0#NONE#NONE#7/17#ADJA#wertvollen) (n#1#@#b#l@n#coda#0#NONE#NONE#7/17#ADJA#wertvollen) Beständen b@ StEn(L*H) d@n (b#1#n#@#b@#onset#0#NONE#NONE#8/17#NN#Beständen) (@#1#b#S#b@#nucleus#0#NONE#NONE#8/17#NN#Beständen) (S#1#@#t#StEn#onset#1#L*H#NONE#9/17#NN#Beständen) (t#1#S#E#StEn#onset#1#L*H#NONE#9/17#NN#Beständen) (E#1#t#n#StEn#nucleus#1#L*H#NONE#9/17#NN#Beständen) (n#1#E#d#StEn#coda#1#L*H#NONE#9/17#NN#Beständen)

76

(d#1#n#@#d@n#onset#0#NONE#NONE#10/17#NN#Beständen) (@#1#d#n#d@n#nucleus#0#NONE#NONE#10/17#NN#Beständen) (n#1#@#?a#d@n#coda#0#NONE#NONE#10/17#NN#Beständen) an ?an (?a#1#n#n#?an#nucleus#1#NONE#NONE#11/17#APPR#an) (n#1#?a#m#?an#coda#1#NONE#NONE#11/17#APPR#an) Münzen, mYn(L*H) ts@n (m#1#n#Y#mYn#onset#1#L*H#NONE#12/17#NN#Münzen) (Y#1#m#n#mYn#nucleus#1#L*H#NONE#12/17#NN#Münzen) (n#1#Y#t#mYn#coda#1#L*H#NONE#12/17#NN#Münzen) (t#1#n#s#ts@n#onset#0#NONE#NONE#13/17#NN#Münzen) (s#1#t#@#ts@n#onset#0#NONE#NONE#13/17#NN#Münzen) (@#1#s#n#ts@n#nucleus#0#NONE#NONE#13/17#NN#Münzen) (n#1#@#g#ts@n#coda#0#NONE#NONE#13/17#NN#Münzen) Glas, gla:s(L*H) (g#1#n#l#gla:s#onset#1#L*H#NONE#14/17#NN#Glas) (l#1#g#a:#gla:s#onset#1#L*H#NONE#14/17#NN#Glas) (a:#1#l#s#gla:s#nucleus#1#L*H#NONE#14/17#NN#Glas) (s#1#a:#p#gla:s#coda#1#L*H#NONE#14/17#NN#Glas) Porzellan, pO6 tsE la:n(L*H,H%) (p#1#s#O#pO6#onset#0#NONE#NONE#15/17#NN#Porzellan) (O#1#p#6#pO6#nucleus#0#NONE#NONE#15/17#NN#Porzellan) (6#1#O#t#pO6#coda#0#NONE#NONE#15/17#NN#Porzellan) (t#1#6#s#tsE#onset#0#NONE#NONE#16/17#NN#Porzellan) (s#1#t#E#tsE#onset#0#NONE#NONE#16/17#NN#Porzellan) (E#1#s#l#tsE#nucleus#0#NONE#NONE#16/17#NN#Porzellan) (l#1#E#a:#la:n#onset#1#L*H#H%#17/17#NN#Porzellan) (a:#1#l#n#la:n#nucleus#1#L*H#H%#17/17#NN#Porzellan) (n#1#a:#_#la:n#coda#1#L*H#H%#17/17#NN#Porzellan) Möbeln m2:(L*H) b@ln((H)-) (m#1#_#2:#m2:#onset#1#L*H#NONE#1/2#NN#Möbeln) (2:#1#m#b#m2:#nucleus#1#L*H#NONE#1/2#NN#Möbeln) (b#1#2:#@#b@ln#onset#0#NONE#(H)-#2/2#NN#Möbeln) (@#1#b#l#b@ln#nucleus#0#NONE#(H)-#2/2#NN#Möbeln) (l#1#@#n#b@ln#coda#0#NONE#(H)-#2/2#NN#Möbeln) (n#1#l#?U#b@ln#coda#0#NONE#(H)-#2/2#NN#Möbeln) und ?Unt (?U#1#n#n#?Unt#nucleus#1#NONE#NONE#1/8#KON#und) (n#1#?U#t#?Unt#coda#1#NONE#NONE#1/8#KON#und) (t#1#n#g#?Unt#coda#1#NONE#NONE#1/8#KON#und) Gemälden g@ mE:l(L*H) d@n (g#1#t#@#g@#onset#0#NONE#NONE#2/8#NN#Gemälden) (@#1#g#m#g@#nucleus#0#NONE#NONE#2/8#NN#Gemälden) (m#1#@#E:#mE:l#onset#1#L*H#NONE#3/8#NN#Gemälden) (E:#1#m#l#mE:l#nucleus#1#L*H#NONE#3/8#NN#Gemälden) (l#1#E:#d#mE:l#coda#1#L*H#NONE#3/8#NN#Gemälden) (d#1#l#@#d@n#onset#0#NONE#NONE#4/8#NN#Gemälden) (@#1#d#n#d@n#nucleus#0#NONE#NONE#4/8#NN#Gem 鋖 den)

77

(n#1#@#?I#d@n#coda#0#NONE#NONE#4/8#NN#Gem 鋖 den) im ?I (?I#1#n#m#?I#nucleus#1#NONE#NONE#5/8#APPRART#im) Museum mu: ze:(L*H) Um((H)-) (m#1#?I#u:#mu:#onset#0#NONE#NONE#6/8#NN#Museum) (u:#1#m#z#mu:#nucleus#0#NONE#NONE#6/8#NN#Museum) (z#1#u:#e:#ze:#onset#1#L*H#NONE#7/8#NN#Museum) (e:#1#z#U#ze:#nucleus#1#L*H#NONE#7/8#NN#Museum) (U#1#e:#m#Um#nucleus#0#NONE#(H)-#8/8#NN#Museum) (m#1#U#f#Um#coda#0#NONE#(H)-#8/8#NN#Museum) für fy:6 (f#1#m#y:#fy:6#onset#1#NONE#NONE#1/2#APPR#für) (y:#1#f#6#fy:6#nucleus#1#NONE#NONE#1/2#APPR#für) (6#1#y:#k#fy:6#coda#1#NONE#NONE#1/2#APPR#für) Kunst kUnst(L*H,(H)-) (k#1#6#U#kUnst#onset#1#L*H#(H)-#2/2#NN#Kunst) (U#1#k#n#kUnst#nucleus#1#L*H#(H)-#2/2#NN#Kunst) (n#1#U#s#kUnst#coda#1#L*H#(H)-#2/2#NN#Kunst) (s#1#n#t#kUnst#coda#1#L*H#(H)-#2/2#NN#Kunst) (t#1#s#?U#kUnst#coda#1#L*H#(H)-#2/2#NN#Kunst) und ?Unt (?U#1#t#n#?Unt#nucleus#1#NONE#NONE#1/6#KON#und) (n#1#?U#t#?Unt#coda#1#NONE#NONE#1/6#KON#und) (t#1#n#k#?Unt#coda#1#NONE#NONE#1/6#KON#und) Kulturgeschichte, kUl tu:6(L*H) g@ SIC t@(H%) (k#1#t#U#kUl#onset#0#NONE#NONE#2/6#NN#Kulturgeschichte) (U#1#k#l#kUl#nucleus#0#NONE#NONE#2/6#NN#Kulturgeschichte) (l#1#U#t#kUl#coda#0#NONE#NONE#2/6#NN#Kulturgeschichte) (t#1#l#u:#tu:6#onset#1#L*H#NONE#3/6#NN#Kulturgeschichte) (u:#1#t#6#tu:6#nucleus#1#L*H#NONE#3/6#NN#Kulturgeschichte) (6#1#u:#g#tu:6#coda#1#L*H#NONE#3/6#NN#Kulturgeschichte) (g#1#6#@#g@#onset#0#NONE#NONE#4/6#NN#Kulturgeschichte) (@#1#g#S#g@#nucleus#0#NONE#NONE#4/6#NN#Kulturgeschichte) (S#1#@#I#SIC#onset#0#NONE#NONE#5/6#NN#Kulturgeschichte) (I#1#S#C#SIC#nucleus#0#NONE#NONE#5/6#NN#Kulturgeschichte) (C#1#I#t#SIC#coda#0#NONE#NONE#5/6#NN#Kulturgeschichte) (t#1#C#@#t@#onset#0#NONE#H%#6/6#NN#Kulturgeschichte) (@#1#t#_#t@#nucleus#0#NONE#H%#6/6#NN#Kulturgeschichte) TechniktEC(L*H) nIk((H)-) (t#1#_#E#tEC#onset#1#L*H#NONE#1/2#NN#Technik) (E#1#t#C#tEC#nucleus#1#L*H#NONE#1/2#NN#Technik) (C#1#E#n#tEC#coda#1#L*H#NONE#1/2#NN#Technik) (n#1#C#I#nIk#onset#0#NONE#(H)-#2/2#NN#Technik) (I#1#n#k#nIk#nucleus#0#NONE#(H)-#2/2#NN#Technik) (k#1#I#?U#nIk#coda#0#NONE#(H)-#2/2#NN#Technik) und ?Unt (?U#1#k#n#?Unt#nucleus#1#NONE#NONE#1/17#KON#und) (n#1#?U#t#?Unt#coda#1#NONE#NONE#1/17#KON#und) (t#1#n#z#?Unt#coda#1#NONE#NONE#1/17#KON#und)

78

Sozialgeschichte zOts ja:l(L*H) g@ SIC t@ (z#1#t#O#zOts#onset#0#NONE#NONE#2/17#NN#Sozialgeschichte) (O#1#z#t#zOts#nucleus#0#NONE#NONE#2/17#NN#Sozialgeschichte) (t#1#O#s#zOts#coda#0#NONE#NONE#2/17#NN#Sozialgeschichte) (s#1#t#j#zOts#coda#0#NONE#NONE#2/17#NN#Sozialgeschichte) (j#1#s#a:#ja:l#onset#1#L*H#NONE#3/17#NN#Sozialgeschichte) (a:#1#j#l#ja:l#nucleus#1#L*H#NONE#3/17#NN#Sozialgeschichte) (l#1#a:#g#ja:l#coda#1#L*H#NONE#3/17#NN#Sozialgeschichte) (g#1#l#@#g@#onset#0#NONE#NONE#4/17#NN#Sozialgeschichte) (@#1#g#S#g@#nucleus#0#NONE#NONE#4/17#NN#Sozialgeschichte) (S#1#@#I#SIC#onset#0#NONE#NONE#5/17#NN#Sozialgeschichte) (I#1#S#C#SIC#nucleus#0#NONE#NONE#5/17#NN#Sozialgeschichte) (C#1#I#t#SIC#coda#0#NONE#NONE#5/17#NN#Sozialgeschichte) (t#1#C#@#t@#onset#0#NONE#NONE#6/17#NN#Sozialgeschichte) (@#1#t#?I#t@#nucleus#0#NONE#NONE#6/17#NN#Sozialgeschichte) im ?Im (?I#1#@#m#?Im#nucleus#1#NONE#NONE#7/17#APPRART#im) (m#1#?I#v#?Im#coda#1#NONE#NONE#7/17#APPRART#im) Westfälischen vEst fE: lI S@n (v#1#m#E#vEst#onset#0#NONE#NONE#8/17#NN#Westfälischen) (E#1#v#s#vEst#nucleus#0#NONE#NONE#8/17#NN#Westfälischen) (s#1#E#t#vEst#coda#0#NONE#NONE#8/17#NN#Westfälischen) (t#1#s#f#vEst#coda#0#NONE#NONE#8/17#NN#Westfälischen) (f#1#t#E:#fE:#onset#1#NONE#NONE#9/17#NN#Westfälischen) (E:#1#f#l#fE:#nucleus#1#NONE#NONE#9/17#NN#Westfälischen) (l#1#E:#I#lI#onset#0#NONE#NONE#10/17#NN#Westfälischen) (I#1#l#S#lI#nucleus#0#NONE#NONE#10/17#NN#Westfälischen) (S#1#I#@#S@n#onset#0#NONE#NONE#11/17#NN#Westfälischen) (@#1#S#n#S@n#nucleus#0#NONE#NONE#11/17#NN#Westfälischen) (n#1#@#?I#S@n#coda#0#NONE#NONE#11/17#NN#Westfälischen) Industriemuseum ?In dUs tRi:(L*H) mu: ze: Um((H)-) (?I#1#n#n#?In#nucleus#0#NONE#NONE#12/17#NN#Industriemuseum) (n#1#?I#d#?In#coda#0#NONE#NONE#12/17#NN#Industriemuseum) (d#1#n#U#dUs#onset#0#NONE#NONE#13/17#NN#Industriemuseum) (U#1#d#s#dUs#nucleus#0#NONE#NONE#13/17#NN#Industriemuseum) (s#1#U#t#dUs#coda#0#NONE#NONE#13/17#NN#Industriemuseum) (t#1#s#R#tRi:#onset#1#L*H#NONE#14/17#NN#Industriemuseum) (R#1#t#i:#tRi:#onset#1#L*H#NONE#14/17#NN#Industriemuseum) (i:#1#R#m#tRi:#nucleus#1#L*H#NONE#14/17#NN#Industriemuseum) (m#1#i:#u:#mu:#onset#0#NONE#NONE#15/17#NN#Industriemuseum) (u:#1#m#z#mu:#nucleus#0#NONE#NONE#15/17#NN#Industriemuseum) (z#1#u:#e:#ze:#onset#0#NONE#NONE#16/17#NN#Industriemuseum) (e:#1#z#U#ze:#nucleus#0#NONE#NONE#16/17#NN#Industriemuseum) (U#1#e:#m#Um#nucleus#0#NONE#(H)-#17/17#NN#Industriemuseum) (m#1#U#?U#Um#coda#0#NONE#(H)-#17/17#NN#Industriemuseum)

79

und ?Unt (?U#1#m#n#?Unt#nucleus#1#NONE#NONE#1/11#KON#und) (n#1#?U#t#?Unt#coda#1#NONE#NONE#1/11#KON#und) (t#1#n#?I#?Unt#coda#1#NONE#NONE#1/11#KON#und)

80

Anhang B: Menüpunkte des graphischen Tools

B-1: Menüpunkte des Menüs „Datenbank“

B-2: Menüpunkte des Menüs „Korpus“

81

B-3: Menüpunkte des Menüs „Tabelle“

B-4: Untermenü „Wortebene“ für Korpusanzeige

82

B-5: Untermenü „Silbenebene“ für Korpusanzeige

B-6: Untermenü „Phonebene“ für Korpusanzeige

83

B-7: Untermenü „Wörter“ für Korpusstatistik

B-8: Untermenü „Silben“ für Korpusstatistik

84

B-9: Untermenü „Phone“ für Korpusstatistik

85

Anhang C:

Beispielsätze des Korpusfiles

4 (da:#_#alveolarv#0#NONE#NONE#ini#function)(di:#vokallmu#labialv#0#NONE#NO NE#ini#function)(bE6#vokalhfu#alveolarg#0#NONE#NONE#ini#content)(li:#vokalmmu#a lveolarn#1#NONE#NONE#med#content)(n6#vokalhfu#vokalhfu#0#NONE#NONE#med# content)(?I#vokalmmu#alveolarn#1#L*H#NONE#med#content)(n@n#vokalhfu#alveolaru v#0#NONE#NONE#med#content)(Stat#alveolarn#alveolarv#0#NONE#NONE#med#cont ent)(ze:6#alveolaruv#labialv#1#NONE#NONE#med#content)(vaIt#vokalmmu#alveolarg# 1#L*H#NONE#med#content)(lOY#alveolaruv#labialuv#0#NONE#NONE#med#content)(fI C#vokalhfr#vokalhfu#0#NONE#NONE#med#content)(Ist#velaruv#alveolarv#0#NONE#H %#fin#function)(zOl#alveolaruv#alveolaruv#1#NONE#NONE#ini#function)(t@#alveolarg #labialn#0#NONE#NONE#ini#function)(man#vokalmmu#labialuv#0#NONE#NONE#ini#f unction)(fy:6#alveolarn#alveolarv#0#NONE#NONE#med#function)(di:#vokalmmu#alveol aruv#0#NONE#NONE#med#function)(Spa#vokalhfu#alveolaruv#0#NONE#NONE#med# content)(tsi:6#vokallmu#velarv#1#L*H#NONE#med#content)(gE#vokalmmu#velarn#0#N ONE#NONE#med#content)(N@#vokalmfu#vokalmfu#0#NONE#NONE#med#content)(? Ent#vokalmmu#alveolaruv#0#NONE#NONE#med#content)(SpRE#alveolaruv#velaruv#1 #H*L#NONE#med#content)(C@n#vokalmfu#alveolaruv#0#NONE#NONE#med#content) (tsaIt#alveolarn#vokallmu#1#H*L#NONE#med#content)(?aIn#alveolaruv#labialuv#1#NO NE#NONE#med#content)(pla:#alveolarn#alveolarn#0#NONE#NONE#med#content)(n@ n#vokallmu#_#0#NONE#L%#fin#content) 11 (?aInst#_#vokallmu#1#NONE#NONE#ini#content)(an#alveolaruv#alveolarv#0#NON E#NONE#ini#function)(de:6#alveolarn#labialn#0#NONE#NONE#ini#function)(maU#voka lmmu#vokalmmu#1#L*H#NONE#med#content)(6#vokalhbr#velarv#0#NONE#H-#fin#con tent)(g@#vokalmmu#alveolarg#0#NONE#NONE#ini#content)(le:#vokalmmu#velarv#1#L *H#NONE#ini#content)(g@n#vokalmfu#alveolaruv#0#NONE#H%#fin#content)(Ste:t#alv eolarn#vokalmfu#1#NONE#NONE#ini#content)(Es#alveolaruv#alveolarn#0#NONE#NO NE#ini#function)(nu:n#alveolaruv#labialuv#1#NONE#NONE#ini#content)(fy:6#alveolarn# alveolarv#0#NONE#NONE#med#function)(di:#vokalmmu#labialv#0#NONE#NONE#med #function)(vi:#vokalhfu#alveolarv#1#L*H#NONE#med#content)(d6#vokalhfu#labialuv#0# NONE#NONE#med#content)(fE6#vokalmmu#vokallmu#0#NONE#NONE#med#content)( ?aI#vokalmmu#alveolarn#0#NONE#NONE#med#content)(nUN#vokalhfu#alveolarv#0#N ONE#NONE#med#content)(de:6#velarn#alveolaruv#0#NONE#NONE#med#function)(St at#vokalmmu#_#1#H*L#L%#fin#content) 12 (?Im#_#alveolarv#0#NONE#NONE#ini#function)(zy:t#labialn#labialuv#1#L*H#NON E#ini#content)(fly:#alveolaruv#velarv#0#NONE#NONE#ini#content)(g@l#vokalhfr#labial v#0#NONE#NONE#med#content)(b@#alveolarg#labialuv#0#NONE#NONE#med#conte nt)(fIn#vokalmmu#alveolarv#1#NONE#NONE#med#content)(d@t#alveolarn#alveolarv#0 #NONE#NONE#med#content)(zIC#alveolaruv#vokallmu#0#NONE#NONE#med#functio n)(?aI#velaruv#alveolarn#1#NONE#NONE#med#function)(n@#vokalhfu#vokalhfu#0#NO

86

NE#NONE#med#function)(?In#vokalmmu#labialuv#1#L*H#NONE#med#content)(fo:#alv eolarn#alveolaruv#0#NONE#NONE#med#content)(StE#vokalmbr#alveolarg#0#NONE#N ONE#med#content)(l@#vokalmfu#vokalhfu#0#NONE#H%#fin#content)(?In#vokalmmu# alveolarv#0#NONE#NONE#ini#function)(de:6#alveolarn#vokallmu#0#NONE#NONE#ini# function)(?aUs#vokalmmu#labialuv#1#NONE#NONE#ini#content)(fy:6#alveolaruv#alveol arg#0#NONE#NONE#med#content)(lI#vokalmmu#velaruv#0#NONE#NONE#med#conte nt)(C@#vokalhfu#vokalhfu#0#NONE#NONE#med#content)(?In#vokalmmu#labialuv#0# NONE#NONE#med#content)(fO6#alveolarn#labialn#0#NONE#NONE#med#content)(ma #vokalmmu#alveolaruv#0#NONE#NONE#med#content)(tsjo:#vokallmu#alveolarn#1#H*L #NONE#med#content)(n@n#vokalmbr#vokalmfu#0#NONE#NONE#med#content)(?E6# alveolarn#velaruv#0#NONE#NONE#med#content)(hElt#vokalmmu#alveolarg#1#H*L#N ONE#med#content)(lIC#alveolaruv#alveolarv#0#NONE#NONE#med#content)(zInt#velar uv#_#0#NONE#L%#fin#function) 14 (de:6#_#labialv#0#NONE#NONE#ini#function)(b@#vokalmmu#velaruv#0#NONE#N ONE#ini#content)(Ry:m#vokalmmu#alveolaruv#1#NONE#NONE#ini#content)(t@s#labial n#alveolaruv#0#NONE#NONE#med#content)(t@#alveolaruv#labialv#0#NONE#NONE# med#content)(bU#vokalmmu#alveolarg#0#NONE#NONE#med#content)(l@#vokalhbr#la bialv#0#NONE#NONE#med#content)(va:6#vokalmmu#labialv#1#NONE#NONE#med#c ontent)(bE6#vokalmmu#alveolarg#0#NONE#NONE#med#content)(li:ns#vokalmmu#voka lhbr#1#L*H#H%#fin#content)(?Un#alveolaruv#alveolaruv#1#NONE#NONE#ini#function) (t6#alveolarn#alveolarv#0#NONE#NONE#ini#function)(de:n#vokalmmu#alveolarg#0#NO NE#NONE#ini#function)(lIn#alveolarn#alveolarv#1#L*H#NONE#med#content)(d@n#alv eolarn#labialuv#0#NONE#H%#fin#content)(fy:6t#alveolarn#labialuv#1#NONE#NONE#in i#content)(fOm#alveolaruv#labialuv#0#NONE#NONE#ini#function)(pa#labialn#velaruv#0 #NONE#NONE#ini#content)(Ri:#vokallmu#alveolarv#1#NONE#NONE#med#content)(z6 #vokalhfu#labialuv#0#NONE#NONE#med#content)(plats#vokalmmu#vokallmu#1#L*H# NONE#med#content)(aUs#alveolaruv#alveolaruv#0#NONE#NONE#med#function)(tsUm #alveolaruv#alveolaruv#0#NONE#NONE#med#function)(SlOs#labialn#labialuv#1#H*L# NONE#med#content)(plats#alveolaruv#_#0#NONE#L%#fin#content) 33 (di:#_#alveolaruv#0#NONE#NONE#ini#function)(SlOs#vokalhfu#labialv#1#L*H#NO NE#ini#content)(bRY#alveolaruv#velaruv#0#NONE#NONE#ini#content)(k@#vokalhfr#vo kalhfr#0#NONE#NONE#med#content)(?y:#vokalmmu#labialv#1#NONE#NONE#med#fu nction)(b6#vokalhfr#alveolarv#0#NONE#NONE#med#function)(de:6#vokalmmu#alveolar uv#0#NONE#NONE#med#function)(SpRe:#vokalmmu#vokalhfu#1#L*H#H%#fin#content )(?Ist#vokalmfu#labialv#0#NONE#NONE#ini#function)(vi:#alveolaruv#alveolarv#1#NON E#NONE#ini#content)(d6#vokalhfu#labialn#0#NONE#NONE#ini#content)(mI#vokalmmu #alveolarv#0#NONE#NONE#med#function)(de:n#vokalhfu#alveolaruv#0#NONE#NONE #med#function)(Sta:#alveolarn#alveolaruv#1#NONE#NONE#med#content)(tu:#vokallmu #vokalmmu#0#NONE#NONE#med#content)(@n#vokalhbr#alveolaruv#0#NONE#NONE #med#content)(SIN#alveolarn#velaruv#1#H*L#NONE#med#content)(k@ls#velarn#velar v#0#NONE#NONE#med#content)(g@#alveolaruv#alveolaruv#0#NONE#NONE#med#co ntent)(SmYkt#vokalmmu#_#1#NONE#L%#fin#content)

87

34 (hIn#_#alveolaruv#1#NONE#NONE#ini#function)(t6#alveolarn#alveolarv#0#NONE# NONE#ini#function)(de:m#vokalmmu#alveolarg#0#NONE#NONE#ini#function)(lUst#labi aln#velarv#1#L*H#NONE#med#content)(ga:6#alveolaruv#alveolaruv#0#NONE#NONE# med#content)(t@n#vokalmmu#vokalmfu#0#NONE#H%#fin#content)(?E6#alveolarn#labi alv#0#NONE#NONE#ini#content)(blIkt#vokalmmu#labialn#1#NONE#NONE#ini#content) (man#alveolaruv#alveolarv#0#NONE#NONE#ini#function)(das#alveolarn#vokallmu#0#N ONE#NONE#med#function)(?al#alveolaruv#alveolaruv#1#NONE#NONE#med#content)( t@#alveolarg#labialn#0#NONE#NONE#med#content)(mU#vokalmmu#alveolarv#0#NON E#NONE#med#content)(ze:#vokalhbr#vokalhbr#1#L*H#NONE#med#content)(Um#vokal mfu#vokallmu#0#NONE#H%#fin#content)(?aI#labialn#alveolarn#1#NONE#NONE#ini#fu nction)(n@s#vokalhfu#alveolarv#0#NONE#NONE#ini#function)(de:6#alveolaruv#labialuv #0#NONE#NONE#ini#function)(fYnf#vokalmmu#labialv#1#NONE#NONE#med#content) (baU#labialuv#alveolaruv#1#L*H#NONE#med#content)(t@n#vokalhbr#alveolarv#0#NO NE#NONE#med#content)(de:6#alveolarn#labialn#0#NONE#NONE#med#function)(mu:# vokalmmu#alveolarv#0#NONE#NONE#med#content)(ze:#vokalhbr#vokalhbr#1#H*L#NO NE#med#content)(Ums#vokalmfu#vokalhfu#0#NONE#NONE#med#content)(?In#alveola ruv#alveolarv#0#NONE#NONE#med#content)(z@l#alveolarn#_#0#NONE#L%#fin#cont ent) 36 (de:6#_#labialv#0#NONE#NONE#ini#function)(bE6#vokalmmu#alveolarg#0#NONE #NONE#ini#content)(li:#vokalmmu#alveolarn#1#NONE#NONE#ini#content)(n6#vokalhfu #alveolarv#0#NONE#NONE#med#content)(do:m#vokalmmu#vokallmu#1#L*H#NONE# med#content)(am#labialn#alveolarg#0#NONE#NONE#med#function)(lUst#labialn#velarv #1#L*H#NONE#med#content)(ga:6#alveolaruv#alveolaruv#0#NONE#NONE#med#conte nt)(t@n#vokalmmu#vokalhfu#0#NONE#H%#fin#content)(?Ist#alveolarn#vokallmu#0#NO NE#NONE#ini#function)(aIn#alveolaruv#vokalmfu#0#NONE#NONE#ini#function)(?Eks# alveolarn#alveolaruv#0#NONE#NONE#ini#content)(tRa:#alveolaruv#labialv#0#NONE#N ONE#med#content)(va#vokallmu#velarv#0#NONE#NONE#med#content)(gan#vokallmu #alveolaruv#1#NONE#NONE#med#content)(t6#alveolarn#labialv#0#NONE#NONE#med #content)(baU#vokalmmu#alveolarv#1#L*H#NONE#med#content)(de:6#vokalhbr#alveol arg#0#NONE#NONE#med#function)(ja:6#vokalmmu#velaruv#0#NONE#NONE#med#co ntent)(hUn#vokalmmu#alveolarv#1#H*L#NONE#med#content)(d6t#alveolarn#labialv#0# NONE#NONE#med#content)(vEn#alveolaruv#alveolarv#0#NONE#NONE#med#content) (d@#alveolarn#_#0#NONE#L%#fin#content) 38 (das#_#labialv#0#NONE#NONE#ini#function)(vaI#alveolaruv#alveolaruv#1#NONE# NONE#ini#content)(t@#vokalhfu#velaruv#0#NONE#NONE#ini#content)(R@#vokalmmu #alveolaruv#0#NONE#NONE#med#content)(SIk#vokalmmu#alveolarv#1#L*H#NONE#m ed#content)(za:l#velaruv#alveolarv#0#NONE#NONE#med#content)(de:6#alveolarg#vela rv#0#NONE#NONE#med#function)(g@#vokalmmu#labialv#0#NONE#NONE#med#cont ent)(bOY#vokalmmu#alveolarv#1#L*H#NONE#med#content)(d@#vokalhfr#vokalhbr#0# NONE#H-#fin#content)(?Unt#vokalmmu#vokallmu#0#NONE#NONE#ini#function)(aIn#al veolaruv#vokalmfu#0#NONE#NONE#ini#function)(?e:#alveolarn#labialv#0#NONE#NON

88

E#ini#content)(vEn#vokalmfu#alveolaruv#0#NONE#NONE#med#content)(tu:#alveolarn# vokalmfu#0#NONE#NONE#med#content)(E#vokalhbr#alveolarg#1#NONE#NONE#med #content)(l6#vokalmfu#labialv#0#NONE#NONE#med#content)(vi:#vokalmmu#alveolarv# 1#L*H#NONE#med#content)(d6#vokalhfu#vokallmu#0#NONE#NONE#med#content)(aU f#vokalmmu#labialv#0#NONE#NONE#med#content)(baU#labialuv#alveolarv#0#NONE# H-#fin#content)(dEs#vokalhbr#alveolaruv#0#NONE#NONE#ini#function)(SlO#alveolaruv #alveolaruv#1#H*L#NONE#ini#content)(s@s#vokalmbr#labialv#0#NONE#NONE#ini#co ntent)(vI6t#alveolaruv#alveolarn#0#NONE#NONE#med#function)(nOx#alveolaruv#alveo larv#1#NONE#NONE#med#content)(dIs#velaruv#velaruv#0#NONE#NONE#med#conte nt)(ku:#alveolaruv#alveolaruv#0#NONE#NONE#med#content)(ti:6t#vokalhbr#_#1#NON E#L%#fin#content)

89