¿Por qué Kaldi es bueno para el reconocimiento de voz? (actualizado 12.25.2019)



¿Por qué estoy (y espero) interesado en el reconocimiento de voz? En primer lugar, esta dirección es una de las más populares en comparación con otras tareas de lingüística informática, ya que la tecnología de reconocimiento de voz ahora se usa en casi todas partes, desde reconocer un simple sí / no en el centro de llamadas automáticas del banco hasta la capacidad de admitir "pequeñas conversaciones" en "Columna inteligente" como "Alice". En segundo lugar, para que el sistema de reconocimiento de voz sea de alta calidad, es necesario encontrar las herramientas más efectivas para crear y configurar dicho sistema (este artículo está dedicado a una de esas herramientas). Finalmente, el "plus" indudable de elegir personalmente una especialización en el campo del reconocimiento de voz es que para la investigación en esta área es necesario tener habilidades tanto de programador como lingüísticas. Esto es muy estimulante, lo que obliga a adquirir conocimientos en diferentes disciplinas.

¿Por qué Kaldi, después de todo, hay otros marcos para el reconocimiento de voz?


Para responder a esta pregunta, vale la pena considerar los análogos existentes y los algoritmos y tecnologías utilizados por ellos (los algoritmos utilizados en Kaldi se describen más adelante en el artículo):

  • CMU Sphinx
    CMU Sphinx (¡no debe confundirse con el motor de búsqueda Sphinx!) Es un sistema de reconocimiento de voz creado por desarrolladores de la Universidad Carnegie Mellon y que consta de varios módulos para extraer funciones de voz, reconocimiento de voz (incluso en dispositivos móviles) y capacitación para dicho reconocimiento. CMU Sphinx utiliza modelos ocultos de Markov en el nivel de reconocimiento acústico-fonético y modelos estadísticos de N-gram en el nivel de reconocimiento lingüístico. El sistema también tiene una serie de características interesantes: reconocimiento de voz larga (por ejemplo, transcripciones o grabaciones de sonido de una entrevista), la capacidad de conectar un gran diccionario de cientos de miles de formas de palabras, etc. Es importante tener en cuenta que el sistema está en constante evolución, con cada versión, se mejora la calidad de reconocimiento y el rendimiento. . También hay documentación multiplataforma y conveniente. Entre las desventajas de usar este sistema, es posible destacar la imposibilidad de iniciar CMU Sphinx "fuera de la caja", porque incluso resolver problemas simples requiere conocimientos sobre la adaptación del modelo acústico, en el campo del modelado de lenguaje, etc.
  • Julius
    Julius ha sido desarrollado por desarrolladores japoneses desde 1997, y ahora el proyecto está respaldado por el Instituto de Investigación de Ciencia, Tecnología y Gestión Avanzada de Kyoto. El modelo se basa en N-gramos y modelos de Markov ocultos sensibles al contexto, el sistema puede reconocer el habla en tiempo real. Las desventajas son la distribución solo para el modelo en idioma japonés (aunque existe un proyecto VoxForge que crea modelos acústicos para otros idiomas, en particular para el idioma inglés) y la falta de actualizaciones estables.
  • RWTH ASR
    El modelo ha sido desarrollado por especialistas de la Universidad Técnica de Rin-Westfalia desde 2001, consta de varias bibliotecas y herramientas escritas en C ++. El proyecto también incluye documentación de instalación, varios sistemas de entrenamiento, plantillas, modelos acústicos, modelos de idiomas, soporte para redes neuronales, etc. Al mismo tiempo, el RWTH ASR es prácticamente multiplataforma y tiene una velocidad baja.
  • Htk
    HTK (Hidden Markov Model Toolkit) es un conjunto de herramientas de reconocimiento de voz que se creó en la Universidad de Cambridge en 1989. El kit de herramientas basado en modelos ocultos de Markov se usa con mayor frecuencia como una herramienta adicional para crear sistemas de reconocimiento de voz (por ejemplo, los desarrolladores de Julius usan este marco) A pesar de que el código fuente está disponible públicamente, el uso de HTK para crear sistemas para usuarios finales está prohibido por la licencia, por lo que el kit de herramientas no es popular en este momento. El sistema también tiene una velocidad y precisión relativamente bajas.

