Dies ist eine Fortsetzung der phonetischen Vorhersage mit dem Microsoft Cognitive Toolkit (CNTK).
In Teil 2 wird die phonetische Vorhersage unter Verwendung der in Teil 1 erstellten Merkmalsmenge und des phonetischen Etiketts durchgeführt. Es wird davon ausgegangen, dass NVIDIA GPU CUDA installiert ist.
In Spracherkennung: Phonemvorhersage Teil1-ATR-Sprachdatensatz finden Sie eine Liste der phonetischen Bezeichnungen und des HTK-Formats aus der ATR-Beispiel-Audiodatenbank [1] Vorbereitete Dateien, Frames und phonetische Beschriftungen.
In Teil 2 werden wir ein phonetisches Vorhersagemodell unter Verwendung eines rekursiven neuronalen Netzwerks (RNN) erstellen und trainieren.
Das Gesamtbild der diesmal implementierten phonetischen Vorhersage ist in der folgenden Abbildung dargestellt. Die Komponenten des rekursiven neuronalen Netzwerks sind LSTM [2] und ein bidirektionales Modell [3], das die Vorwärts- und Rückwärtsausgänge verbindet.
Wenden Sie in jeder Ebene die Ebenennormalisierung [[4]](# Referenz) auf Vorwärts bzw. Rückwärts an, verbinden Sie sich und stellen Sie eine Restverbindung her [[5]](# Referenz) und erstellen Sie bei der letzten vollständigen Verbindung eine phonetische Bezeichnung. Vorhersagen
Für den Anfangswert jedes Parameters verwendeten wir die gleichmäßige Verteilung von Glorot [6].
Wir haben die Connectionist Temporal Classification [7] für die Verlustfunktion verwendet.
Adam [8] wurde als Optimierungsalgorithmus verwendet. Adams Hyperparameter $ \ beta_1 $ werden auf 0,9 und $ \ beta_2 $ auf die CNTK-Standardwerte gesetzt.
Die zyklische Lernrate (CLR) [9] wird als Lernrate verwendet, die maximale Lernrate beträgt 1e-3, die Basislernrate beträgt 1e-5, die Schrittgröße beträgt das 10-fache der Anzahl der Epochen. Die Richtlinie wurde auf triangular2 festgelegt.
Als Maßnahme gegen Überlernen habe ich Dropout [10] bei 0,1 vor der Restverbindung angewendet.
Das Modelltraining führte 100 Epochen durch Mini-Batch-Training durch.
・ CPU Intel (R) Core (TM) i7-7700 3,60 GHz ・ GPU NVIDIA Quadro P4000 8 GB
・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.53 ・ Librosa 0.8.0 ・ Numpy 1.19.2 ・ Pandas 1.1.2 ・ PyAudio 0.2.11 ・ Scipy 1.5.2
Das Schulungsprogramm ist auf [GitHub] verfügbar (https://github.com/sho-watari/SpeechRecognition/tree/master/CTCR).
ctcr_training.py
Ich werde die für diese Implementierung erforderlichen Inhalte ergänzen.
Connectionist Temporal Classification Bei der Spracherkennung unterscheiden sich die Anzahl der Frames von Sprachdaten und die Anzahl der Phoneme, die Sie vorhersagen möchten, häufig. In einem solchen Fall gibt es keine Eins-zu-Eins-Entsprechung zwischen dem RNN-Ausgang und den richtigen Antwortdaten.
Daher folgen durch Einfügen von _ als Leerzeichen die korrekten Antwortdaten aoi dem Pfeilpfad, wie in der folgenden Abbildung gezeigt, und passen die Länge an die Anzahl der Frames an, wie in \ _ \ _ a_o_ \ _ i_ gezeigt.
Die Connectionist Temporal Classification (CTC) trainiert Parameter nach der wahrscheinlichsten Schätzung und berechnet die Wahrscheinlichkeit einer Route, die eine Reihe korrekter Daten liefert, wie in der obigen Abbildung gezeigt. Unter der Annahme, dass die Eingabedatenreihe $ x $ und die korrekte Datenreihe $ l $ ist, wird die Verlustfunktion durch die folgende Formel definiert.
Loss = - \log p(l|x)
Es gibt jedoch zahlreiche Kombinationen von Routen zur Berechnung der Verlustfunktion. Daher wird es effizient unter Verwendung eines Vorwärts-Rückwärts-Algorithmus berechnet, der auf der dynamischen Planungsmethode basiert.
Wie in der folgenden Abbildung gezeigt, wird hier die Summe der Wahrscheinlichkeiten von $ \ pi $, einer Menge von Routen, die zum Zeitpunkt $ t $ die Reihe $ s $ erreichen, als Vorwärtswahrscheinlichkeit bezeichnet und durch die folgende Formel ausgedrückt.
\alpha_t (s) = \sum_{s \in \pi} \prod^t_{i=1} y^i_s
Diese positive Wahrscheinlichkeit $ \ alpha_t (s) $ kann basierend auf dem Konzept der dynamischen Planung rekursiv und effizient berechnet werden.
\left\{
\begin{array}{ll}
\alpha_1(1) = y^1_1 \\
\alpha_t(s) = (\alpha_{t-1} (s-1) + \alpha_{t-1} (s)) y^t_s
\end{array}
\right.
In ähnlicher Weise ist die Rückwärtswahrscheinlichkeit $ \ beta_t (i) $, wie unten gezeigt, wie folgt definiert.
\beta_t(s) = \sum_{s \in \pi} \prod^T_{i=s} y^i_s
Diese Rückwärtswahrscheinlichkeit $ \ beta $ kann auf dieselbe Weise wie die Vorwärtswahrscheinlichkeit $ \ alpha $ rekursiv und effizient berechnet werden.
\left\{
\begin{array}{ll}
\beta_T(S) = 1 \\
\beta_t(s) = (\beta_{t+1} (s+1) + \beta_{t+1} (s)) y^{t+1}_s
\end{array}
\right.
Dann ist die Wahrscheinlichkeit auf allen Routen $ \ alpha_t (s) \ beta_t (s) $, und die Verlustfunktion ist wie folgt.
Loss = - \log \sum^S_{s=1} \alpha_t(s)\beta_t(s)
Dieses Mal habe ich den Bearbeitungsabstand als Leistungsbewertungsindex des Modells verwendet. Die Bearbeitungsentfernung, auch als Levenstein-Entfernung bezeichnet, ist die Mindestanzahl von Einfüge-, Lösch- und Ersetzungsvorgängen.
Beispielsweise beträgt der Bearbeitungsabstand zwischen der Zeichenfolge akai und der Zeichenfolge aoi
・ Lösche k von akai -Ersetzen Sie a in aai durch o
Wird durch die Operation erhalten. Der Bearbeitungsabstand kann mithilfe einer Tabelle berechnet werden, zu deren Beginn ein Leerzeichen hinzugefügt wird (siehe Abbildung unten).
Suchen Sie zunächst die Bearbeitungsabstände für die erste Zeile und die erste Spalte, wie durch den blauen Pfeil in der folgenden Abbildung dargestellt. Dies entspricht dem Leerzeichen _ und der Länge der Zeichenfolge zu jedem Zeitpunkt.
Geben Sie als Nächstes den kleinsten der folgenden Werte in der Reihenfolge von oben links ein, wie durch den grünen Pfeil dargestellt.
・ Ein Wert plus eins ・ Eins links plus eins -Der Wert oben links plus 1 (wenn jedoch die Zeichen in Zeilen- und Spaltenrichtung identisch sind, wird 1 nicht hinzugefügt)
Der unten rechts rot dargestellte Wert ist der zu berechnende Bearbeitungsabstand.
Training loss and error Die folgende Abbildung zeigt die Verlustfunktion und die Protokolle der falschen Erkennungsrate während des Trainings. Das Diagramm links zeigt die Verlustfunktion, das Diagramm rechts zeigt den Bearbeitungsabstand, die horizontale Achse zeigt die Anzahl der Epochen und die vertikale Achse zeigt den Wert bzw. den Bearbeitungsabstand der Verlustfunktion.
Validation error Wenn die Leistung unter Verwendung der Verifizierungsdaten bewertet wurde, die bei der Erstellung der Daten in Teil 1 getrennt wurden, wurden die folgenden Ergebnisse erhalten.
Validation Error 40.31%
Das Ergebnis der phonetischen Vorhersage für die aufgezeichnete Stimme der eigenen Sprache ist unten gezeigt. Äußerung war ein "Hallo".
Say...
Record.
['sil', 'h', 'o', 'h', 'i', 'cl', 'ch', 'i', 'e', 'o', 'a', 'sil']
Da das phonetische Element während der Inferenz für jeden Rahmen ausgegeben wird, ist das Ergebnis der Vorhersage des phonetischen Elements das Ergebnis des Entfernens der Redundanz kontinuierlicher phonetischer Elemente und des Leerzeichens _.
Die Vokale scheinen fast korrekt zu sein, aber die Konsonanten scheinen nur mit 'ch' zu funktionieren.
CNTK 208: Training Acoustic Model with Connectionist Temporal Classification (CTC) Criteria
Speech Recognition : Phoneme Prediction Part1 - ATR503 Speech dataset
Recommended Posts