This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Simon-listens: Neues Kommando erstellen.

Tags: None
(comma "," separated)
Tester 02ah
Registered Member
Posts
11
Karma
0
OS
Hallo zusammen,

Ich habe Simon v.3.75 installiert. Eingerichtet wurden das adaptierte Basismodell von Voxforge und das empfohlene HADIFIX BOMP Wörterbuch.
Anschließend hatte ich deutsche Szenarien installiert. Nun wollte ich im Szenario Amarok das Kommando "Musik Pegel rauf" bzw "Musik Pegel runter" vereinfachen in "Musik lauter" und "Musik leiser". Dazu, dachte ich zumindest, müsste ich erstmal die Wörter "leiser" und "lauter" zum aktiven Wörterbuch hinzufügen. Um ein funktionierendes Kommando erzeugen zu können, müssen doch zunächst die benötigten Terminale als Satz in die Grammatik aufgenommen werden, oder? Deshalb habe ich versucht die neuen Wörter in das Terminal "Richtung" aufzunehmen. Das scheiterte. Anschließend habe ich versucht die neuen Wörter in ein neues Terminal ("Laut") aufzunehmen.Das funktioniert auch nicht.
Die Fehlermeldung ist in beiden Fällen die selbe, ..."missing phones" (siehe unten [1]). Was kann oder muss ich jetzt tun um die Kommandos "Musik lauter" u. "Musik leiser" zu erstellen?

Grüße
Tester ...

--

1: Die Fehlermeldung
Code: Select all
ERROR: Error in loading model
STAT: include config: /home/****/.kde/share/apps/simond/models/****/active/julius.jconf
STAT: jconf successfully finalized
STAT: *** loading AM00 _default
Stat: init_phmm: Reading in HMM definition
Stat: rdhmmdef: ascii format HMM definition
Stat: rdhmmdef: limit check passed
Stat: check_hmm_restriction: an HMM with several arcs from initial state found: "sp"
Stat: rdhmmdef: this HMM requires multipath handling at decoding
Stat: init_phmm: defined HMMs: 2697
Stat: init_phmm: loading ascii hmmlist
Stat: init_phmm: logical names: 9729 in HMMList
Stat: init_phmm: base phones: 65 used in logical
Stat: init_phmm: finished reading HMM definitions
STAT: making pseudo bi/mono-phone for IW-triphone
Stat: hmm_lookup: 1943 pseudo phones are added to logical HMM list
STAT: *** AM00 _default loaded
STAT: *** loading LM00 _default
STAT: reading [/home/****/.kde/share/apps/simond/models/****/active/model.dfa] and [/home/****/.kde/share/apps/simond/models/****/active/model.dict]...
Error: voca_load_htkdict: line 31: triphone "*-l+aU:" or biphone "l+aU:" not found
Error: voca_load_htkdict: line 31: triphone "l-aU:+t" not found
Error: voca_load_htkdict: line 31: triphone "aU:-t+ah" not found
Error: voca_load_htkdict: the line content was: 10 [lauter] l aU: t ah
Error: voca_load_htkdict: line 32: triphone "z-@+r" not found
Error: voca_load_htkdict: line 32: triphone "@-r+*" or biphone "@-r" not found
Error: voca_load_htkdict: the line content was: 10 [leiser] l aI z @ r
Error: voca_load_htkdict: begin missing phones
Error: voca_load_htkdict: *-l+aU: or biphone l+aU:
Error: voca_load_htkdict: @-r+* or biphone @-r
Error: voca_load_htkdict: aU:-t+ah
Error: voca_load_htkdict: l-aU:+t
Error: voca_load_htkdict: z-@+r
Error: voca_load_htkdict: end missing phones
Error: init_voca: error in reading /home/****/.kde/share/apps/simond/models/****/active/model.dict: 2 words failed out of 99 words
ERROR: failed to read dictionary "/home/****/.kde/share/apps/simond/models/****/active/model.dict"
ERROR: m_fusion: some error occured in reading grammars
bedahr
Moderator
Posts
141
Karma
0
OS
Hallo Tester!

Bitte verwende für deutsche Posts in Zukunft gleich das deutsche Unterforum. Danke.

Zu deinem Problem: Das deutsche Akustikmodell ist leider sehr, sehr limitiert in Umfang und Erkennungsrate. Es deckt schlichtweg nicht genügend Phoneme ab um in der Praxis gut zu funktionieren. Das Szenario für Amarok wurde zunächst natürlich auch für "lauter" und "leiser" entwickelt musste dann aber auf "Pegel rauf" und "Pegel runter" vereinfacht werden weil die Phoneme von "lauter" "leiser" eben nicht abgedeckt waren.

