Institut

Studium

Forschung


 

 Automatisches Segmentieren von Sprachsignalen 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ösisch Phoneme datei.phones, datei.phonemic, datei.phoneswithQ
Deutsch, Englisch, Französisch Wörter datei.words
Deutsch, Englisch Silben datei.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:

  • Keine Sonderzeichen in der Textdatei. Umlaute und ß sind mittlerweile erlaubt.
  • Achtung, die Textdatei muss iso-8859-1 kodiert sein.
  • Es ist wichtig, dass die Dateistämme bei Signaldatei und Textdatei immer gleich sind.
  • Abtastrate des Sprachsignals muß 16 kHz sein, außerdem sollte es nur einen Kanlal enthalten (mono)!
    Umwandeln z.B. mit sox -V datei.48kHz.wav -r 16000 -t wav datei.16kHz.wav remix -
    Dieser Befehl erzeugt aus datei.48kHz.wav eine neue mono Datei datei.16kHz.wav mit Abtastrate 16 kHz.
  • Bei den Dateien darf es sich nicht um symbolische Links handeln!

 

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
(in tcsh Shells)


oder

export ALANG=fra
(in bash Shells - diese sind mittlerweile am IMS der Default).

Soll anschließend wieder mit deutschen Daten gearbeitet werden, benötigt man entweder
unsetenv ALANG oder setenv ALANG deu (in einer tcsh) or export ALANG=deu (in der bash).

Der Aligner läuft auf allen Linux-Rechnern.

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:

  • Sind die Audiodaten mit 16 kHz abgetastet?
    (z.B. sfinfo datei.wav, siehe Punkt Sampling Rate.)
  • Handelt es sich um das korrekte Audioformat (WAV bei Endung .wav usw.)
    (evtl. hier ebenfalls sfinfo datei.wav )

Falls die Probleme bestehen, bitte die Variable KEEPALIGNERTMPFILES setzen:

setenv KEEPALIGNERTMPFILES
(falls tcsh Shell)

oder

export KEEPALIGNERTMPFILES=1
(falls bash Shell).

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 in tcsh bzw. export KEEPALIGNERTMPFILES="" in bash) und die Files in /tmp von Hand löschen!!

4. FAQ (Quelle: Markus 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. Fragen, Probleme oder Kommentare?

Mail an Antje Schweitzer