Se você está mergulhando no domínio do reconhecimento automático de fala ("ASR"), há uma boa chance de ter encontrado o wav2vec 2.0 ("wav2vec2") da Meta AI Research. Existem alguns recursos técnicos excelentes, entre eles o próprio artigo wav2vec2 original , que descreve como funciona o modelo de aprendizado de máquina ("ML"). Além disso, a equipe Meta AI Research tem uma boa visão geral do wav2vec2 em seu site.
Eu encorajo você a dar uma olhada nele, pois ele oferece um bom resumo do trabalho acadêmico e as ilustrações do modelo wav2vec2 neste artigo são provenientes dessa página. Com o que foi dito acima em mente, não parece haver muitos artigos que expliquem wav2vec2 em "inglês simples". Tento fazer exatamente isso com este artigo.
Este artigo pressupõe que você entenda alguns conceitos básicos de ML e que esteja interessado em entender como o wav2vec2 funciona em alto nível, sem se aprofundar muito "no mato".
Conseqüentemente, as seções subsequentes tentam evitar muitos detalhes técnicos em favor de explicações simples e analogias úteis quando apropriado.
Dito isto, é útil saber desde o início que wav2vec2 é composto por três componentes principais: o Feature Encoder , o Quantization Module e o Transformer .
Cada um será discutido no início da discussão com algumas ideias básicas enquanto se desenvolve pontos mais complexos (mas ainda assim digeríveis). Tenha em mente que wav2vec2 pode ser usado para outros fins além do ASR.
Dito isto, o que se segue aqui discute o modelo num contexto específico de ASR.
Na época em que foi introduzido em 2020, o wav2vec2 oferecia uma nova estrutura para a construção de sistemas ASR. O que havia de tão especial nisso? Antes do wav2vec2, os sistemas ASR geralmente eram treinados usando dados rotulados . Ou seja, os modelos anteriores foram treinados em muitos exemplos de áudio de fala, onde cada exemplo tinha uma transcrição associada. Para explicar a ideia, considere esta forma de onda:
Não está totalmente claro o que esta forma de onda representa apenas olhando para ela. Mas, se lhe disserem que o locutor que gerou este áudio disse as palavras “olá, mundo”, você provavelmente poderá fazer algumas suposições inteligentes sobre quais partes da forma de onda correspondem ao texto que a representa.
Você pode supor – corretamente – que o primeiro segmento da forma de onda está associado à palavra “olá”. Da mesma forma, os modelos ASR podem aprender como fazer associações entre segmentos de formas de onda de áudio falado e texto escrito.
No entanto, como salientam os investigadores originais do wav2vec2 no seu artigo, “[muitos] sistemas de reconhecimento de voz requerem milhares de horas de fala transcrita para alcançar um desempenho aceitável que não está disponível para a grande maioria dos quase 7.000 idiomas falados em todo o mundo”.
Assim, os investigadores do wav2vec2 inventaram um novo modelo onde não é necessário ter “milhares de horas de fala transcrita” para treinar o sistema. Eles fazem referência a uma analogia humana útil: os bebês não aprendem a falar ouvindo uma palavra e vendo imediatamente uma representação textual dessa palavra.
Eles aprendem representações da fala ouvindo as pessoas do seu ambiente (por exemplo, seus pais, irmãos, etc.). wav2vec2 aprende de maneira análoga: ouvindo primeiro.
Claro, como isso é conseguido é o ponto de discussão neste artigo. Tenha em mente que o wav2vec2 foi amplamente projetado para realizar duas coisas :
Aprenda quais unidades de fala devem receber amostras de áudio não rotuladas.
Preveja unidades de fala corretas.
Neste ponto, você não precisa entender completamente o que esses pontos significam. Eles serão explicados abaixo. Apenas mantenha-os na sua cabeça por enquanto.
Imagine que você tem um enorme conjunto de dados de amostras de áudio - digamos, de alguns falantes de inglês. Mesmo sem uma formação formal em fonética , você pode entender intuitivamente que a língua inglesa é vocalizada por meio de um conjunto de sons básicos que são “ligados” para formar palavras, frases, etc.
Claro, se você fala inglês, você não pensa em falar dessa forma e suas vocalizações do que quer que você queira dizer são mais ou menos automáticas! Mas a questão é que a língua inglesa falada – e na verdade qualquer língua falada – pode ser decomposta em sons mais básicos e discretos.
Se pudéssemos de alguma forma persuadir um modelo ASR a “extrair” esses sons básicos, isso nos permitiria codificar qualquer amostra de áudio da linguagem falada usando-os. Isso é o que o wav2vec2 faz ao pré-treinar dados de áudio.
Pré-treinamento, neste contexto, significa que a primeira parte do treinamento do modelo é auto-supervisionada, na medida em que não é explicitamente "informado" quais devem ser os sons básicos para um determinado conjunto de dados de áudio.
Indo um pouco mais fundo, o sistema é “alimentado” com um grande número de exemplos somente de áudio e, a partir desses exemplos, é capaz de aprender um conjunto de unidades básicas de fala .
Assim, cada exemplo de áudio é efetivamente composto por alguma combinação dessas unidades de fala; da mesma forma que você pode dividir uma amostra de áudio falada em uma sequência de fonemas .
É importante ressaltar que as unidades básicas de fala que o wav2vec2 aprende são mais curtas que os fonemas e têm 25 milissegundos de duração.
A questão que surge neste momento é: Como o wav2vec2 aprende essas unidades de fala apenas com o áudio?
O processo de aprendizagem de unidades de fala começa com o Feature Encoder. wav2vec2 "codifica o áudio da fala por meio de uma rede neural convolucional multicamadas."
Redes neurais convolucionais, ou CNNs, são modelos que nos permitem aprender recursos de uma determinada entrada sem que esses recursos sejam explicitamente identificados de antemão.
Cada camada de uma CNN pode ser considerada como uma extração de recursos de uma entrada, com esses recursos se tornando cada vez mais complexos à medida que você avança para camadas superiores.
No caso de dados de áudio, você pode imaginar a primeira camada de uma CNN examinando janelas de informações de áudio e extraindo recursos de baixo nível, como sons primitivos.
Uma camada posterior na mesma CNN, aproveitando os recursos de nível inferior extraídos nas camadas anteriores, codificaria recursos de nível superior, como sons que se aproximam de fonemas.
Seguindo essa ideia, wav2vec2 pode começar a "aprender quais unidades de fala devem receber amostras de áudio não rotulado" passando intervalos de tempo de cada exemplo de áudio para o Feature Encoder e gerando uma representação latente de cada fatia.
Contudo, o conjunto de representações latentes não representa unidades de fala discretas. Essas representações devem ser discretizadas de alguma forma. Isso é feito passando a saída do Feature Encoder para um Módulo de Quantização .
Efetivamente, o Módulo de Quantização pega todas as diferentes representações de áudio geradas pelo Feature Encoder e as reduz a um conjunto finito de unidades de fala. Vale a pena perguntar neste momento se o wav2vec2 deve ser pré-treinado em um único idioma ou em vários idiomas.
A lógica nos diz que capturar unidades de fala que representam vários idiomas em vez de um único idioma provavelmente será mais útil ao projetar sistemas ASR que possam ser usados em vários idiomas.
Para esse fim, o pré-treinamento do wav2vec2 com uma seleção de amostras de áudio multilíngues permite que o modelo produza unidades de fala que de fato capturam vários idiomas.
Os investigadores do wav2vec2 notaram o valor por trás dessa abordagem, já que "para alguns idiomas, até mesmo os dados [de áudio] são limitados". Suas descobertas originais determinaram "que algumas unidades são usadas apenas para um idioma específico, enquanto outras são usadas em idiomas semelhantes e às vezes até em idiomas que não são muito semelhantes".
O inventário de unidades de fala é um primeiro passo para poder codificar amostras de áudio da linguagem falada. Mas o que realmente queremos alcançar é treinar wav2vec2 em como essas unidades se relacionam entre si.
Em outras palavras, queremos entender quais unidades de fala provavelmente ocorrerão no mesmo contexto . wav2vec2 aborda essa tarefa por meio da camada Transformer.
O Transformer permite essencialmente que o wav2vec2 aprenda, num sentido estatístico, como as unidades de fala estão distribuídas entre os vários exemplos de áudio. Esse entendimento facilita a codificação de amostras de áudio que o modelo “verá” após o pré-treinamento.
Em última análise, um sistema ASR precisa ser capaz de gerar uma transcrição de texto para uma determinada sequência de áudio que não tenha sido “vista” antes. Após o pré-treinamento através das etapas descritas acima, o wav2vec2 é ajustado para essa finalidade. Desta vez, o modelo mostra explicitamente exemplos de amostras de áudio e suas transcrições associadas.
Neste ponto, o modelo é capaz de utilizar o que aprendeu durante o pré-treinamento para codificar amostras de áudio como sequências de unidades de fala e mapear essas sequências de unidades de fala para letras individuais no vocabulário que representa as transcrições (ou seja, as letras "a" a " z" no caso do inglês).
O aprendizado durante o ajuste fino completa o treinamento do modelo wav2vec2 e permite prever o texto para novos exemplos de áudio que não fizeram parte de seu treinamento durante o ajuste fino.
É claro que a mecânica de baixo nível do wav2vec2 é muito mais complexa do que a apresentada acima. Porém, para reiterar, a ideia deste artigo é fornecer uma compreensão simples e conceitual de como o modelo funciona e como ele é treinado.
wav2vec2 é uma estrutura de ML muito poderosa para a construção de sistemas ASR e sua variação XLS-R introduzida no final de 2021 foi treinada em 128 idiomas, fornecendo assim uma plataforma aprimorada para projetar modelos ASR em vários idiomas.
Conforme mencionado na Introdução, há vários recursos técnicos excelentes disponíveis para ajudá-lo a aprender mais. Em particular, você pode achar aqueles fornecidos pelo Hugging Face especialmente úteis.