En el artículo "Análisis comparativo de los sistemas de reconocimiento de voz de código abierto" ( https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ), se realizó un estudio durante el cual todos los sistemas fueron entrenados en un caso de idioma inglés (160 horas) y aplicados en un pequeño caso de prueba de 10 horas. Como resultado, resultó que Kaldi tiene la mayor precisión de reconocimiento, un poco más rápido que sus competidores en términos de velocidad. Además, el sistema Kaldi puede proporcionar al usuario la selección más rica de algoritmos para diversas tareas y es muy conveniente de usar. Al mismo tiempo, se hace hincapié en el hecho de que trabajar con documentación puede ser inconveniente para un usuario inexperto, como Está diseñado para profesionales de reconocimiento de voz. Pero en general, Kaldi es más adecuado para la investigación científica que sus contrapartes.

Cómo instalar Kaldi


  1. Descargue el archivo del repositorio en https://github.com/kaldi-asr/kaldi :
  2. Descomprima el archivo, vaya a kaldi-master / tools / extras.
  3. Ejecutamos ./check_dependencies.sh:

    Si después de eso no ve "todo bien", abra el archivo kaldi-master / tools / INSTALL y siga las instrucciones allí.
  4. Ejecutamos make (estando en kaldi-master / tools, no en kaldi-master / tools / extras):
  5. Vaya a kaldi-master / src.
  6. Ejecutamos ./configure --shared, y puede configurar la instalación con o sin tecnología CUDA especificando la ruta al CUDA instalado (./configure --cudatk-dir = / usr / local / cuda-8.0) o cambiar el valor inicial "yes "A" no "(./ configure --use-cuda = no) respectivamente.

    Si al mismo tiempo ves:



    o no siguió el paso 4, o necesita descargar e instalar OpenFst usted mismo: http://www.openfst.org/twiki/bin/view/FST/FstDownload .
  7. Hacemos depender.
  8. Ejecutamos make -j. Se recomienda que ingrese la cantidad correcta de núcleos de procesador que usará al construir, por ejemplo, make -j 2.
  9. Como resultado, obtenemos:

Un ejemplo de uso de un modelo con Kaldi instalado


Como ejemplo, utilicé el modelo kaldi-ru versión 0.6, puedes descargarlo desde este enlace :

  1. Después de la descarga, vaya al archivo kaldi-ru-0.6 / decode.sh y especifique la ruta al Kaldi instalado, se ve así para mí:


  2. Lanzamos el modelo, indicando el archivo en el que se va a reconocer el discurso. Puede usar el archivo decoder-test.wav, este es un archivo especial para la prueba, ya está en esta carpeta:


  3. Y esto es lo que reconoció el modelo:

¿Qué algoritmos se utilizan, qué subyace al trabajo?


