Nuestros comentarios sobre el Whisper Fine-Tuning Event

27/02/2024

Bofeng Huang

Ingeniero de Aprendizaje Automático en Zaion trabajando en reconocimiento del habla (ASR) y procesamiento automático del lenguaje natural (NLP).

 

Según OpenAI, la robustez y precisión del reconocimiento del habla inglesa nunca ha sido tan cercana a la humana como con su nuevo modelo Whisper. En esta entrada del blog, explicamos nuestro enfoque para perfeccionar el modelo Whisper con el fin de alcanzar este nivel de rendimiento en otros idiomas. Este trabajo nos valió el primer premio en el Whisper Fine-Tuning Eventorganizado por HuggingFace 🤗 y Lambda Labs, tanto en francés como en alemán. Los modelos modelos y las demos de este evento están disponibles en Hugging Face Hub.

POR GEORGE MARKS/RETROFILE/GETTY IMAGES.

 

Prólogo

Soy ingeniero de aprendizaje automático en Zaion, líder del mercado europeo en soluciones de IA para las relaciones con los clientes. Uno de los objetivos de Zaion es ofrecer una transcripción exacta y precisa de las conversaciones de atención al cliente. Por eso es crucial para nosotros contar con un sistema de reconocimiento de voz de reconocimiento que sea fiable, robusto y esté preparado para su uso en condiciones reales.

En Zaion Laboratorioel equipo de investigación de Zaion, estamos constantemente a la búsqueda de las últimas tendencias y avances en el reconocimiento de voz. Tuve la oportunidad de participar en el Susurro Fine-Tuning Whisper organizado por Hugging Face 🤗 y Lambda Labs, cuyo objetivo es democratizar el uso del modelo Whisper y hacerlo robusto para el mayor número de idiomas posible. Participé en los retos lingüísticos de francés y alemán, y gané el primer premio de ambos (tabla de clasificación).

En septiembre de 2022, OpenAI lanzó un modelo de reconocimiento automático del habla (ASR) preentrenado llamado Whisper. Los modelos de aprendizaje autosupervisado, como wav2vec 2.0, suelen preentrenarse en tareas de predicción enmascarada con datos de audio sin etiquetar y, a continuación, se perfeccionan con datos etiquetados para diversas tareas posteriores, como el reconocimiento automático del habla. En cambio, los modelos de susurro se entrenan directamente con una gran cantidad de datos poco etiquetados recogidos de la web.

Este corpus consta de 680.000 horas de datos multilingües y multitarea que incluyen la transcripción en varios idiomas, la traducción de estos idiomas al inglés y la predicción de marcas de tiempo. A esta escala, el modelo es muy resistente a los acentos, el ruido de fondo y el lenguaje técnico.

Whisper es un secuencia a secuenciaun codificador-decodificador basado en Transformer, que asigna la representación del espectrograma de una grabación a la correspondiente secuencia de unidades subléxicas. Esta representación acústica se calcula mediante una transformación matemática a partir de las formas de onda de la señal en bruto y, a continuación, es analizada por el codificador Transformer. A continuación, el descodificador predice de forma autorregresiva la siguiente salida (o unidad subléxica) en función de las salidas anteriores y los estados ocultos del codificador. La figura siguiente resume la arquitectura del modelo.

La arquitectura del modelo Whisper. Fuente:Blog Whisper de OpenAI

En este blog, le mostraremos cómo afinar el medio Whisper en lengua francesa. Esta versión del modelo tiene 24 capas de codificación y descodificación y 769 millones de parámetros. El código completo se encuentra aquí.

 

Preparación de datos y modelos

Cargar el modelo

Empecemos cargando la versión media del modelo preentrenado Whisper:

Preparación de datos

Encontrará ciertos argumentos definidos en el modelo Whisper, como "forced_decoder_ids" y "suppress_tokens". Estos argumentos se definen en GenerationConfig para la tarea de generación; sin embargo, estos argumentos no se utilizan durante el entrenamiento para dejar que el modelo los aprenda por sí mismo.

También estamos desactivando la función use_cache en el descodificador Whisper. Esto nos permite reutilizar la clave y los valores calculados de los bloques de autoatención y atención cruzada para acelerar la actual etapa de descodificación. Sin embargo, es incompatible con control de gradiente que se aplicará en una etapa posterior para reducir la huella de memoria.

Carga de conjuntos de datos

 

Carga de conjuntos de datos

