Il linguaggio parlato.
Il trattamento automatico del linguaggio parlato è una delle aree più interessanti ed affascinanti dell' Intelligenza Artificiale (IA) di oggi.
Le aree potenziali e pratiche di applicazione sono tantissime: dalla trascrizione automatica dei meeting, alla possibilità di registrare e trascrivere velocemente note senza dover accedere ad una tastiera (es: da uno smartphone), alla possibilità di utilizzare un'interfaccia conversazionale basata su comandi vocali e non su tastiera.
Basta pensare a quante ore di lavoro a volte faticoso e tedioso potrebbero essere risparmiate. Un esempio per tutti: la trascrizione delle lezioni universitarie.
Ma pensiamo anche alla possibilità di combinare la trascrizione con la traduzione. Sarebbe, se ampiamente disponibile, uno strumento eccezionale per abbattere le barriere linguistiche in tutte quelle situazioni in cui, magari per necessità, si incontrano persone che non parlano bene la nostra lingua.
Si, lo so bene, oramai sono disponibili ed alla portata del grande pubblico assistenti vocali (es: Alexa, Google Home, Siri) che comprendono abbastanza bene i comandi vocali e ci permettono di impostare sveglie, chiedere di ascoltare la musica o di leggere la nostra posta elettronica.
Ma, purtroppo, questi strumenti sono legati in maniera forte ad un fornitore di servizi, che vuole comunque creare fidelizzazione.
La domanda invece che mi sono posto di recente, come parte del mio lavoro ma anche dei miei interessi personali, è: quanto sono disponibili, in formato aperto (Open Source) queste tecnologie?
La domanda è legata ad un "pattern di utilizzo" che può capitare: partendo da un modello di riconoscimento della lingua parlata addestrato sul "linguaggio comune, di tutti i giorni" io voglio addestrarlo per funzionare bene, ed avere un'accuratezza adeguata, su un linguaggio specializzato, di dominio, in cui è molto frequente l'utilizzo di termini che non sono utilizzati nelle conversazioni giornaliere.
E' evidente che, se voglio fare un addestramento custom, devo avere accesso alla tecnologia di base. In qualche misura al codice sorgente.
Bene, devo dire che sono stato abbastanza fortunato: oggi questa disponibilità c'è e sopratutto vi è una comunità ampia di persone, che hanno voglia di collaborare, portando contributi ed innovazione.
Gli strumenti necessari.
Se vogliamo addestrare un modello di Automatic Speech Recognition (ASR) abbiamo bisogno di:
- dataset (esempi)
- modelli pre-trained
- codice Python da cui partire
Iniziamo, come sempre opportuno, dai dati.
Dataset.
Ricordiamo sempre che la conoscenza, in una rete neurale, viene sempre dai dati utilizzati per addestrarla. L'architettura del modello (rete) consente soltanto di utilizzare al meglio questi dati.
E' quindi fondamentale, per avere buone probabilità di successo, partire da uno o più dataset di qualità.
Nel nostro caso, un dataset di addestramento (train) dovrà essere formato da coppie (audio, trascrizione). Ovviamente lo stesso per i dataset di validazione/test.
Nel concreto i dataset saranno costituiti da un insieme di coppie formate dal file contenente la registrazione audio + la trascrizione del parlato. Un dataset di questo tipo consente di attuare il classico approccio dell'apprendimento con supervisione.
Vi sono una serie di dettagli tecnici di cui essere consapevoli e tenere conto. Riguardano, ovviamente, sopratutto l'audio, che costituisce un tipo di dato più complesso. Ma vi sono particolari di cui essere a conoscenza anche per la trascrizione.
Per quanto riguarda l'audio si deve tener presente che, anche se utilizziamo un formato non compresso (come il WAV), l'audio può essere:
- mono o stereo
- campionato a frequenze differenti.
Ovviamente, il criterio da adottare è che, se vogliamo fare un "fine tuning" di un modello pre-trained, dobbiamo utilizzare degli audio che abbiamo le stesse caratteristiche di quelli parte del dataset su cui il modello pre-trained è stato addestrato.
Se noi effettuiamo le registrazioni, potremmo bene avere file
- stereo
- con una frequenza di campionamento elevata (es: 44 KHz)
ma, come vedremo, quasi sempre i modelli pre-trained disponibili sono stati addestrati su file
- mono
- a 16 Khz
Se vi è differenza, dovremo effettuare un pre-processing degli audio. Esistono tante ottime librerie Python che consentono di fare il pre-processing, che però richiederà tempo e spazio.
Per quanto riguarda la qualità del dataset, è bene aver presente che se dobbiamo passare da una frequenza di campionamento superiore (es: 44 Khz) ad una inferiore (16 Khz), il "downsampling" non comporta significativa perdita di qualità. Il problema invece si ha se l'audio che abbiamo a disposizione è stato campionato a frequenza inferiore (es: nel passaggio 8 -> 16 Khz).
In che modalità salviamo poi i dataset da utilizzare?
Volendo partire dalla teoria, se utilizziamo il framework PyTorch, dovremmo scrivere od utilizzare una classe derivata da Dataset, implementando i due soliti metodi:
- __len__
- __get_item__
effettuando poi la trasformazione del file audio in un Tensor.
Il file audio, se non compresso, conterrà essenzialmente una serie temporale (se mono, due se stereo). Un grande vettore unidimensionale in cui ogni punto rappresenta la variazione della pressione, nel punto in cui era collocato il microfono, nel tempo.
Se pensiamo ad una frequenza di 16 Khz, ovvero 16000 valori campionati al secondo, ci rendiamo subito conto del fatto che già un audio di 10 sec. diviene un file non proprio di piccole dimensioni (dell'ordine di 100K). Questo ci permette di capire che, sopratutto se abbiamo a che fare con centinaia di migliaia di esempi, la dimensione complessiva del dataset è dell'ordine di svariati Gigabyte e conviene utilizzare un formato più compatto (del wav).
In realtà, molte delle persone che lavorano in questo campo, ovviamente, utilizzano librerie e framework specializzati. Ed oggi molti degli strumenti e dei modelli più avanzati sono disponibili utilizzando la libreria "Transformers" di Hugging Face.
Pertanto, può convenire salvare i dataset nel formato previsto dai dataset di HF.
Ciò, oltre alla facile integrazione con Transformers, consente anche di salvare e condividere, eventualmente, il dataset sull' HuggingFace Hub.
Ma se vogliamo semplicemente fare il fine tuning di un modello su un linguaggio (es: l'Italiano) esistono dataset disponibili?
La risposta è si.
Un esempio, importante e di qualità, è costituito dal dataset "Common Voice ver. 11" di Mozilla Foundation.
Il dataset è disponibile su HuggingFace Hub (vedi: https://huggingface.co/datasets/mozilla-foundation/common_voice_11_0).
Inoltre, è disponibile uno "split" per la lingua italiana, che comprende:
-
152609 esempi nel dataset "train"
-
14997 esempi nel dataset "validation"
-
15003 in "test"
Modelli pre-trained.
Per costruire un modello che sia in grado di riconoscere e trascrivere il parlato con elevata accuratezza in estrema sintesi ci vogliono questi ingredienti:
- una rete neurale con architettura valida (es: Transformer), di capacità adeguata per apprendere (quindi: almeno centinaia di milioni di parametri)
- un dataset molto ampio (e parliamo di milioni di esempi
- la capacità computazionale (GPU) per effettuare l'addestramento in tempi ragionevoli.
La capacità computazionale necessaria (ed il tempo da dedicare) sono tipicamente non alla portata di tutti. Ma il meccanismo del "Transfer Learning" consente di partire da un modello pre-addestrato e di effettuare poi un fine-tuning sul linguaggio di dominio specifico.
E l'esperienza mostra che è possibile ottenere buoni/ottimi risultati anche soltanto con migliaia di esempi.
Ovviamente la ricerca in questo campo e la condivisione nel mondo Open Source hanno fatto molti passi avanti negli ultimi anni e molti modelli sono disponibili.
Esamineremo:
- I modelli basati su CTC (WAVE2VEC 2 e XLS-R, di Meta AI)
- Il nuovissimo Whisper, di OpenAI
Tutti questi modelli sono utilizzabili attraverso la libreria Transformers di HuggingFace.
* SpeechBrain
* HuggingFace
* Il lavoro ed i contributi di META AI
* per finire: lo stato dell'arte: OpenAI Whisper.
Come potete vedere, l'articolo è WIP... conto di terminarlo con un insieme significativo di contenuti per la prima settimana di dicembre 2022. Stay tuned.