 |
Forschung
|
 |
Hier werde ich in Zukunft darüber berichten, an was ich hier an der Uni arbeite.
30.07.00
So, kurz vor der Ferienzeit gibt es noch einen Bericht. Die Wordformfrequency Listen sind soweit alle fertig, und werden von mir nun in Excel bearbeitet. Das Ergebnis ist aber schon abzusehen, daß sich die Erwartungen von Dr. Olaszy und Dr. Német decken: Die größte Worthäufigkeit zeigt englisch, gefolgt von deutsch und auf dem glorreichen 3. Platz siedelt sich ungarisch an. Das Ganze wird dann grafisch ausgewertet und daraus wird dann ein hübsches Paper.
Und hier wäre dann mal eine solche Auswertung als Excel Grafik:
Grafik
Die Funktion hat noch einige Unstetigkeiten, und ist noch nicht optimal konfiguriert, aber es ist jetzt wohl ein schlechter Zeitpunkt zuzugeben, daß ich von Excel so gut wie keinen Plan habe. Die Grafik zeigt 2 Funktionen (ungarisch(violett) und englisch(blau)), welche die Häufigkeitsverteilung jeweils des ersten Wortes in einem Satz zeigt. Eigentlich sollte die Grafik alle 3 Sprachen zeigen, Gott weiß, warum sie das nicht tut...
Weiterhin habe ich ein Programm geschrieben, welches die Abdeckung eines Textes mit den ermittelten Wordfrequency Listen ermittelt, also wieviel Wörter/Kombinationen man benötigt, um einen gewissen Prozentsatz eines Textes abzudecken. Funktioniert noch nicht 100 %ig, aber das dürfte kein größeres Problem darstellen.
Mein Synthese-Programm ist auch einen Schritt weiter, das es am wav-header lag, daß die Samplekopierei nicht funktioniert hat, daß dürfte ja jetzt jeder mitbekommen haben. Mittlerweile habe ich das auch programmtechnisch im Griff, nachdem ich wieder mal den sehr guten Support der Gruppe hier genießen konnte, die mich bei diesem Problem unterstützt haben. Noch 2/3 Kleinigkeiten, dann sollte es theoretisch funktionieren. Aber wenn nicht, dann schlägt mich das nach allem, was ich mit diesem Programm schon erlebt habe, auch nicht zurück.
24.06.00
Wow, es ist ja schon über einen Monat her, daß ich hier was geschrieben habe, dann wird es mal Zeit, von der Front zu berichten. Mein Wordformfrequency-programm ist nun fertig. Die Speicherplatzreserierung läuft jetzt dynamisch, d.h. für die Wörter in der Struktur wird kein fester Speicherplatz vergeben (z.B. char[100]), sondern es wird über eine strlen Funktion der eigentliche Speicherbedarf ausgewertert und allokiert. Weiterhin benutze ich nun keine verketteten Listen, sondern einen einfachen Array, der sich besser zum Durchsuchen eignet.
Mit einer modifizierten bsearch Funktion wird überprüft, ob eine neue Kombination bereits vorhanden ist, und wenn nicht, gibt sie den Platz an, an dem die neue Kombination eingefügt wird.
Das Programm verarbeitet nun ca 2,5 Mio Wörter in ca. 10 Stunden.
Ich werde so bald wie möglich ein Programm für die allgemeine Benutzung zur Verfügung stellen, welches dann unter "Kreatives" erhältlich ist.
Dieses Programm wird nun modifiziert, so das es nur Wörter am Beginn eines Satzes zählt. Ebenso für Wörter am Ende einer Phrase , bzw in der Mitte. Dann werden Listen erstellt für Wortkombinationen und einzelne Wörter. Die ganze Auswertung erfolgt in 3 Sprachen, ungarisch, englisch und deutsch. Dann werden u.a. Vergleiche angestellt, wieweit sich mit einem begrenzten Korpus ein Text abdecken läßt.
Mein Text-to-speech Programm hat sich nicht weiterentwickelt, aufgrund unzureichender Informationen hinlänglich der Samplekopiergeschichte. Jedoch hat mir letzte Woche ein Mitglied der Gruppe diesen Sachverhalt erklärt, und mir gezeigt, wie ich dieses Problem beheben kann. Also hoffe ich, in der nächsten Zeit mit meinem Synthese-Programm die ersten Gespräche zu führen.
18.05.00
Endlich haben wir es hier geschafft, den Speicherbug aus den Programmen zu entfernen. Diese neuen Erkenntnisse habe ich dann auch auf die TTS-Programme übertragen. Allerdings ist wieder mal kurz vor dem Ziel ein Problem aufgetaucht, weil die Wav-Dateien zwar in eine neue Datei kopiert werden, aber wenn ich diese dann zur TTS-Synthese verwenden will, dann werden keine Daten kopiert.
Mein Hauptrogramm erstellt ja die Labeldatei mit den Infos über Name , Start- und Endbyte, usw, und dabei wird zu jeder Labeldatei die entsprechende Wav-Datei mitkopiert, und zwar alle in eine große Wav-Datei. Wenn ich diese dann abspielen möchte, dann müßte man theoretisch alle Phondat-Sätze hören können (weil in einer Datei), jedoch wird immer nur der erste Satz abgespielt.
Das Problem wird wohl nicht so problematisch sein, obwohl ich noch keine heiße Spur habe, an was es liegen könnte.
Tja, und wenn die Götter dann gnädig sind, dann könnte man tatsächlich die Kiste sprechen lassen. Aber ich bin davon überzeigt, daß sicherlich noch was anderes kommt. Jedenfalls geht es mit der TTS-Synthese voran, und ich hoffe, daß dann bald die ersten Sprachsamples gemacht werden können.
Die Geschwindigkeitsprobleme, die mein Programm für die Wortkombinationszählungen hat, ist jedenfalls auf dem Reißbrett gelöst, ich habe mich vor ein paar Tagen mit jemanden unterhalten, und der gab mir dann ein paar hilfreiche Tips, z.B. soll ich mit Quiksort die Liste sortieren, und dann mit Qicksearch nach neuen Einträgen suchen.
Jaja, ich weiß, da hätte ich auch selber drauf kommen können, jedenfalls muß ich mich mal mit den Funktionen vertraut machen, und dann kann ich diese implementieren. Weiterhin habe ich in dem Programm die verketteten Listen durch Arrays ersetzt, was ein komfortableres Zugreifen auf die Elmente ermöglicht. Dann haben wir die Speicherplatzreservierung für die Arrays dynamisch angelegt, und das wird dann wohl eine Beschleunigung der ganzen Sache von Faktor bis 105 bringen, abhängig, wie schnell die Quiksort-Funktion arbeitet.
08.05.00
Mittlerweile habe ich das Text-to-speech Programm unter Windows zum Laufen gebracht, ein paar kleine Bugs entfernt, denn die Anfangs und Endzeiten der Samples waren in der Liste nicht korrekt. Deshalb kam am letzten Tag meines Uniaufenthaltes in Frankfurt nur Mist aus der Mühle.(Ihr erinnert Euch). Tja, jetzt könnte man eigentlich was hören, wenn nicht mal WIEDER neue Probleme aufgetaucht wären. Alles andere hätte mich auch gewundert.
Das Problem liegt darin, daß, wenn ich die Liste mit den Sampleinformationen in das Programm einlesen will, welches dann die Samples neu zusammenschneidet, dann ließt das Programm die ersten 250 Strukturen der Liste sauber ein, und dann bricht es ab. Ich habe schon alle möglichen Prameter "hochgeschraubt", so daß es nicht an zu kleinen allokierten Speichern liegen "könnte". Dieses Problem zieht sich durch die ganzen Programme hier. Mein Counterprogramm für die Budapester Arbeitsgruppe hat ein ähnliches Problem. Es ließt 350.000 Wörtkombinationen ein, und dann bricht es einfach ab, obwohl die Texte, aus welchen das Programm seine Wörter zieht, gleich sind. Wenn jemand eine Idee hat, an was es liegen könnte, dann lasse er es mich wissen.
Die Jungs hier an der Uni konnten mir eine mögliche Ursache auf die Schnelle auch nicht sagen.
Ich habe hier mal den Sourcecode des Schneideprogramms niedergelegt, vielleicht sieht ja das geübte Auge einen Fehler.
Ich habe hier einen Auszug aus der Liste niedergelegt, welche das Programm einlesen soll.
Die erste Zahl gibt den Wert der Einträge an, im Programm i genannt.
16245
Die 8781 10603 w
Bremsen 10603 18191 w
quietschen 18191 26227 w
gräßlich 26227 37423 w
d 8781 9699 p
i: 9699 10603 p
b 10603 11518 p
r 11518 12793 p
E 12793 14111 p
.
.
.
19.04.00
Ich habe in den letzten Wochen ein Programm verfasst, welches Wortverknüpfungen in Text-Dateien
zählt, also wie oft eine Wortkombination wie z.B. "ich gehe" in Texten vorkommt. Diese Informationen werden dann in einer Liste abgespeichert, in der die Verknüpfung und die Anzahl der Vorkommnisse steht.
Dieses Programm
steht in einer voläufigen Beta Version unter "Kreatives" zum Download bereit. Dort erfahrt ihr auch mehr über den Gebrauch des Programms. Das Problem ist im Moment die Datenmenge, welche dieses Programm bearbeiten muß, denn es soll ungefähr 1.000.000 Wörter zählen.
Das Program muß alle vorhergegangenen Einträge durchsuchen, ob die Kombination schon vorhanden ist. Für die ersten Wörter ist das auch kein Problem, aber dieser Vorgang wird immer langsamer, da die Liste, welche durchsucht werden muß, immer länger wird. Und ab 100.000 Einträgen wird es dann schon kritisch, denn es sollen ja noch 900.000 Wörter folgen.
Das Programm dokummentiert dieses, den es ist ein Zeitzähler mit eingebaut, der nach jeder durchsuchten Datei angibt, wie lange es dauerte, eine Wortkombination zu verarbeiten. Zusätzlich ist die Gesammtzeit dieses Vorgangs (also Zeit / Datei) angegeben.
Wie die konkete Lösung dieses Problems aussieht, weiß ich noch nicht, allerdings gibt es schon einige Lösungsansätze (schnellerer Rechner, z.B. ;-) ).