Guía introductoria completa sobre el reconocimiento de voz a texto con Transformers

Introducción completa al reconocimiento de voz a texto con Transformers

Introducción

Todos lidiamos con datos de audio mucho más de lo que nos damos cuenta. El mundo está lleno de datos de audio y problemas relacionados que requieren solución. Y podemos utilizar el Aprendizaje Automático para resolver muchos de estos problemas. Probablemente estés familiarizado/a con el uso de datos de imagen, texto y tabulares para entrenar modelos de Aprendizaje Automático, y el uso de Aprendizaje Automático para resolver problemas en estos dominios. Con la llegada de las arquitecturas Transformer, se ha logrado resolver problemas relacionados con el audio con una precisión mucho mejor que los métodos conocidos anteriormente. Aprenderemos los conceptos básicos de Aprendizaje Automático de Audio utilizando la conversión de voz a texto con transformers y aprenderemos a utilizar la biblioteca Huggingface para resolver problemas relacionados con el audio mediante Aprendizaje Automático.

Objetivos de aprendizaje

  • Aprender sobre los conceptos básicos del Aprendizaje Automático de Audio y adquirir conocimientos relacionados.
  • Aprender cómo se recopilan, almacenan y procesan los datos de audio para el Aprendizaje Automático.
  • Aprender sobre una tarea común y valiosa: la conversión de voz a texto utilizando Aprendizaje Automático.
  • Aprender a utilizar herramientas y bibliotecas de Huggingface para tus tareas de audio, desde encontrar conjuntos de datos hasta modelos entrenados, y utilizarlos para resolver problemas de audio mediante Aprendizaje Automático aprovechando la biblioteca Python de Huggingface.

Este artículo fue publicado como parte del Data Science Blogathon.

Antecedentes

Desde que ocurrió la revolución del Aprendizaje Profundo a principios de la década de 2010 con AlexNet superando la experiencia humana en el reconocimiento de objetos, las arquitecturas Transformer son probablemente el mayor avance desde entonces. Los Transformers han hecho posible tareas que antes eran insolubles y han simplificado la solución de muchos problemas. Aunque inicialmente se pensó para obtener mejores resultados en la traducción de lenguaje natural, pronto se adoptó no solo para otras tareas en el Procesamiento del Lenguaje Natural, sino también en otros dominios: los ViT o Vision Transformers se aplican para resolver tareas relacionadas con imágenes, los Decision Transformers se utilizan para la toma de decisiones en agentes de Aprendizaje por Refuerzo, y un artículo reciente llamado MagViT demostró el uso de Transformers para diversas tareas relacionadas con videos.

Todo comenzó con el ahora famoso artículo Attention is All You Need, que introdujo el mecanismo de atención que condujo a la creación de los Transformers. Este artículo no asume que ya conoces el funcionamiento interno de la arquitectura de los Transformers.

Aunque en el dominio público y en el dominio de los desarrolladores habituales, ChatGPT y GitHub Copilot son nombres muy famosos, el Aprendizaje Profundo se ha utilizado en muchos casos de uso del mundo real en diversos campos: Visión, Aprendizaje por Refuerzo, Procesamiento del Lenguaje Natural, y así sucesivamente.

En los últimos años, hemos conocido otros muchos casos de uso, como el descubrimiento de medicamentos y el plegamiento de proteínas. El audio es uno de los campos fascinantes que aún no se ha resuelto completamente mediante el Aprendizaje Profundo; en cierto sentido, la clasificación de imágenes en el conjunto de datos de Imagenet se resolvió mediante Redes Neuronales Convolucionales.

Requisitos previos

  • Supongo que tienes experiencia trabajando con Python. Es necesario tener conocimientos básicos de Python. Debes tener una comprensión de las bibliotecas y su uso común.
  • También supongo que conoces los conceptos básicos de Aprendizaje Automático y Aprendizaje Profundo.
  • No es necesario tener conocimientos previos de Transformers, pero será útil.

Notas sobre los datos de audio: Este plataforma no admite la inserción de audio, así que he creado un cuaderno de Colab con todos los códigos y datos de audio. Puedes encontrarlo aquí. Ábrelo en Google Colaboratory y podrás reproducir todo el audio en el navegador desde el cuaderno.

