Pourquoi Kaldi est-il bon pour la reconnaissance vocale? (mis à jour le 12.25.2019)



Pourquoi suis-je (et j'espère que vous) intéressé par la reconnaissance vocale? Premièrement, cette direction est l'une des plus populaires par rapport à d'autres tâches de la linguistique informatique, car la technologie de reconnaissance vocale est maintenant utilisée presque partout - de la reconnaissance d'un simple oui / non dans le centre d'appels automatique de la banque à la capacité de prendre en charge les «petites conversations» «Colonne intelligente» comme «Alice». Deuxièmement, pour que le système de reconnaissance vocale soit de haute qualité, il est nécessaire de trouver les outils les plus efficaces pour créer et configurer un tel système (cet article est consacré à l'un de ces outils). Enfin, le «plus» incontestable du choix d'une spécialisation dans le domaine de la reconnaissance vocale pour moi personnellement est que pour la recherche dans ce domaine, il est nécessaire d'avoir à la fois des compétences en programmation et en linguistique. C'est très stimulant, forçant à acquérir des connaissances dans différentes disciplines.

Pourquoi Kaldi, après tout, existe-t-il d'autres cadres pour la reconnaissance vocale?


Pour répondre à cette question, il convient de considérer les analogues existants et les algorithmes et technologies utilisés par eux (les algorithmes utilisés dans Kaldi sont décrits plus en détail dans l'article):

  • CMU Sphinx
    CMU Sphinx (à ne pas confondre avec le moteur de recherche Sphinx!) Est un système de reconnaissance vocale créé par des développeurs de l'Université Carnegie Mellon et composé de divers modules pour extraire les fonctionnalités vocales, la reconnaissance vocale (y compris sur les appareils mobiles) et la formation à cette reconnaissance. CMU Sphinx utilise des modèles de Markov cachés au niveau de la reconnaissance acoustique-phonétique et des modèles statistiques N-gramme au niveau de la reconnaissance linguistique. Le système présente également un certain nombre de fonctionnalités intéressantes: reconnaissance des longs discours (par exemple, transcriptions ou enregistrements sonores d'une interview), possibilité de connecter un grand dictionnaire de centaines de milliers de formes de mots, etc. Il est important de noter que le système évolue constamment, avec chaque version, la qualité de reconnaissance et les performances sont améliorées . Il existe également une documentation multiplateforme et pratique. Parmi les inconvénients de l'utilisation de ce système, il est possible de souligner l'impossibilité de démarrer CMU Sphinx «prêt à l'emploi», car même la résolution de problèmes simples nécessite des connaissances sur l'adaptation du modèle acoustique, dans le domaine de la modélisation du langage, etc.
  • Julius
    Julius a été développé par des développeurs japonais depuis 1997, et maintenant le projet est soutenu par Advanced Science, Technology & Management Research Institute de Kyoto. Le modèle est basé sur des N-grammes et des modèles de Markov cachés sensibles au contexte, le système est capable de reconnaître la parole en temps réel. Les inconvénients incluent la distribution uniquement pour le modèle de langue japonaise (bien qu'il existe un projet VoxForge qui crée des modèles acoustiques pour d'autres langues, en particulier pour la langue anglaise) et le manque de mises à jour stables.
  • RWTH ASR
    Le modèle a été développé par des spécialistes de l'Université technique de Rhénanie-Westphalie depuis 2001, se compose de plusieurs bibliothèques et outils écrits en C ++. Le projet comprend également la documentation d'installation, divers systèmes de formation, des modèles, des modèles acoustiques, des modèles de langage, la prise en charge des réseaux de neurones, etc. En même temps, le RWTH ASR est pratiquement multiplateforme et a une faible vitesse.
  • Htk
    HTK (Hidden Markov Model Toolkit) est un ensemble d'outils de reconnaissance vocale créés à l'Université de Cambridge en 1989. La boîte à outils basée sur des modèles de Markov cachés est le plus souvent utilisée comme outil supplémentaire pour créer des systèmes de reconnaissance vocale (par exemple, les développeurs Julius utilisent ce cadre). Malgré le fait que le code source soit accessible au public, l'utilisation de HTK pour créer des systèmes pour les utilisateurs finaux est interdite par la licence, c'est pourquoi la boîte à outils n'est pas populaire en ce moment. Le système a également une vitesse et une précision relativement faibles.

