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.
- ¿Cómo cambiar tu carrera de Marketing a Ciencia de Datos?
- Reduciendo la huella de carbono en el entrenamiento de IA mediante la optimización
- Investigadores de IA de Google presentan Pic2Word Un nuevo enfoque para la recuperación de imágenes compuestas sin disparo (ZS-CIR)
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Conoce a PoisonGPT Un método de IA para introducir un modelo malicioso en una cadena de suministro de LLM de otra manera confiable
- Informe de la OCDE el 27% de los empleos están en alto riesgo debido a la IA
- La IA está ayudando a los pacientes de ELA a preservar su voz
- 14 Mejores Proyectos de Minería de Datos con Código Fuente
- Google Research presenta SPAE un AutoEncoder para generación multimodal con Modelos de Lenguaje (LLMs) grandes congelados.
- Riesgos de la IA y la Extinción El Futuro Precario de la Humanidad en Medio de una Revolución de la IA
- Un grupo de investigación de CMU, AI2 y la Universidad de Washington presenta NLPositionality un marco de inteligencia artificial para caracterizar sesgos de diseño y cuantificar la posicionamiento de conjuntos de datos y modelos de procesamiento del lenguaje natural (NLP).