Introducción al Aprendizaje Automático de Audio

Probablemente hayas visto el Aprendizaje Automático de audio en acción. Decir “Hola Siri” o “Ok Google” activa los asistentes de sus respectivas plataformas, esto es el Aprendizaje Automático de audio en acción. Esta aplicación en particular se conoce como “detección de palabras clave”.

Pero existe una buena posibilidad de que muchos problemas puedan resolverse utilizando Transformers en este ámbito. Sin embargo, antes de adentrarnos en el uso de Transformers, permíteme explicarte rápidamente cómo se resolvían las tareas relacionadas con el audio antes de los Transformers.

Antes de los Transformers, los datos de audio solían convertirse en un melspectrograma, que es una imagen que describe el fragmento de audio en cuestión, y se trataba como una imagen que se alimentaba a Redes Neuronales Convolucionales para el entrenamiento. Durante la inferencia, la muestra de audio se transformaba primero en la representación del melspectrograma, y la arquitectura de la CNN infería en función de eso.

Explorando datos de audio

Ahora te presentaré rápidamente la biblioteca de Python `librosa`. Es una biblioteca muy útil para trabajar con datos de audio. Generaré un melspectrograma para darte una idea de cómo se ven. Puedes encontrar la documentación de librosa en la web.

Primero, instala la biblioteca librosa ejecutando lo siguiente desde tu Terminal:

pip install librosa

Luego, en tu cuaderno, debes importarlo de la siguiente manera:

import librosa

Exploraremos algunas funcionalidades básicas de la biblioteca utilizando algunos datos que vienen incluidos en la biblioteca.

array, sampling_rate = librosa.load(librosa.ex("trumpet"))

Podemos ver que el método librosa.load() devuelve una matriz de audio junto con una tasa de muestreo para un sonido de trompeta.

import matplotlib.pyplot as plt
import librosa.display

plt.figure().set_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)

Esto traza los valores de los datos de audio en un gráfico como este:

En el eje X, vemos el tiempo, y en el eje Y, vemos la amplitud del fragmento. Escúchalo así:

from IPython.display import Audio as aud

aud(array, rate=16_000)

Puedes escuchar el sonido en el cuaderno de Colab que creé para esta publicación de blog.

Representa un melspectrograma directamente usando librosa.

import numpy as np

S = librosa.feature.melspectrogram(y=array, sr=sampling_rate,

                      n_mels=128, fmax=8_000)

S_dB = librosa.power_to_db(S, ref=np.max)

plt.figure().set_figwidth(12)

librosa.display.specshow(S_dB, x_axis="time",

                 y_axis="mel", sr=sampling_rate,

                 fmax=8000)

plt.colorbar()

Usamos melspectrograma en lugar de otras representaciones porque contiene mucha más información que otras representaciones: frecuencia y amplitud en una curva. Puedes visitar este buen artículo en Analytics Vidhya para aprender más sobre espectrogramas.

Esto es exactamente cómo se veían muchos datos de entrada en ML de audio antes de los Transformers, para entrenar Redes Neuronales Convolucionales.

ML de Audio utilizando Transformers

Como se introdujo en el artículo “Attention is All You Need”, el mecanismo de atención resuelve con éxito tareas relacionadas con el lenguaje porque, desde un nivel alto, la cabeza de atención decide qué parte de una secuencia merece más atención que el resto al predecir el siguiente token.

Ahora, el audio es un ejemplo muy adecuado de datos de secuencia. El audio es naturalmente una señal continua generada por las vibraciones en la naturaleza, o en nuestros órganos del habla, en el caso del habla humana o los sonidos de los animales. Pero las computadoras no pueden procesar ni almacenar datos continuos. Todos los datos se almacenan de forma discreta.

Lo mismo ocurre con el audio. Solo se almacenan valores de ciertos intervalos de tiempo; estos funcionan lo suficientemente bien como para escuchar canciones, ver películas y comunicarnos con nosotros mismos por teléfono o internet.

Y los transformers también trabajan con estos datos.

Al igual que el procesamiento del lenguaje natural (NLP), podemos utilizar diferentes arquitecturas de transformers para diferentes necesidades. Utilizaremos una arquitectura codificador-decodificador para nuestra tarea.

Datos de entrenamiento de Huggingface Hub