Utilizaremos la biblioteca 🤗 Datasets para descargar y preparar los conjuntos de datos. Mezclamos los datos de entrenamiento de Common Voice 11.0 y Multilingüe LibriSpeech para formar un conjunto de entrenamiento mayor, y sólo utilizamos los datos de prueba de Common Voice 11.0 para la evaluación.
Siempre se recomienda recopilar tantos datos de entrenamiento como sea posible. Hay otros conjuntos de datos de reconocimiento del habla disponibles en Hugging Face Hub, como por ejemplo Voxpopuli y Flores. Si desea cargar su corpus local, eche un vistazo a esta página.

La frecuencia de muestreo de la señal de audio es de 48 kHz en Common Voice y de 16 kHz en Multilingual LibriSpeech. Nos aseguramos de que las muestras de audio se remuestreen a 16kHz, no sólo para unificar la frecuencia de muestreo de los distintos conjuntos de datos, sino también porque ésta es la frecuencia de muestreo de 680.000 horas del corpus de preentrenamiento Whisper. El remuestreo puede realizarse fácilmente sobre la marcha mediante la función "cast_column y el método "Audio en Conjuntos de datos.

Para mezclar conjuntos de datos diferentes, también es necesario asegurarse de que todos los conjuntos de datos tienen los mismos campos de datos. En este caso, sólo conservamos la columna de audio y la frase de dos conjuntos de datos.

Datos de mezcla

 

Si tiene limitaciones de espacio en disco, puede cargar conjuntos de datos sobre la marcha utilizando el modo streaming.

Más datos

Hemos comprobado que las muestras de audio del conjunto de datos LibriSpeech Multilingual son bastante inteligibles. Para asegurarnos de que el modelo es robusto en entornos ruidosos y puede generalizarse a distintos hablantes, aumentamos los datos utilizando la biblioteca Biblioteca Audiomentations. Se aplican varios aumentos a las muestras de audio, entre ellos TimeStretch,Ganancia,PitchShifty uno de los botones AddBackgroundNoiseo AddGaussianNoise.

Este método de aumento se lleva a cabo de la siguiente manera:

Más datos

A continuación, aplicamos el incremento a todos los ejemplos de aprendizaje mediante el método del "mapa":

aprender

Nota: El aumento de datos sólo se realiza en el conjunto de entrenamiento. También conservamos una versión original del conjunto de entrenamiento y la combinamos con el conjunto de entrenamiento aumentado.

Normalización de textos

"Mientras que la diversidad en la calidad del audio puede ayudar a que un modelo sea robusto, la diversidad en la calidad de la transcripción no es tan beneficiosa".

La diversidad en este caso se refleja en el formato de transcripción, es decir, las mayúsculas y minúsculas y los signos de puntuación existen en el conjunto de datos Common Voice, pero no en el conjunto de datos Multilingual LibriSpeech. Debemos asegurarnos de que las transcripciones estén en minúsculas y eliminar los signos de puntuación cuando las utilicemos juntas. Esto simplificará la tarea, ya que el modelo no tendrá que distinguir entre mayúsculas y minúsculas ni predecir los signos de puntuación entre caracteres.

Sin embargo, si desea disponer de transcripciones fáciles de leer o que requieran mayúsculas y minúsculas o signos de puntuación, es preferible conservarlas y utilizar únicamente conjuntos de datos de mayúsculas y minúsculas y signos de puntuación como Voz comúnyFlores.

Conjuntos de datos

 

Nota: El modelo se evalúa siempre sobre transcripciones normalizadas, es decir, sin mayúsculas y sin puntuación.
Puede encontrar la normalización utilizada para el inglés y otros idiomas en el Apéndice C del artículo Whisper.

Preprocesamiento de datos

Encontrará la normalización utilizada para el inglés y otras lenguas en el apéndice C del artículo Susurro.

Como mostramos en la introducción, el modelo Whisper toma el espectrograma log-Mel como entrada y produce tokens BPE. Por lo tanto, tenemos que preparar nuestros datos en el formato adecuado. Esto puede hacerse mediante dos clases de utilidad: WhisperFeatureExtractor y WhisperTokenizer, utilizadas respectivamente en las entradas de audio y en las transcripciones o predicciones del modelo. La librería Transformer combina estas dos clases en una única clase WhisperProcessor, que puede cargarse como se muestra a continuación:

biblioteca de datos

Todo lo que tenemos que hacer es especificar el idioma de destino y la tarea, y WhisperTokenizer antepondrá los tokens de idioma y tarea correspondientes al codificar las transcripciones en ID de etiqueta.

Veamos qué hay en nuestra función de preparación de datos:

preparación de datos

