Week 10 + Week 11 (ASR - German)

5 minute read

Link to Repository of Code

Describe my work briefly

I am happy to update on my Week 10 and Week 11 progress. This period was the most exciting. I spent time training and evaluating the model and finally running it on CASE HPC.

Training

This was the most crucial part. I arranged all the modules, namely, MFCC Features, Acoustic Model and Language Model and tested the sequence on a smaller dataset, before putting the model on training on the complete data. The training took around nine days to complete, and finally, it was 100%.

[steps/nnet3/chain/train.py:519 - train - INFO ] Iter: 5478/5483   Jobs: 1   Epoch: 4.00/4.0 (99.9% complete)   lr: 0.000100   shrink: 0.99799
[steps/nnet3/chain/train.py:519 - train - INFO ] Iter: 5479/5483   Jobs: 1   Epoch: 4.00/4.0 (99.9% complete)   lr: 0.000100   shrink: 0.99800
[steps/nnet3/chain/train.py:519 - train - INFO ] Iter: 5480/5483   Jobs: 1   Epoch: 4.00/4.0 (99.9% complete)   lr: 0.000100   shrink: 0.99800
...
[steps/nnet3/chain/train.py:519 - train - INFO ] Iter: 5483/5483   Jobs: 1   Epoch: 4.00/4.0 (100.0% complete)   lr: 0.000100   shrink: 0.99800
[steps/nnet3/chain/train.py:575 - train - INFO ] Doing final combination to produce final.mdl

Results

Here are some of the results I obtained after training the model. These results are based on best_wer file generated by Kaldi.

Word Error Rate vs Training Stages

Percentage of Deletion, Insertion and Subsitution Error across different Training Stages

%WER 58.10 [ 38790 / 66768, 1903 ins, 16466 del, 20421 sub ] [PARTIAL] exp//tri1/decode_dev_nosp/wer_10_0.0
%WER 61.21 [ 42600 / 69600, 1981 ins, 18961 del, 21658 sub ] [PARTIAL] exp//tri1/decode_test_nosp/wer_10_0.0
%WER 57.75 [ 38560 / 66768, 1614 ins, 18899 del, 18047 sub ] [PARTIAL] exp//tri2/decode_dev_nosp/wer_10_0.0
%WER 59.67 [ 41528 / 69600, 2130 ins, 18606 del, 20792 sub ] [PARTIAL] exp//tri2/decode_test_nosp/wer_9_0.0
%WER 28.85 [ 19261 / 66768, 3215 ins, 2902 del, 13144 sub ] [PARTIAL] exp//tri3/decode_dev_nosp/wer_14_0.0
%WER 28.08 [ 18750 / 66768, 3345 ins, 2516 del, 12889 sub ] [PARTIAL] exp//tri3/decode_dev_pron/wer_13_0.5
%WER 29.56 [ 20572 / 69600, 3568 ins, 2894 del, 14110 sub ] [PARTIAL] exp//tri3/decode_test_nosp/wer_13_0.0
%WER 29.14 [ 20279 / 69600, 3557 ins, 2696 del, 14026 sub ] [PARTIAL] exp//tri3/decode_test_pron/wer_13_0.5
%WER 23.44 [ 15653 / 66768, 3164 ins, 1976 del, 10513 sub ] [PARTIAL] exp//tri4_cleaned/decode_dev/wer_14_0.5
%WER 31.36 [ 20941 / 66768, 3578 ins, 2911 del, 14452 sub ] [PARTIAL] exp//tri4_cleaned/decode_dev.si/wer_13_0.5
%WER 24.86 [ 17305 / 69600, 3544 ins, 1996 del, 11765 sub ] [PARTIAL] exp//tri4_cleaned/decode_test/wer_13_0.5
%WER 31.90 [ 22202 / 69600, 3858 ins, 2984 del, 15360 sub ] [PARTIAL] exp//tri4_cleaned/decode_test.si/wer_13_0.5
%WER 24.08 [ 16075 / 66768, 3463 ins, 1819 del, 10793 sub ] [PARTIAL] exp//tri4/decode_dev_pron/wer_14_0.5
%WER 35.20 [ 23504 / 66768, 4244 ins, 3034 del, 16226 sub ] [PARTIAL] exp//tri4/decode_dev_pron.si/wer_14_0.5
%WER 25.50 [ 17745 / 69600, 3879 ins, 1855 del, 12011 sub ] [PARTIAL] exp//tri4/decode_test_pron/wer_13_0.5
%WER 35.44 [ 24668 / 69600, 4759 ins, 2898 del, 17011 sub ] [PARTIAL] exp//tri4/decode_test_pron.si/wer_13_0.5
%WER 14.61 [ 9758 / 66768, 2517 ins, 884 del, 6357 sub ] [PARTIAL] exp//chain_cleaned/tdnn1f_2048_sp_bi/decode_dev/wer_12_1.0
%WER 15.62 [ 10871 / 69600, 2746 ins, 865 del, 7260 sub ] [PARTIAL] exp//chain_cleaned/tdnn1f_2048_sp_bi/decode_test/wer_11_1.0