La información completa sobre el proyecto se puede encontrar en http://kaldi-asr.org/doc/ , aquí destacaré algunos puntos clave:

  • Se utilizan MFCC acústicos (coeficientes cepstrales de frecuencia de mel) o PLP ligeramente menos populares (predicción lineal perceptiva - ver H. Hermansky, "Análisis predictivo lineal de la percepción (PLP) del habla" ) para extraer características acústicas de la señal de entrada. En el primer método, el espectro de la señal original se convierte de la escala de Hertz a la escala de tiza, y luego se calculan los coeficientes cepstrales utilizando la transformada inversa del coseno (https://habr.com/en/post/140828/). El segundo método se basa en la representación de regresión del habla: se construye un modelo de señal que describe la predicción de la muestra de señal actual mediante una combinación lineal: el producto de muestras conocidas de señales de entrada y salida y coeficientes de predicción lineal. La tarea de calcular los signos del habla se reduce a encontrar estos coeficientes bajo ciertas condiciones.
  • El módulo de modelado acústico incluye modelos ocultos de Markov (HMM), un modelo mixto de distribuciones gaussianas (GMM), redes neuronales profundas, a saber, redes neuronales de retardo de tiempo (TDNN).
  • El modelado del lenguaje se lleva a cabo utilizando una máquina de estados finitos, o FST (transductor de estado finito). FST codifica la asignación de la secuencia de caracteres de entrada a la secuencia de caracteres de salida, mientras que hay pesos para la transición que determinan la probabilidad de calcular el carácter de entrada en la salida.
  • La decodificación se lleva a cabo utilizando el algoritmo de avance y retroceso.

Acerca de la creación del modelo kaldi-ru-0.6


Para el idioma ruso, existe un modelo de reconocimiento previamente entrenado creado por Nikolai Shmyryov, también conocido en muchos sitios y foros como nsh .

  • Para extraer características, se utilizó el método MFCC, y el modelo acústico-fonético en sí se basa en redes neuronales del tipo TDNN.
  • La muestra de capacitación fue la banda sonora de videos en ruso, descargados de YouTube.
  • Para crear un modelo de lenguaje, utilizamos el diccionario CMUdict y exactamente el vocabulario que estaba en el conjunto de entrenamiento. Debido al hecho de que el diccionario contenía pronunciaciones similares de diferentes palabras, se decidió asignar a cada palabra el valor de "probabilidad" y normalizarlas.
  • Para aprender el modelo de lenguaje, se usó el marco RNNLM (modelos de lenguaje de red neuronal recurrente), basado, como su nombre lo indica, en redes neuronales recurrentes (en lugar de los viejos N-gramos).


Comparación con Google Speech API y Yandex Speech Kit


Seguramente, uno de los lectores, al leer los párrafos anteriores, hizo una pregunta: está bien, descubrimos que Kaldi es superior a sus análogos directos, pero ¿qué pasa con los sistemas de reconocimiento de Google y Yandex? ¿Quizás la relevancia de los marcos descritos anteriormente es dudosa si existen herramientas de estos dos gigantes? La pregunta es realmente buena, ¡así que vamos a probar!

  • Como conjunto de datos, tomamos los registros y el descifrado de texto correspondiente del notorio VoxForge . Como resultado, después de que cada sistema reconoció 3677 archivos de sonido, recibí los siguientes valores WER (Word Error Rate):


  • Los registros de VoxForge son aproximadamente similares en ausencia de ruido de fondo, entonación, velocidad del habla, etc. Complicamos la tarea: tome el subcorpus de validación open_stt, que incluye conversaciones telefónicas, clips de audio de videos de YouTube y audiolibros, y evalúe el rendimiento utilizando WER y CER (Tasa de error de caracteres).

    Después de recibir las transcripciones de texto, noté que Google y Yandex (a diferencia de Kaldi) reconocieron palabras como
    "Uno" como "1". En consecuencia, era necesario corregir tales casos (como en las transcripciones de referencia que proporcionaron los autores de open_stt, todo se presenta en términos alfabéticos), lo que afectó el resultado final:



En resumen, podemos decir que todos los sistemas hicieron frente a la tarea en aproximadamente el mismo nivel, y Kaldi no era muy inferior al Yandex Speech Kit y Google Speech API. En el segundo caso, el Yandex Speech Kit tiene el mejor rendimiento, ya que reconoce mejor los archivos de audio cortos en comparación con los competidores que no pudieron reconocer ninguna parte de ellos (para Google, el número de estos archivos es incluso demasiado grande). Finalmente, vale la pena señalar que Kaldi tardó más de 12 horas en reconocer los archivos 28111, otros sistemas administrados en mucho menos tiempo. Pero al mismo tiempo, el Yandex Speech Kit y la API de Google Speech son "cajas negras" que funcionan en algún lugar muy, muy lejano en los servidores de otras personas y no son accesibles para el ajuste, pero Kaldi se puede adaptar a los detalles específicos de la tarea en cuestión: vocabulario característico (profesionalismo, jerga, jerga coloquial), características de pronunciación, etc. ¡Y todo esto gratis y sin SMS! El sistema es un tipo de diseñador, que todos podemos usar para crear algo inusual e interesante.

Expreso mi gratitud al equipo de Yandex.Cloud , que me ayudó en la implementación del reconocimiento de casos open_stt .

Yo trabajo en el laboratorio APDiMO NSU:
Sitio web: https://bigdata.nsu.ru/
Grupo VK: https://vk.com/lapdimo

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


All Articles