Wir arbeiten aber an besseren deutschen Sprachmodellen die wir hoffen demnächst zur Verfügung stellen zu können.

In der Zwischenzeit empfehle ich in solchen Fällen ein "Benutzergeneriertes" Modell zu verwenden. Hier wird gar kein Basismodell benötigt und man ist in der Wahl der Phonetik komplett frei.

Lg,
Peter
Tester 02ah
Registered Member
Posts
11
Karma
0
OS
Hallo Peter,

danke für die Erläuterungen.
Ich habe nun versucht mit dem Benutzergenerierten Modell weiter zu machen. Zunächst habe ich alle Szenarien bis auf Standard deaktiviert. Ich habe Wörter erstellt und trainiert. Dann habe ich die Grammatik definiert. Aber dabei gab es die unten stehende Fehlermeldung. OK dachte ich, dann trainiere ich nochmal die ganzen Sätze. Das habe ich auch getan. Mit dem Abschluss des Trainings kommt dann auch jedes mal diese Fehlermeldung. Meine Wörter haben mittlerweile eine Erkennungsrate von 11 bis 81. Woher kommt diese Fehlermeldung?

Liegt es am HTK?


Leider, gibt es folgende Meldung :

"As the server compiled the model the following error occurred:
No training material available.

Please train your acoustic model by recording samples."

Im Detail:
Code: Select all
Generating hmm0...
"/home/****/bin/htk-3.4/bin/HCompV" -A -D -T 1 -C "/usr/share/kde4/apps/simon/scripts/config" -f 0.01 -m -S "/tmp/kde-****/simond/default/compile//train.scp" -M "/tmp/kde-****/simond/default/compile//hmm0/" "/usr/share/kde4/apps/simon/scripts/proto"
/home/****/bin/htk-3.4/bin/HCompV -A -D -T 1 -C /usr/share/kde4/apps/simon/scripts/config -f 0.01 -m -S /tmp/kde-****/simond/default/compile//train.scp -M /tmp/kde-****/simond/default/compile//hmm0/ /usr/share/kde4/apps/simon/scripts/proto

HTK Configuration Parameters[10]
Module/Tool Parameter Value
# NUMCEPS 12
# CEPLIFTER 22
# NUMCHANS 26
# PREEMCOEF 0.970000
# USEHAMMING TRUE
# WINDOWSIZE 250000.000000
# SAVEWITHCRC TRUE
# SAVECOMPRESSED TRUE
# TARGETRATE 100000.000000
# TARGETKIND MFCC_0_D_A

Calculating Fixed Variance
HMM Prototype: /usr/share/kde4/apps/simon/scripts/proto
Segment Label: None
Num Streams : 1
UpdatingMeans: Yes
Target Direct: /tmp/kde-****/simond/default/compile//hmm0/

ERROR [+2019] HCompV: Training data file name expected
FATAL ERROR - Terminating program /home/****/bin/htk-3.4/bin/HCompV

bedahr
Moderator
Posts
141
Karma
0
OS
Hm, interessante Situation.

Mehr Trainingsdaten brauchst du fürs erste einmal sicher nicht.

Könntest du mal folgende Files auf pastebin.com stellen?
/tmp/kde-****/simond/default/compile//train.scp
/home/****/.kde4/share/apps/simon/model/prompts
/home/****/.kde4/share/apps/simon/scenarios/general

Danke.

Lg,
Peter
Tester 02ah
Registered Member
Posts
11
Karma
0
OS
Hallo Peter,

den ".kde4" Ordner finde ich nur unter /usr/share/.
Hier, im Verzeichnis /usr/share/.kde4/apps/simon/, gibt es im Ordner model eine Datei prompts und im Ordner szenarios eine Datei general. Beide Dateien sind leer.

In meinem "home" Verzeichnis gibt es nur den ".kde" Ordner (keinen ".kde4" Ordner).
Die Dateien /home/****/.kde/apps/simon/model/prompts und /home/****/.kde/apps/simon/general enthalten Daten und sind bei Pastebin gepostet.

http://pastebin.com/WrwGxCqK (prompts)
http://pastebin.com/P7yVgSgb (general)

Die Datei /tmp/kde-****/simond/default/compile//train.scp ist leer.