Some Audio Clips and Results

[DE_01_Male]

$ Actual: Gerrit erinnerte sich daran dass er einst einen Eid geschworen hatte
$ Output: Garrett erinnerte sich daran dass er einst einen Eid geschworen hatte

[DE_02_Male]

$ Actual: Wenn man schnell fährt ist man von Emden nach Landshut nicht lange unterwegs
$ Output: Weil man schnell fährt ist man von Emden nach Landshut nicht lange unterwegs

[DE_03_Male]

$ Actual: Valentin hat das Handtuch geworfen
$ Output: Valentin hat das Handtuch geworfen

[DE_04_Male]

$ Actual: Auf das was jetzt kommt habe ich nämlich absolut keinen Bock
$ Output: Auf das was jetzt kommt habe ich nämlich absolut keinen Bock

[DE_05_Male]

$ Actual: Ich könnte eine Mitfahrgelegenheit nach Schweinfurt anbieten
$ Output: Ich könnte eine Mitfahrgelegenheit nach Schweinfurt anbieten

[DE_06_Male]

$ Actual: Man sollte den Länderfinanzausgleich durch einen Bundesligasoli ersetzen
$ Man sollte den Länderfinanzausgleich durch ein Bundesliga Soli ersetzen

[DE_07_Male]

$ Actual: Von Salzburg ist es doch nicht weit bis zum Chiemsee
$ Output: Von Salzburg ist es doch nicht weit Bistum Chiemsee

[DE_08_Male]

$ Actual: Selbst für den erfahrensten Chirurgen ist der Tumor eine knifflige Herausforderung
$ Output: Selbst für den erfahrensten Chirurgen ist der Tumor eine knifflige raus Federung

[DE_09_Male]

$ Actual: Folgende Lektüre kann ich ihnen zum Thema Kognitionspsychologie empfehlen
$ Output: Folgende Lektüre kann ich ihn zum Thema Kognitionspsychologie empfehlen

[DE_10_Male]

$ Actual: Warum werden da keine strafrechtlichen Konsequenzen gezogen
$ Output: Warum werden da keine strafrechtlichen Konsequenzen gezogen

[DE_11_Female]

$ Actual: Cedrik selbst wußte kein Sterbenswörtchen davon nie war etwas Derartiges in seiner Gegenwart auch nur erwähnt worden
$ Output: Drake selbst wusste kein Sterbenswörtchen davon nie war etwas Derartiges in seiner Gegenwart auch nur erwähnt worden

[DE_12_Female]

$ Actual: Dann wachsen die Haselsträucher und die Kletterrosen so dicht an den Mauern, daß man vor lauter Grün nicht in die Fenster sehen kann, trotzdem sie ganz niedrig liegen
$ Output: Dann wachsen die Haselsträucher und die Kletterrosen so dicht an den Mauern dass man vor lauter grün nicht in die Fenster sehen kann. Dem sie ganz niedrig liegen.

[DE_13_Female]

$ Actual: Durch das grüne Tal windet sich das murmelnde Flüßchen, aus allen Gärten und Baumhainen lugen die schmucken Landhäuser und locken die weißgedeckten Tische der freundlichen Wirte
$ Output: Durch das grüne Tal windet sich das murmelnde Flüsschen aus allen Gärten und Baumhainen Logen die schmucken Landhäuser und locken die weißgedeckten Tische der freundlichen Wirte

Challenges

On close observation of the decoded transcripts, my mentor Dr. Jan Gorisch identified a few challenges, which are specific to German.

Homonymes, i.e., same sounds but different spelling and meaning.

Example:

statt
Stadt

das
dass

German Morphology (word combinations)

Example:

Wettbewerbsumfeld
Wettbewerbs Umfeld     

Hörverstehensteil
Hörverstehen steil      

Plural (sounds in some cases very similar to the singular, but is spelled differently)

Example:

Kontamination
Kontaminationen

Prüfungsleistung 
Prüfungsleistungen

CASE HPC

One of the critical tasks was to run the model on CASE HPC using Singularity. This was almost as challenging as training the model. I even reported a BUG. I am thankful to the Standford team for fixing it in overnight. Singularity is based on the same concept of Docker, but it doesn’t provide root. Singularity offers an environment to hold all the dependencies. Singularity documentation helped to learn most of the concepts. The below image enabled me to understand Singularity.

I created a Singularity file at GitHub, that gets automatically build at Singularity Hub on every commit. The image can be pulled from Singularity Hub, and code can be run inside it.

$ module pull singularity
$ singularity pull --name kaldi_de.img shub://AASHISHAG/asr-german
$ singularity shell -e -H `pwd` singularity-images/kaldi_de.sif

The model is working as expected in Singularity. Next, I will create the German Speech Pipeline and format the transcripts in Red Hen’s Data Format and document all my work. I hope you enjoyed reading my blogs!!

Others

Tags: ,

Categories:

Updated:

Leave a Comment