A continuación, aplicamos la función de preparación de datos a todos los ejemplos del conjunto de datos mediante el método "map":

Métodos de tarjeta

Borrar audio largo

En el paso anterior, el WhisperFeatureExtractor truncó los ejemplos cuyo audio duraba más de 30 segundos. Si el audio está truncado, la transcripción no lo está, lo que desestabiliza gravemente el proceso de aprendizaje. Aquí definimos una función para filtrar cualquier audio de más de 30 segundos:

Supresión audio larga

A continuación, aplicamos nuestra función de filtro a todos los ejemplos mediante el método "filtro":

Método de filtrado

Borrar textos largos

El descodificador Whisper utiliza una representación de posición aprendida con una longitud máxima de 448 tokens. Por tanto, no puede descodificar una transcripción de más de 448 identificadores de token. Aquí definimos una función de filtro sobre los identificadores de etiqueta:

Borrar textos largos

A continuación, aplícalo a todos los ejemplos mediante el método "filtro":

Método de filtrado

 

Aprendizaje y evaluación

Compaginador de datos

El cotejador de datos toma una lista de muestras preprocesadas y las ensambla en un lote de tensores Pytorch. Debemos asegurarnos de que todas las características de audio del lote tengan la misma longitud, y esta regla también se aplica a todas las etiquetas del lote.

Las características de audio ya están rellenadas o truncadas a una dimensión fija por el "WhisperFeatureExtractor", por lo que sólo tenemos que convertirlas a tensores Pytorch utilizando el método "pad". En cambio, los identificadores de etiqueta no se rellenan. Primero tenemos que paginarlos hasta la longitud máxima del lote utilizando el método "pad", y después sustituir los tokens de paginación por "-100" para que estos tokens no se tengan en cuenta en el cálculo de pérdidas.

Definamos nuestro recopilador de datos del siguiente modo:

Compaginador de datos

A continuación, podemos inicializar el recopilador de datos que acabamos de definir:

Medidas de evaluación

Utilizamos la métrica de tasa de error de palabra (WER)métrica para evaluar el rendimiento del modelo. La métrica WER se puede cargar simplemente 🤗 Evaluar :

Evalúe

A continuación, tenemos que definir una función que tome los identificadores reales de los tokens y las predicciones del modelo y devuelva la métrica WER. En esta función, tenemos que sustituir "-100" por "pad_token_id" (anulando el paso en el recopilador de datos para ignorar los tokens rellenados) para que los identificadores de etiqueta se puedan destokenizar correctamente en cadenas.

De-tokened

Configuración de aprendizaje

En este paso definimos todos los parámetros relativos al aprendizaje. Para obtener más información sobre los demás argumentos de aprendizaje, consulte la documentación Seq2SeqTrainingArguments"." .

Definición de parámetros

Aprender

En el último paso, inicializamos el entrenador pasando como argumentos el modelo, el conjunto de datos, el recopilador de datos, los argumentos de entrenamiento y la función de cálculo de métricas.

Cálculo de métricas

¡Pongamos en marcha el aprendizaje!

¡Pongamos en marcha el aprendizaje!

No olvides guardar tu modelo y procesador una vez que hayas terminado el entrenamiento:

Aprendizaje realizado

 

¡Recapitulemos!

En este blog, presentamos una guía paso a paso para ajustar Whisper para ASR en datos franceses. La WER de Whisper mediose redujo del 16,00% al 9,03% en Common Voice. Con el Whisper grandeseha reducido del 13,90% al 8,15%.
Puede consultar aquí una demostración del ASR francés utilizando modelos Whisper ajustados.

También puede ajustar Whisper en otros idiomas: sólo tiene que recopilar y limpiar conjuntos de datos en ese idioma y, a continuación, especificar el código del idioma correspondiente cuando se cargue "WhisperProcessor".

Referencias

  1. Reconocimiento robusto del habla mediante una supervisión débil a gran escala
  2. Puesta a punto de Whisper para ASR multilingüe con 🤗 Transformadores
  3. Evento de puesta a punto de Whisper

Por último, me gustaría dar las gracias a mis colegas de Laboratorio Zaionpor su inestimable ayuda y sus constructivos comentarios: Mohamed Bouaziz, Tiphaine Fievet,Imed Laaridh,Lorraine Vanel,Yingzhi Wang yAlya Yacoubi¡!

Noticias Zaion

Manténgase al día de las últimas noticias, tendencias y análisis
en el campo de las relaciones con los clientes aumentadas por la IA conversacional, generativa y de voz.

Descubra las soluciones Zaion

* son necesarios