Si ha estado sumergiéndose en el dominio del reconocimiento automático de voz ("ASR"), es muy probable que se haya topado con wav2vec 2.0 ("wav2vec2") de Meta AI Research. Hay algunos recursos técnicos excelentes, entre ellos el documento wav2vec2 original , que describe cómo funciona el modelo de aprendizaje automático ("ML"). Además, el equipo de Meta AI Research tiene una buena descripción general de wav2vec2 en su sitio web.
Le animo a que le eche un vistazo, ya que ofrece un buen resumen del artículo académico y las ilustraciones del modelo wav2vec2 de este artículo provienen de esa página. Teniendo en cuenta lo anterior, no parece haber muchos artículos que expliquen wav2vec2 en "inglés sencillo". Intento hacer precisamente eso con este artículo.
Este artículo asume que comprende algunos conceptos básicos de ML y que está interesado en comprender cómo funciona wav2vec2 en un nivel alto, sin profundizar demasiado "en la maleza".
En consecuencia, las secciones siguientes intentan evitar muchos detalles técnicos en favor de explicaciones simples y analogías útiles cuando sea apropiado.
Dicho esto, es útil saber desde el principio que wav2vec2 se compone de 3 componentes principales: el codificador de funciones , el módulo de cuantificación y el transformador .
Cada uno de ellos se discutirá al iniciar la discusión con algunas ideas básicas mientras se avanza hacia puntos más complejos (pero aún digeribles). Tenga en cuenta que wav2vec2 se puede utilizar para otros fines además de ASR.
Dicho esto, lo que sigue aquí analiza el modelo en un contexto específico de ASR.
En el momento de su presentación en 2020, wav2vec2 ofrecía un marco novedoso para construir sistemas ASR. ¿Qué tenía de especial? Antes de wav2vec2, los sistemas ASR generalmente se entrenaban utilizando datos etiquetados . Es decir, los modelos anteriores se entrenaron con muchos ejemplos de audio de voz donde cada ejemplo tenía una transcripción asociada. Para explicar la idea, considere esta forma de onda:
No queda del todo claro qué representa esta forma de onda con solo mirarla. Pero, si te dicen que el hablante que generó este audio dijo las palabras "hola mundo", probablemente puedas hacer algunas conjeturas inteligentes sobre qué partes de la forma de onda corresponden con el texto que la representa.
Podrías suponer, correctamente, que el primer segmento de la forma de onda está asociado con la palabra "hola". De manera similar, los modelos ASR pueden aprender a realizar asociaciones entre segmentos de formas de onda de audio hablado y texto escrito.
Sin embargo, como señalan los investigadores originales de wav2vec2 en su artículo, "[muchos] sistemas de reconocimiento de voz requieren miles de horas de voz transcrita para alcanzar un rendimiento aceptable que no está disponible para la gran mayoría de los casi 7.000 idiomas que se hablan en todo el mundo".
Así, los investigadores de wav2vec2 inventaron un nuevo modelo en el que no es necesario tener "miles de horas de voz transcrita" para entrenar el sistema. Hacen referencia a una útil analogía humana: los bebés no aprenden a hablar escuchando una palabra y luego viendo inmediatamente una representación textual de esa palabra.
Aprenden representaciones del habla escuchando a las personas de su entorno (por ejemplo, sus padres, hermanos, etc.). wav2vec2 aprende de forma análoga: escuchando primero.
Por supuesto, cómo se logra esto es el tema de discusión en este artículo. Tenga en cuenta que wav2vec2 está diseñado en términos generales para lograr 2 cosas :
Aprenda cuáles son las unidades de habla que deben recibir muestras de audio sin etiquetar.
Predecir unidades de habla correctas.
En este punto, no es necesario que comprenda completamente lo que significan estos puntos. Se explicarán a continuación. Mantenlos en la parte posterior de tu cabeza por ahora.
Imagine que tiene un enorme conjunto de datos de muestras de audio, por ejemplo, para algunos angloparlantes. Incluso sin una formación formal en fonética , es posible que comprenda intuitivamente que el idioma inglés se vocaliza utilizando un conjunto de sonidos básicos que están "entrelazados" para formar palabras, oraciones, etc.
Por supuesto, si eres hablante de inglés, no piensas en hablar de esta manera y tus vocalizaciones de lo que quieras decir son más o menos automáticas. Pero la cuestión es que el idioma inglés hablado (y en realidad cualquier idioma hablado) se puede descomponer en sonidos más básicos y discretos.
Si de alguna manera pudiéramos convencer a un modelo ASR para que "extraiga" estos sonidos básicos, nos permitiría codificar cualquier muestra de audio del lenguaje hablado usándolos. Esto es lo que hace wav2vec2 mediante el entrenamiento previo con datos de audio.
El preentrenamiento, en este contexto, significa que la primera parte del entrenamiento del modelo es autosupervisada en la medida en que no se "dice" explícitamente cuáles deberían ser los sonidos básicos para un conjunto determinado de datos de audio.
Profundizando un poco más, el sistema recibe una gran cantidad de ejemplos de solo audio y, a partir de esos ejemplos, puede aprender un conjunto de unidades básicas del habla .
Por lo tanto, cada ejemplo de audio se compone efectivamente de alguna combinación de esas unidades de habla; de la misma manera que puedes dividir una muestra de audio hablado en una secuencia de fonemas .
Es importante destacar que las unidades de habla básicas que aprende wav2vec2 son más cortas que los fonemas y tienen una duración de 25 milisegundos.
La pregunta que surge en este punto es: ¿Cómo aprende wav2vec2 estas unidades de voz sólo a partir del audio?
El proceso de aprendizaje de unidades de habla comienza con el codificador de funciones. wav2vec2 "codifica audio de voz a través de una red neuronal convolucional multicapa".
Las redes neuronales convolucionales, o CNN, son modelos que nos permiten aprender características de una entrada determinada sin que esas características se identifiquen explícitamente de antemano.
Se puede considerar que cada capa de una CNN extrae características de una entrada, y esas características se vuelven cada vez más complejas a medida que se asciende a capas superiores.
En el caso de los datos de audio, podría imaginarse la primera capa de una CNN examinando ventanas de información de audio y extrayendo características de bajo nivel, como sonidos primitivos.
Una capa posterior en la misma CNN, aprovechando las características de nivel inferior extraídas en capas anteriores, codificaría características de nivel superior, como sonidos que se aproximan a fonemas.
Siguiendo esta idea, wav2vec2 puede comenzar a "aprender qué unidades de voz deben recibir muestras de audio sin etiquetar" pasando segmentos de tiempo de cada ejemplo de audio al codificador de funciones y generando una representación latente de cada segmento.
Sin embargo, el conjunto de representaciones latentes no representa unidades de habla discretas. Estas representaciones deben discretizarse de alguna manera. Esto se logra pasando la salida del codificador de funciones a un módulo de cuantificación .
Efectivamente, el módulo de cuantización toma todas las diferentes representaciones de audio generadas por el codificador de funciones y las reduce a un conjunto finito de unidades de voz. Vale la pena preguntar en este punto si wav2vec2 debería entrenarse previamente en un solo idioma o en una variedad de idiomas.
La lógica nos dice que capturar unidades de habla que representan varios idiomas en lugar de un solo idioma probablemente sea más útil al diseñar sistemas ASR que se puedan usar en muchos idiomas.
Con ese fin, el entrenamiento previo de wav2vec2 con una selección de muestras de audio multilingües permite que el modelo produzca unidades de habla que de hecho capturan múltiples idiomas.
Los investigadores de wav2vec2 notaron el valor detrás de este enfoque ya que "para algunos idiomas, incluso los datos [de audio] son limitados". Sus hallazgos originales determinaron "que algunas unidades se usan sólo para un idioma en particular, mientras que otras se usan en idiomas similares y, a veces, incluso en idiomas que no son muy similares".
El inventario de unidades de habla es un primer paso para poder codificar muestras de audio del lenguaje hablado. Pero lo que realmente queremos lograr es entrenar a wav2vec2 sobre cómo estas unidades se relacionan entre sí.
En otras palabras, queremos entender qué unidades del habla es probable que ocurran en el mismo contexto entre sí. wav2vec2 aborda esta tarea a través de la capa Transformer.
Básicamente, Transformer permite a wav2vec2 aprender, en un sentido estadístico, cómo se distribuyen las unidades de voz entre los distintos ejemplos de audio. Esta comprensión facilita la codificación de muestras de audio que el modelo "verá" después del entrenamiento previo.
En última instancia, un sistema ASR debe poder generar una transcripción de texto para una secuencia determinada de audio que no haya "visto" antes. Después del entrenamiento previo mediante los pasos descritos anteriormente, wav2vec2 se ajusta para este propósito. Esta vez al modelo se le muestran explícitamente ejemplos de muestras de audio y sus transcripciones asociadas.
En este punto, el modelo puede utilizar lo que aprendió durante el entrenamiento previo para codificar muestras de audio como secuencias de unidades de habla y asignar esas secuencias de unidades de habla a letras individuales en el vocabulario que representa las transcripciones (es decir, las letras "a" a " z" en el caso del inglés).
El aprendizaje durante el ajuste final completa el entrenamiento del modelo wav2vec2 y le permite predecir el texto para nuevos ejemplos de audio que no formaron parte de su entrenamiento durante el ajuste.
Por supuesto, la mecánica de bajo nivel de wav2vec2 es mucho más compleja que la presentada anteriormente. Sin embargo, para reiterar, la idea de este artículo es brindarle una comprensión conceptual simple de cómo funciona el modelo y cómo se entrena.
wav2vec2 es un marco de aprendizaje automático muy potente para crear sistemas ASR y su variación XLS-R introducida a finales de 2021 se entrenó en 128 idiomas, lo que proporciona una plataforma mejorada para diseñar modelos ASR en varios idiomas.
Como se mencionó en la Introducción, hay una serie de excelentes recursos técnicos disponibles para ayudarlo a obtener más información. En particular, los proporcionados por Hugging Face pueden resultarle especialmente útiles.