Dans l'article «Analyse comparative des systèmes de reconnaissance vocale open source» ( https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ), une étude a été menée au cours de laquelle tous les systèmes ont été formés dans un cas de langue anglaise (160 heures) et appliqués dans un petit cas de test de 10 heures. En conséquence, il s'est avéré que Kaldi a la précision de reconnaissance la plus élevée, légèrement plus rapide que ses concurrents en termes de vitesse. En outre, le système Kaldi est en mesure de fournir à l'utilisateur la sélection la plus riche d'algorithmes pour diverses tâches et est très pratique à utiliser. Dans le même temps, l'accent est mis sur le fait que le travail avec la documentation peut être gênant pour un utilisateur inexpérimenté, comme Il est conçu pour les professionnels de la reconnaissance vocale. Mais en général, Kaldi est plus adapté à la recherche scientifique que ses homologues.

Comment installer Kaldi


  1. Téléchargez l'archive à partir du référentiel à https://github.com/kaldi-asr/kaldi :
  2. Décompressez l'archive, allez dans kaldi-master / tools / extras.
  3. Nous exécutons ./check_dependencies.sh:

    Si après cela, vous ne voyez pas «tout va bien», ouvrez le fichier kaldi-master / tools / INSTALL et suivez les instructions.
  4. Nous exécutons make (étant dans kaldi-master / tools, pas dans kaldi-master / tools / extras):
  5. Allez à kaldi-master / src.
  6. Nous exécutons ./configure --shared, et vous pouvez configurer l'installation avec ou sans la technologie CUDA en spécifiant le chemin vers le CUDA installé (./configure --cudatk-dir = / usr / local / cuda-8.0) ou modifiez la valeur initiale «oui "À" non "(./ configure --use-cuda = no) respectivement.

    Si en même temps vous voyez:



    soit vous n'avez pas suivi l'étape 4, soit vous devez télécharger et installer OpenFst vous-même: http://www.openfst.org/twiki/bin/view/FST/FstDownload .
  7. Nous faisons dépendre.
  8. Nous exécutons make -j. Il est recommandé de saisir le nombre correct de cœurs de processeur que vous utiliserez lors de la création, par exemple, de make -j 2.
  9. En conséquence, nous obtenons:

Un exemple d'utilisation d'un modèle avec Kaldi installé


À titre d'exemple, j'ai utilisé le modèle kaldi-ru version 0.6, vous pouvez le télécharger à partir de ce lien :

  1. Après le téléchargement, accédez au fichier kaldi-ru-0.6 / decode.sh et spécifiez le chemin vers le Kaldi installé, il ressemble à ceci pour moi:


  2. Nous lançons le modèle, indiquant le fichier dans lequel le discours doit être reconnu. Vous pouvez utiliser le fichier decoder-test.wav, c'est un fichier spécial pour le test, il est déjà dans ce dossier:


  3. Et voici ce que le modèle a reconnu:

Quels algorithmes sont utilisés, qu'est-ce qui sous-tend le travail?


Des informations complètes sur le projet sont disponibles sur http://kaldi-asr.org/doc/ , ici je vais souligner quelques points clés:

  • Soit MFCC acoustique (Mel-Frequency Cepstral Coefficients) ou PLP (Perceptual Linear prediction - voir H. Hermansky, «Perceptual linear predictive (PLP) analysis of speech» ) sont utilisés pour extraire les caractéristiques acoustiques du signal d'entrée. Dans la première méthode, le spectre du signal d'origine est converti de l'échelle Hertz à l'échelle de craie, puis les coefficients cepstraux sont calculés à l'aide de la transformée en cosinus inverse (https://habr.com/en/post/140828/). La deuxième méthode est basée sur la représentation de régression de la parole: un modèle de signal est construit qui décrit la prédiction de l'échantillon de signal actuel par une combinaison linéaire - le produit d'échantillons connus de signaux d'entrée et de sortie et de coefficients de prédiction linéaire. La tâche de calculer les signes de la parole se réduit à trouver ces coefficients dans certaines conditions.
  • Le module de modélisation acoustique comprend des modèles de Markov cachés (HMM), un modèle de mélange de distributions gaussiennes (GMM), des réseaux de neurones profonds, à savoir les réseaux neuronaux temporels (TDNN).
  • La modélisation du langage est réalisée à l'aide d'une machine à états finis, ou FST (transducteur à états finis). FST code un mappage d'une séquence de caractères d'entrée à une séquence de caractères de sortie, et il existe des pondérations pour la transition qui déterminent la probabilité de calculer le caractère d'entrée dans la sortie.
  • Le décodage s'effectue à l'aide de l'algorithme avant-arrière.

