
Warum interessiere ich mich (und ich hoffe Sie) für Spracherkennung? Erstens ist diese Richtung eine der beliebtesten im Vergleich zu anderen Aufgaben der Computerlinguistik, da die Spracherkennungstechnologie mittlerweile fast überall eingesetzt wird - von der Erkennung eines einfachen Ja / Nein im automatischen Callcenter der Bank bis zur Unterstützung von „Small Talk“ "Smart Column" wie "Alice". Zweitens ist es für ein Spracherkennungssystem von hoher Qualität erforderlich, die effektivsten Werkzeuge zum Erstellen und Konfigurieren eines solchen Systems zu finden (dieser Artikel ist einem dieser Werkzeuge gewidmet). Das zweifelsohne „Plus“ bei der Auswahl einer Spezialisierung auf dem Gebiet der Spracherkennung ist für mich persönlich, dass für die Forschung auf diesem Gebiet sowohl Programmierer- als auch Sprachkenntnisse erforderlich sind. Dies ist sehr anregend und zwingt dazu, Wissen in verschiedenen Disziplinen zu erwerben.
Warum gibt es Kaldi schließlich andere Rahmenbedingungen für die Spracherkennung?
Um diese Frage zu beantworten, sollten die vorhandenen Analoga und die von ihnen verwendeten Algorithmen und Technologien berücksichtigt werden (die in Kaldi verwendeten Algorithmen werden im Artikel weiter beschrieben):
- CMU Sphinx
CMU Sphinx (nicht zu verwechseln mit der Sphinx-Suchmaschine!) Ist ein Spracherkennungssystem, das von Entwicklern der Carnegie Mellon University entwickelt wurde und aus verschiedenen Modulen zum Extrahieren von Sprachfunktionen, zur Spracherkennung (einschließlich auf Mobilgeräten) und zum Training für eine solche Erkennung besteht. CMU Sphinx verwendet versteckte Markov-Modelle auf der Ebene der akustisch-phonetischen Erkennung und statistische N-Gramm-Modelle auf der Ebene der sprachlichen Erkennung. Das System verfügt außerdem über eine Reihe interessanter Funktionen: Erkennung langer Sprache (z. B. Transkripte oder Tonaufnahmen eines Interviews), Verbindung eines großen Wörterbuchs mit Hunderttausenden von Wortformen usw. Es ist wichtig zu beachten, dass sich das System mit jeder Version ständig weiterentwickelt, Erkennungsqualität und Leistung verbessert werden . Es gibt auch plattformübergreifende und praktische Dokumentation. Unter den Minuspunkten bei der Verwendung dieses Systems ist es möglich, die Unfähigkeit, CMU Sphinx "out of the box" zu starten, herauszustellen, weil Selbst die Lösung einfacher Probleme erfordert Kenntnisse über die Anpassung des akustischen Modells, auf dem Gebiet der Sprachmodellierung usw. - Julius
Julius wird seit 1997 von japanischen Entwicklern entwickelt. Jetzt wird das Projekt vom Advanced Science, Technology & Management Research Institute in Kyoto unterstützt. Das Modell basiert auf N-Gramm und kontextsensitiven Hidden-Markov-Modellen. Das System kann Sprache in Echtzeit erkennen. Die Nachteile sind die Verteilung nur für das japanische Sprachmodell (obwohl es ein VoxForge-Projekt gibt, das akustische Modelle für andere Sprachen erstellt, insbesondere für die englische Sprache) und das Fehlen stabiler Aktualisierungen. - RWTH ASR
Das Modell wurde seit 2001 von Spezialisten der Technischen Universität Rhein-Westfalen entwickelt und besteht aus mehreren in C ++ geschriebenen Bibliotheken und Werkzeugen. Das Projekt umfasst auch Installationsdokumentation, verschiedene Trainingssysteme, Vorlagen, akustische Modelle, Sprachmodelle, Unterstützung für neuronale Netze usw. Gleichzeitig ist der RWTH ASR praktisch plattformübergreifend und hat eine niedrige Geschwindigkeit. - Htk
HTK (Hidden Markov Model Toolkit) ist eine Reihe von Spracherkennungswerkzeugen, die 1989 an der Universität Cambridge entwickelt wurden. Das Toolkit, das auf versteckten Markov-Modellen basiert, wird am häufigsten als zusätzliches Tool zum Erstellen von Spracherkennungssystemen verwendet (dieses Framework wird beispielsweise von Julius-Entwicklern verwendet). Trotz der Tatsache, dass der Quellcode öffentlich verfügbar ist, ist die Verwendung von HTK zum Erstellen von Systemen für Endbenutzer durch die Lizenz verboten, weshalb das Toolkit derzeit nicht beliebt ist. Das System hat auch eine relativ niedrige Geschwindigkeit und Genauigkeit.
In dem Artikel „Vergleichende Analyse von Open-Source-Spracherkennungssystemen“ (
https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ) wurde eine Studie durchgeführt, in der alle durchgeführt wurden Die Systeme wurden in einem englischsprachigen Fall (160 Stunden) geschult und in einem kleinen 10-Stunden-Testfall angewendet. Als Ergebnis stellte sich heraus, dass Kaldi die höchste Erkennungsgenauigkeit aufweist und in Bezug auf die Geschwindigkeit etwas schneller als seine Konkurrenten ist. Das Kaldi-System bietet dem Benutzer außerdem die größte Auswahl an Algorithmen für verschiedene Aufgaben und ist sehr bequem zu bedienen. Gleichzeitig wird betont, dass die Arbeit mit der Dokumentation für einen unerfahrenen Benutzer unpraktisch sein kann Es ist für Spracherkennungsprofis konzipiert. Im Allgemeinen eignet sich Kaldi jedoch besser für die wissenschaftliche Forschung als seine Kollegen.
So installieren Sie Kaldi
- Laden Sie das Archiv aus dem Repository unter https://github.com/kaldi-asr/kaldi herunter:

- Packen Sie das Archiv aus und gehen Sie zu kaldi-master / tools / extras.
- Wir führen ./check_dependencies.sh aus:

Wenn Sie danach nicht "alles in Ordnung" sehen, öffnen Sie die Datei kaldi-master / tools / INSTALL und folgen Sie den Anweisungen dort. - Wir führen make aus (in kaldi-master / tools, nicht in kaldi-master / tools / extras):

- Gehe zu kaldi-master / src.
- Wir führen ./configure --shared aus, und Sie können die Installation mit oder ohne CUDA-Technologie konfigurieren, indem Sie den Pfad zum installierten CUDA angeben (./configure --cudatk-dir = / usr / local / cuda-8.0) oder den Anfangswert „yes“ ändern "To" no "(./ configure --use-cuda = no).
Wenn Sie gleichzeitig sehen:

Entweder haben Sie Schritt 4 nicht befolgt, oder Sie müssen OpenFst selbst herunterladen und installieren: http://www.openfst.org/twiki/bin/view/FST/FstDownload . - Wir machen abhängig.
- Wir führen make -j aus. Es wird empfohlen, dass Sie die richtige Anzahl von Prozessorkernen eingeben, die Sie beim Erstellen verwenden, z. B. make -j 2.
- Als Ergebnis erhalten wir:

Ein Beispiel für die Verwendung eines Modells mit installiertem Kaldi
Als Beispiel habe ich das kaldi-ru Modell Version 0.6 verwendet.
Sie können es über diesen Link herunterladen :
- Gehen Sie nach dem Herunterladen zur Datei kaldi-ru-0.6 / decode.sh und geben Sie den Pfad zum installierten Kaldi an. Für mich sieht es so aus:

- Wir starten das Modell und geben die Datei an, in der die Sprache erkannt werden soll. Sie können die Datei decoder-test.wav verwenden. Dies ist eine spezielle Datei für den Test. Sie befindet sich bereits in diesem Ordner:

- Und hier ist, was das Modell erkannte:

Welche Algorithmen werden verwendet, was liegt der Arbeit zugrunde?
Ausführliche Informationen zum Projekt finden Sie unter
http://kaldi-asr.org/doc/ . Hier
möchte ich einige wichtige Punkte hervorheben:
- Zum Extrahieren akustischer Merkmale aus dem Eingangssignal werden entweder akustische MFCC (Mel-Frequency Cepstral Coefficients) oder etwas weniger beliebte PLPs (Perceptual Linear Prediction - siehe H. Hermansky, „Perceptual Linear Predictive (PLP) -Analyse von Sprache“ ) verwendet. Bei der ersten Methode wird das Spektrum des ursprünglichen Signals von der Hertz-Skala in die Kreideskala umgewandelt, und dann werden die Cepstralkoeffizienten unter Verwendung der inversen Kosinustransformation (https://habr.com/en/post/140828/) berechnet. Die zweite Methode basiert auf der Regressionsdarstellung von Sprache: Es wird ein Signalmodell erstellt, das die Vorhersage der aktuellen Signalprobe durch eine lineare Kombination beschreibt - das Produkt bekannter Abtastwerte von Eingangs- und Ausgangssignalen und linearen Vorhersagekoeffizienten. Die Berechnung der Sprachzeichen reduziert sich unter bestimmten Bedingungen darauf, diese Koeffizienten zu finden.
- Das akustische Modellierungsmodul umfasst Hidden-Markov-Modelle (HMM), ein Mischungsmodell aus Gaußschen Verteilungen (GMM), tiefen neuronalen Netzen, nämlich Time-Delay Neural Networks (TDNN).
- Die Sprachmodellierung wird mit einer Finite-State-Maschine oder FST (Finite-State-Transducer) durchgeführt. FST codiert eine Zuordnung von einer Eingabezeichenfolge zu einer Ausgabezeichenfolge, und es gibt Gewichte für den Übergang, die die Wahrscheinlichkeit der Berechnung des Eingabezeichens in der Ausgabe bestimmen.
- Die Decodierung erfolgt mit dem Vorwärts-Rückwärts-Algorithmus.
Informationen zum Erstellen des Modells kaldi-ru-0.6
Für die russische Sprache gibt es ein vorab trainiertes Erkennungsmodell, das von Nikolai Shmyryov erstellt wurde und auf vielen Websites und Foren auch als
nsh bekannt ist .
- Um Merkmale zu extrahieren, wurde die MFCC-Methode verwendet, und das akustisch-phonetische Modell selbst basiert auf neuronalen Netzen vom Typ TDNN.
- Das Trainingsbeispiel waren die Soundtracks von Videos in russischer Sprache, die von YouTube heruntergeladen wurden.
- Um ein Sprachmodell zu erstellen, haben wir das CMUdict-Wörterbuch und genau das Vokabular verwendet, das im Trainingssatz enthalten war. Aufgrund der Tatsache, dass das Wörterbuch ähnliche Aussprachen verschiedener Wörter enthielt, wurde beschlossen, jedem Wort den Wert „Wahrscheinlichkeit“ zuzuweisen und diese zu normalisieren.
- Um das Sprachmodell zu lernen, wurde das RNNLM-Framework (wiederkehrende Sprachmodelle für neuronale Netze) verwendet, das, wie der Name schon sagt, auf wiederkehrenden neuronalen Netzen basiert (anstelle der guten alten N-Gramme).
Vergleich mit Google Speech API und Yandex Speech Kit
Sicherlich hatte einer der Leser beim Lesen der vorherigen Absätze eine Frage: Okay, wir haben herausgefunden, dass Kaldi seinen direkten Kollegen überlegen ist, aber was ist mit Erkennungssystemen von Google und Yandex? Vielleicht ist die Relevanz der zuvor beschriebenen Frameworks zweifelhaft, ob es Tools dieser beiden Giganten gibt? Die Frage ist wirklich gut, also lasst uns testen!
- Als Datensatz nehmen wir die Datensätze und die entsprechende Textentschlüsselung aus dem berüchtigten VoxForge . Nachdem jedes System 3677 Audiodateien erkannt hatte, erhielt ich die folgenden WER-Werte (Word Error Rate):

- Die Aufzeichnungen von VoxForge sind ohne Hintergrundgeräusche, Intonation, Sprachgeschwindigkeit usw. ungefähr ähnlich. Lassen Sie uns die Aufgabe komplizieren: Nehmen Sie den Open_stt- Validierungs-Subkorpus, der Telefonanrufe, YouTube-Audiospuren und Hörbücher enthält, und bewerten Sie die Leistung mithilfe von WER und CER (Character Error Rate).
Nachdem ich die Textabschriften erhalten hatte, bemerkte ich, dass Google und Yandex (im Gegensatz zu Kaldi) Wörter wie erkannten
"Eins" als "1". Dementsprechend bestand die Notwendigkeit, solche Fälle zu korrigieren (wie in den von den Autoren von open_stt bereitgestellten Referenzprotokollen wird alles in Briefform dargestellt), was sich auf das Endergebnis auswirkte:

Zusammenfassend können wir sagen, dass alle Systeme die Aufgabe auf ungefähr derselben Ebene bewältigten und Kaldi dem Yandex Speech Kit und der Google Speech API nicht viel unterlegen war. Im zweiten Fall bietet das Yandex Speech Kit die beste Leistung Es erkennt am besten kurze Audiodateien im Vergleich zu Mitbewerbern, die keinen Teil davon erkennen konnten (für Google ist die Anzahl dieser Dateien sogar zu groß). Schließlich ist anzumerken, dass Kaldi mehr als 12 Stunden gebraucht hat, um 28111 Dateien zu erkennen, andere Systeme, die in viel kürzerer Zeit verwaltet wurden. Gleichzeitig sind das Yandex Speech Kit und die Google Speech API „Black Boxes“, die auf den Servern anderer Personen weit entfernt funktionieren und nicht für die Optimierung zugänglich sind. Kaldi kann jedoch an die Besonderheiten der jeweiligen Aufgabe angepasst werden - charakteristisches Vokabular (Professionalität, Jargon, Umgangssprache), Aussprachemerkmale usw. Und das alles kostenlos und ohne SMS! Das System ist eine Art Designer, mit dem wir alle etwas Ungewöhnliches und Interessantes schaffen können.
Ich
danke dem
Yandex.Cloud- Team, das mir bei der Implementierung der
open_stt- Fallerkennung geholfen hat.
Ich arbeite im Labor APDiMO NSU:
Website:
https://bigdata.nsu.ru/VK Group:
https://vk.com/lapdimo