Como se mencionó, trabajaremos con la biblioteca Huggingface para cada paso del proceso. Puedes ir al Hub de Conjuntos de Datos de Huggingface para ver conjuntos de datos de audio. El conjunto de datos con el que trabajaremos aquí es el conjunto de datos MINDS. Es el conjunto de datos de datos de voz de hablantes de diferentes idiomas. Y todos los ejemplos en el conjunto de datos están completamente anotados.

Carguemos el conjunto de datos y exploremos un poco.

Primero, instala la biblioteca de conjuntos de datos de Huggingface.

pip install datasets

Agregar

a pip install asegura que descarguemos la biblioteca datasets con el soporte añadido de funcionalidades relacionadas con el audio.

Luego exploramos el conjunto de datos MINDS. Le recomiendo encarecidamente que visite la página de Huggingface del conjunto de datos y lea la tarjeta del conjunto de datos.

En la página del conjunto de datos de Huggingface, puede ver que el conjunto de datos tiene información muy relevante, como tareas, idiomas disponibles y licencias para usar el conjunto de datos.

Ahora cargaremos los datos y aprenderemos más sobre ellos.

from datasets import load_dataset, Audio

minds = load_dataset("PolyAI/minds14", name="en-AU",
                     split="train")

minds = minds.cast_column("audio", Audio(sampling_rate=16_000))

Observe cómo se carga el conjunto de datos. El nombre va primero y solo nos interesa el acento en inglés de Australia, y solo nos interesa la división de entrenamiento.

Antes de alimentar los datos en una tarea de entrenamiento o inferencia, queremos que todos nuestros datos de audio tengan la misma frecuencia de muestreo. Eso se hace mediante el método `Audio` en el código.

Podemos ver ejemplos individuales de la siguiente manera:

example = minds[0]
example

Salida

{‘path’: ‘/root/.cache/huggingface/datasets/downloads/extracted/a19fbc5032eacf25eab0097832db7b7f022b42104fbad6bd5765527704a428b9/en-AU~PAY_BILL/response_4.wav’,‘audio’: {‘path’: ‘/root/.cache/huggingface/datasets/downloads/extracted/a19fbc5032eacf25eab0097832db7b7f022b42104fbad6bd5765527704a428b9/en-AU~PAY_BILL/response_4.wav’,‘array’: array([2.36119668e-05, 1.92324660e-04, 2.19284790e-04, …,9.40907281e-04, 1.16613181e-03, 7.20883254e-04]),‘sampling_rate’: 16000},‘transcription’: ‘Me gustaría pagar mi factura de electricidad con mi tarjeta, ¿puede ayudarme, por favor?’,‘english_transcription’: ‘Me gustaría pagar mi factura de electricidad con mi tarjeta, ¿puede ayudarme, por favor?’,‘intent_class’: 13,‘lang_id’: 2}

Es muy sencillo de entender. Es un diccionario de Python con niveles. Tenemos la ruta y la frecuencia de muestreo almacenadas. Observe la clave transcription en el diccionario. Esto contiene la etiqueta cuando nos interesa el Reconocimiento Automático del Habla. [“audio”][“aray”] contiene los datos de audio que usaremos para entrenar o inferir.

Podemos escuchar fácilmente cualquier ejemplo de audio que deseemos.

from IPython.display import Audio as aud

aud(example["audio"]["array"], rate=16_000)

Puede escuchar el audio en el Cuaderno de Colab.

Ahora, tenemos una idea clara de cómo se ve exactamente los datos y cómo está estructurado. Ahora podemos avanzar para obtener inferencias de un modelo preentrenado para el Reconocimiento Automático del Habla.

Explorando el Huggingface Hub para Modelos

El Huggingface hub tiene muchos modelos que se pueden utilizar para diversas tareas como generación de texto, resumen, análisis de sentimientos, clasificación de imágenes, etc. Podemos ordenar los modelos en el hub según la tarea que deseamos. Nuestro caso de uso es de voz a texto, y exploraremos modelos diseñados específicamente para esta tarea.

Para esto, debe navegar a https://huggingface.com/models y luego, en la barra lateral izquierda, hacer clic en la tarea que desea. Aquí puede encontrar modelos que puede usar tal cual o encontrar un buen candidato para ajustar su tarea específica.