Ich habe nochmals einen neuen Benutzer angelegt und versucht das Standard-Szenario alsauch ein neues "Demo"-Scenario mit nur drei Wörtern zu synchronisieren. Aber, wie vorher, bekomme ich direkt nach dem Training die geschilderte Fehlermeldung.

Bei der Gelegenheit wollte ich auch gleich mal bei HTK nach einer anderen HTK Version schauen, aber die Seite htk.eng.cam.ac.uk/download.shtml schein z.Z. down zu sein.

Viele Grüße
Tester
Tester 02ah
Registered Member
Posts
11
Karma
0
OS
Nachtrag 1:

beim Durchschauen der Fehlerausgabe ist mir aufgefallen, dass HCopy ($HCopy -A -D -T 1 -C wav_config -S codetrain.scp) gar nicht ausgeführt wird. Muss das so sein?

Die codetrain.scp, codetrain0.scp und codetrain1.scp sind unter "/tmp/kde-****/simond/default/compile/" angelegt, enthalten aber keine Daten.

Zumindest im Linux Tutorial unter http://www.voxforge.org würde dieser Schritt vor HCompV anstehen.

Hier nochmal die vollständige Fehlerausgabe: http://pastebin.com/EADbg2y4
bedahr
Moderator
Posts
141
Karma
0
OS
Hallo Tester,

Erstmal Danke für dein tolles Feedback im Forum hier und deine Hilfe bei der Fehlersuche. Habe jetzt mal eine Weile herumprobiert und konnte das Problem reproduzieren und isolieren.

Da ich den Eindruck habe, dass du technisch doch sehr versiert bist und dich die Materie auch interessiert dachte ich mir, ich fasse das Problem kurz zusammen. Wenn dich das nicht interessiert, einfach die nächste Sektion überspringen - die Lösung steht am Ende des Posts.


Das Problem: Beim Synchronisieren werden unter anderem auch die Samples vom Client zum Server geschickt. Das geschieht mit einem speziellen Request der ganz einfach so aufgebaut ist:
<request id (32 bit)> <length of body (64 bit)> <body (sample)>
Das Senden erfolgt dann also so:
1. Sende Request
2. Sende Länge des bodys (Länge des samples)
3. Sende das Sample

Leider hängt der verwendet Netzwerkabstraktionslayer in diesem Fall nochmal eine eigene Längenbegrenzung dazu - nämlich einen 32 bit Header im Sample (der die Länge der Daten beinhaltet). Deshalb hat die angegebene Länge des Samples (im zweiten Feld) nicht mehr gepasst - der tatsächliche Request hat so ausgeschaut:
<request id (32 bit)> <length of body (64 bit)> <length of sample (32 bit)> <sample>

Das bedeutet, dass die Synchronisation beim ersten Sample schlichtweg 32 Bit abgeschnitten hat. Wirkliche Probleme gab es aber danach: Die überstehenden 32 Bit wurden dann natürlich als der nächste "Request" interpretiert. Trifft das zufällig eine tatsächlich vergebene Requestnummer liefert das natürlich komplett unverhergesehene Folgen.

Zusammengefasst: Du hast einen Bug in der Synchronisation gefunden.


Die Lösung: Update deinen simon Checkout bitte auf die aktuelle Entwicklerversion und kompiliere / installiere es erneut. Dann musst du die zuvor synchronisierten Samples vom Server löschen damit diese erneut übertragen werden: Dazu einfach die Dateien aus ~/.kde/share/apps/simond/models/default/samples/ löschen. Um die Synchronisation danach erneut zu triggern führ am besten noch ein Training - dabei werden dann auch alle vorher aufgenommenen Samples mit übertragen.

Nochmals danke für deine Hilfe!

Lg,
Peter
Tester 02ah
Registered Member
Posts
11
Karma
0
OS
Hallo Peter,

das Ergebnis kam für mich eher unverhofft! Ich dachte schon durch meine "Rumprobiererei" habe ich irgend eine Komponente zerschossen. ;) Ich verstehe das Grundlegendste vom Programmieren und weiß prinzipiell, was Du mit der Erklärung meinst.

Da bin ich aber erleichtert. Die neue Version lad ich mir gleich mal herunter und teste weiter. Ich helfe gerne weiter --> falls mir wieder einmal in Bug über den Weg läuft ;D

Viele Grüße
Tester


Bookmarks



Who is online

Registered users: bartoloni, Bing [Bot], Google [Bot], Sogou [Bot], Yahoo [Bot]