À propos de la création du modèle kaldi-ru-0.6


Pour la langue russe, il existe un modèle de reconnaissance pré-formé créé par Nikolai Shmyryov, également connu sur de nombreux sites et forums sous le nom de nsh .

  • Pour extraire des caractéristiques, la méthode MFCC a été utilisée et le modèle acoustique-phonétique lui-même est basé sur des réseaux de neurones de type TDNN.
  • L'échantillon de formation était constitué de bandes sonores de vidéos en russe, téléchargées depuis YouTube.
  • Pour créer un modèle de langage, nous avons utilisé le dictionnaire CMUdict et exactement le vocabulaire qui se trouvait dans l'ensemble de formation. Étant donné que le dictionnaire contenait des prononciations similaires de mots différents, il a été décidé d'attribuer à chaque mot la valeur de «probabilité» et de les normaliser.
  • Pour apprendre le modèle de langage, le cadre RNNLM (modèles de langage de réseau de neurones récurrents) a été utilisé, basé, comme son nom l'indique, sur des réseaux de neurones récurrents (au lieu des bons vieux N-grammes).


Comparaison avec Google Speech API et Yandex Speech Kit


Certes, l'un des lecteurs, en lisant les paragraphes précédents, a posé une question: d'accord, nous avons compris que Kaldi est supérieur à ses analogues directs, mais qu'en est-il des systèmes de reconnaissance de Google et Yandex? Peut-être que la pertinence des cadres décrits précédemment est douteuse s'il existe des outils de ces deux géants? La question est vraiment bonne, alors testons!

  • En tant qu'ensemble de données, nous prenons les enregistrements et le déchiffrement de texte correspondant du célèbre VoxForge . Par conséquent, après que chaque système ait reconnu 3677 fichiers audio, j'ai reçu les valeurs WER (Word Error Rate) suivantes:


  • Les enregistrements de VoxForge sont approximativement similaires en l'absence de bruit de fond, d'intonation, de vitesse de parole, etc. Compliquons la tâche: prenons le sous- groupe de validation open_stt, qui comprend les conversations téléphoniques, les clips audio des vidéos YouTube et les livres audio, et évaluons les performances à l'aide de WER et CER (Character Error Rate).

    Après avoir reçu les transcriptions textuelles, j'ai remarqué que Google et Yandex (contrairement à Kaldi) reconnaissaient des mots comme
    «Un» comme «1». En conséquence, il était nécessaire de corriger de tels cas (comme dans les transcriptions de référence fournies par les auteurs de open_stt, tout est présenté en termes alphabétiques), ce qui a affecté le résultat final:



En résumé, nous pouvons dire que tous les systèmes ont fait face à la tâche à peu près au même niveau, et Kaldi n'était pas très inférieur au Yandex Speech Kit et à l'API Google Speech. Dans le deuxième cas, le Yandex Speech Kit a les meilleures performances, comme il reconnaît mieux les fichiers audio courts par rapport aux concurrents qui n'ont pu en reconnaître aucune partie (pour Google, le nombre de ces fichiers est même trop important). Enfin, il convient de noter que Kaldi a mis plus de 12 heures pour reconnaître 28111 fichiers, d'autres systèmes étant gérés en beaucoup moins de temps. Mais en même temps, le Yandex Speech Kit et l'API Google Speech sont des «boîtes noires» qui fonctionnent quelque part loin, très loin sur les serveurs des autres et ne sont pas accessibles pour le réglage, mais Kaldi peut être adapté aux spécificités de la tâche à accomplir - vocabulaire caractéristique (professionnalisme, jargon, argot familier), fonctions de prononciation, etc. Et tout cela gratuitement et sans SMS! Le système est une sorte de concepteur, que nous pouvons tous utiliser pour créer quelque chose d'inhabituel et d'intéressant.

J'exprime ma gratitude à l'équipe de Yandex.Cloud , qui m'a aidé dans la mise en œuvre de la reconnaissance de cas open_stt .

Je travaille dans le laboratoire APDiMO NSU:
Site Web: https://bigdata.nsu.ru/
Groupe VK: https://vk.com/lapdimo

Source: https://habr.com/ru/post/fr470696/


All Articles