Automatisches Segmentieren von Spachsignalen mit dem Aligner

0. Allgemeines

Sprachsignale können mit den Aligner-Tools derzeit in folgenden Sprachen auf folgenden Ebenen annotiert werden:

Sprachen Ebene zu erzeugende Dateien
Deutsch, Englisch, FranzösischPhonemedatei.phones, datei.phonemic, datei.phoneswithQ
Deutsch, Englisch, FranzösischWörterdatei.words
Deutsch, EnglischSilbendatei.syllables

Auf Phonem- und Wortebene kann es bei größeren Signaldateien, insbesondere bei der Phonem-Erzeugung,
zu beträchtlichen Laufzeiten kommen.


1. Vorbereitung der Daten

Für das Alignment werden zwei Dateien benötigt: die Sprachsignaldatei (datei.sd oder datei.wav) und ein
Textfile (datei.txt), das die Verschriftung des Sprachsignals enthält. Das Textfile ist nicht Teil der Parameterliste,
die der Aligner übergeben bekommt, es wird aber erwartet, dass es im gleichen Verzeichnis wie datei.sd steht.
Existiert kein derartiges Textfile, wird das Sprachsignal in einer Endlosschleife solange vorgespielt, bis der Text
dann eingetippt ist. Das ist bei ganz kurzen Beispielen durchaus vorteilhaft, kann aber bei langen Sprachsignalen
sehr lästig werden.

Wichtig:


2. Benutzung des Aligners

Falls es sich nicht um deutsche Sprachdaten handelt, muss zunächst die Variable ALANG gesetzt werden,
und zwar auf eng für englische und auf fra für französische Daten, z.B.:

setenv ALANG fra

Soll anschließend wieder mit deutschen Daten gearbeitet werden, benötigt man entweder
unsetenv ALANG oder setenv ALANG deu.

Der Aligner läuft auf den meisten Linux-Rechnern (Studenten und Mitarbeiter).
Ausnahmen: pinguin, felsenpinguin

 Mit den folgenden Programmaufrufen werden die jeweiligen Annotationsebenen erzeugt:

Phonemebene:

Alignphones datei.sd

Wortebene:

Alignwords datei.sd

Silbenebene ($-Notation):

phonemic2syl datei.phonemic datei.syl

Silbenebene (Silben-Notation):
 
 
 

phonemic2syllables datei.phonemic datei.syllables
Hinweis: die Phoneme im Silbennamen können von denen
im Phones-Labelfile abweichen, da sie auf der kanonischen
Transkription basieren.
3. Probleme

Folgende Fehlermeldungen sind harmlos und können ignoriert werden:
WARNING [-3132] ConvertHParseNetwork: Dict. would be empty: not written in HParse
WARNING [-6553]  LoadESPSLabels: time stamps out of order. in HLEd

Falls sonst Probleme auftauchen, bitte folgende Punkte nochmal überprüfen:

Falls die Probleme bestehen, bitte die Variable KEEPALIGNERTMPFILES setzen:

setenv KEEPALIGNERTMPFILES

Diese bewirkt, dass die temporär erzeugten Dateien nicht gelöscht werden. Der Aligner gibt am Ende aus,
in welchem Verzeichnis sie gespeichert wurden. Bitte aus dem dort angegeben Verzeichnis die Dateien
transcribed sowie dateiname.htkwords und dateiname.net an mich schicken (s.u., Punkt 5), zusammen mit
dateiname.wav und dateiname.txt sowie möglichst mit der kompletten Ausgabe des Aligners
(also Fehlermeldung sowie vorhergehende Ausgaben). Bitte anschließend die Variable wieder zurücksetzen
(unsetenv KEEPALIGNERTMPFILES) und die Files in /tmp von Hand löschen!!

4. FAQ (Quelle: Marcus Fach)

Fehlermeldung Lösung
HVite: ERROR [+8220]

InitPronHolders: Word ä not defined in dictionary

es sind Zeichen in  der Textdatei, für die keine Modelle vorhanden sind, oder nicht erzeugt werden können.

Abhilfe: Textdatei durchschauen und die Fehler beheben. Typischerweise sind die Fehler nicht geänderte Umlaute, es können aber auch unbekannte Wörter sein (z.B. InlineSkates)



Starting HParse...
HParse: ERROR [+3131]
FindNodeTypes: Different num WD_BEGIN (5063) & WD_END nodes (5046)
bei der Verarbeitung wird vom Aligner eine Grammatik (.net) erzeugt, die allerdings für den normalen Benutzer nicht sichtbar, temporär in /tmp abgelegt wird. Der hier dargestellte Fehler produziert nicht gleich viele WD_BEGIN wie WD_END, d.h. die formale Struktur der Grammatik ist verletzt, die Ursachen hierfür können sehr vielschichtig sein.

Abhilfe: Entweder in $ALIGNERHOME/bin/Aligngeneric ganz unten die entsprechende Zeile zum Löschen des .net auskommentieren oder den Alignvorgang mit Ctrl C unmittelbar nach der Fehlermeldung abbrechen. Das /tmp/*.net editieren und nach dem Fehler suchen (bei welchem Wort ist WD_BEGIN oder WD_END nicht vorhanden?), den Fehler beheben, /tmp/*.net speichern, nochmals alignieren, dann müsste es gehen. Die Lösung ist natürlich nur praktikabel, wenn nur eine Datei aligniert werden soll, bei Massenverabeitung Kontakt mit dem Verantwortlichen aufnehmen.



Bei Kontrolle der alignierten Daten ist in xwaves ein leeres Labelfile zu sehen. liegt wahrscheinlich daran, dass mit xwaves ein Ausschnitt aus einer Datei erzeugt worden ist, der nicht 0 als Startpunkt im Header hat. Folge: alle Labels beginnen bei Null, während das Sprachsignal einen anderen zeitlichen Darstellungsbereich hat.

Kontrolle: Editieren der Labelfiles, erstes Label muss bei Null anfangen.

Abhilfe: das Programm /usr/local/ims/bin/cut4align setzt den Startzeitpunkt im Header des Sprachsignals auf Null.



5. Frage, Probleme oder Kommentare? Mail an Antje Schweitzer


last update Nov 06 2011 as