En la imagen anterior, ya he seleccionado el Reconocimiento Automático del Habla como la tarea, y obtengo todos los modelos relevantes que se enumeran a la derecha.

Observe los diferentes modelos preentrenados. Una arquitectura como wav2vec2 puede tener muchos modelos ajustados a conjuntos de datos particulares.

Necesitas hacer algunas búsquedas y recordar los recursos que puedes usar para utilizar ese modelo o ajustarlo.

Creo que el wav2vec2-base-960h de Facebook será apto para nuestra tarea. Nuevamente, te animo a ir a la página del modelo y leer la tarjeta del modelo.

Obteniendo Inferencia con el Método de Pipeline

Huggingface tiene una API muy amigable que puede ayudar con varias tareas relacionadas con transformers. Sugiero revisar un cuaderno de Kaggle que he creado que te da muchos ejemplos de cómo usar el método de Pipeline: Una Introducción Gentil al Pipeline de Huggingface.

Previamente, encontramos el modelo que necesitábamos para nuestra tarea, y ahora lo utilizaremos con el método de Pipeline que vimos en la sección anterior.

Primero, instala la biblioteca transformers de Huggingface.

pip install transformers

Luego, importa la clase Pipeline y selecciona la tarea y el modelo.

from transformers import pipeline

asr = pipeline("automatic-speech-recognition",

               model="facebook/wav2vec2-base-960h")

print(asr(example["audio"]["example"])) # example es un ejemplo del conjunto de datos

La salida es:

{'text': 'ME GUSTARÍA PAGAR MI FACTURA DE ELECTRICIDAD USANDO MI TARJETA DE CRÉDITO ¿PUEDES AYUDARME, POR FAVOR?'}

Puedes ver que coincide muy bien con la anotación que vimos anteriormente.

De esta manera, puedes obtener inferencia de cualquier otro ejemplo.

Conclusión

En esta guía, he cubierto los conceptos básicos del procesamiento y exploración de datos de audio y los conceptos básicos del Aprendizaje Automático de Audio. Después de una breve discusión de la arquitectura Transformer para el aprendizaje automático de audio, te mostré cómo usar conjuntos de datos de audio en el hub de Huggingface y cómo usar modelos pre-entrenados utilizando el hub de modelos de Huggingface.

Puedes usar este flujo de trabajo para muchos problemas relacionados con el audio y resolverlos aprovechando las arquitecturas de los transformadores.

Aspectos Clave

  • El Aprendizaje Automático de Audio se preocupa por resolver problemas relacionados con el audio que surgen en el mundo real en el dominio del audio, utilizando técnicas de Aprendizaje Automático.
  • Dado que los datos de audio se almacenan como una secuencia de números, se pueden tratar como un problema relacionado con secuencias y resolverlos utilizando las herramientas que ya tenemos para resolver otros problemas relacionados con secuencias.
  • Dado que los Transformadores resuelven con éxito problemas relacionados con secuencias, podemos utilizar arquitecturas de Transformadores para resolver problemas de audio.
  • Dado que los datos de voz y los datos de audio en general varían ampliamente debido a factores como la edad, el acento, el hábito de hablar, etc., siempre es mejor utilizar soluciones ajustadas a conjuntos de datos específicos.
  • Huggingface tiene muchas soluciones relacionadas con el audio en cuanto a conjuntos de datos, modelos entrenados y medios fáciles para utilizar y ajustar el entrenamiento y el ajuste fino.

Recursos

1. Curso de Aprendizaje Automático de Audio de Huggingface para aprender más sobre el Aprendizaje Automático de Audio

2. Think DSP de Allen Downey para profundizar en el Procesamiento Digital de Señales

Preguntas Frecuentes

Los medios mostrados en este artículo no pertenecen a Analytics Vidhya y se utilizan a discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Dentro del acalorado centro del pesimismo de la IA

Anthropic, una start-up de inteligencia artificial centrada en la seguridad, está tratando de competir con ChatGPT mi...

Noticias de Inteligencia Artificial

Utilice AWS CDK para implementar configuraciones del ciclo de vida de Amazon SageMaker Studio.

Amazon SageMaker Studio es el primer entorno de desarrollo integrado (IDE) completamente para machine learning (ML). ...