La sintesi vocale con le reti neurali ricorrenti

La sintesi vocale con le reti neurali ricorrenti

Condividi con i tuoi amici...

Se sei interessato ai servizi che offrono la sintesi e il riconoscimento vocale puoi leggere il seguente articolo:

l’AI sempre piu multimodale

Qui, possiamo menzionare Google Cloud Text-to-Speech offerto da Google.

Per scoprire cosa sono le reti neurali suggeriamo la lettura dei seguenti articoli:

Chiarezza sulle reti neurali

Reti neurali con Tensorflow: i principi su cui si basa l’apprendimento automatico

La sintesi vocale

La sintesi vocale è l’arte di convertire il testo scritto in suoni che somigliano alla voce umana. Questa tecnologia si basa su complessi algoritmi che analizzano il testo e lo traducono in fonemi e prosodie. Non è sufficiente semplicemente riconoscere le parole e riprodurle, bisogna anche imitare le sfumature e le intonazioni della voce umana.

La teoria prevalente sulla sintesi vocale si basa sull’utilizzo di modelli di concatenazione, che collegano frammenti di suoni preregistrati per formare parole e frasi. Nello specifico, gli algoritmi analizzano il testo, individuano le parole e selezionano i frammenti appropriati per concatenarli insieme e formare l’output vocale. Questo metodo, chiamato concatenative synthesis, ha reso possibile la creazione di voci sintetiche molto realistiche. Tuttavia, la riproduzione di suoni non preregistrati è ancora un problema aperto, così come l’adattamento alle diverse lingue e varietà linguistiche.

Grazie alle reti di intelligenza artificiale è possibile generare voce sintetica. Queste reti possono apprendere a generare una voce sintetica partendo da un set di dati di addestramento che contiene la corrispondenza tra testo e suono. Il vantaggio delle reti di AI rispetto alla concatenazione è che possono generare suoni che non sono stati preregistrati, offrendo un maggiore grado di flessibilità.

In questo articolo mostriamo come sia possibile addestrare l’AI per sintetizzare la voce umana.

Il seguente non costituisce un approfondimento completo in grado di esaurire l’argomento in quanto la sua complessità non va affatto sottovalutata. L’obiettivo è quello di fornire una comprensione della logica su cui si basano gli algoritmi di deep learning in grado di far parlare le macchine con qualsiasi voce umana. Per un approfondimento matematico delle reti neurali coinvolte nella sintesi vocale ti rimandiamo al testo “Deep Learning” di Ian Goodfellow Yoshua Bengio Aaron Courville.

Nel processo di addestramento di un modello di AI preposto alla sintesi vocale possiamo isolare tre momenti fondamentali:

1- L’analisi del segnale audio
2- L’estrazione di feature maps mediante una rete neurale convoluzionale (CNN)
3- La generazione di parametri acustici mediante una rete neurale ricorrente (RNN)

Ecco un diagramma che anticipa in parte ciò che diremo tra breve

L’analisi del segnale audio

Che cos’è un segnale audio?

Il segnale audio x(t) è generalmente una funzione del tempo t che rappresenta le variazioni di pressione dell’aria o le variazioni di tensione in un circuito elettrico. La grandezza in cui è misurato dipende dal contesto in cui viene acquisito o riprodotto, ad esempio in un contesto elettronico, come quando il segnale è catturato da un microfono, potrebbe essere misurato in Volt (V). Il segnale viene poi digitalizzato mediante il campionamento (divisione in intervalli regolari per ottenere una sequenza discreta), la quantizzazione e la normalizzazione in un intervallo specifico, per esempio [-1,1].

Il segnale audio viene analizzato per creare lo spettrogramma

Per prima cosa viene suddiviso in frame temporali applicando la finestra di Hanning o Hamming che non è altro che una funzione goniometrica che oltre a suddividere il segnale lo prepara al successivo step: la trasformata di Fourier che viene eseguita per convertire il segnale nel dominio della frequenza.

Infine viene calcolato lo spettro di potenza Pn(f) per ogni frame temporale (ciclo)

Alla fine del ciclo, si ottiene lo spettro di potenza per ogni timeframe detto spettrogramma che può essere rappresentato da una matrice P[f,t] dove le righe mostrano i valori della potenza del segnale nel tempo (t = nT dove T é il periodo del singolo timeframe), mentre le colonne mostrano i valori della potenza al variare della frequenza. Essa fornisce una rappresentazione del segnale audio in termini di potenza delle diverse frequenze nel dominio del tempo e della frequenza.

CLICCA SULL’IMMAGINE PER INGRANDIRE

Ora, le informazioni dello spettrogramma sono tali da poter essere inviate ad una rete neurale convoluzionale (CNN).

Nel contesto delle reti neurali convoluzionali (CNN), l’analisi dello spettro di potenza può essere trattata come un’immagine. Questo perché una CNN è un tipo di modello di apprendimento automatico che è stato inizialmente sviluppato per l’analisi delle immagini.

Ti invitiamo a leggere bene l’articolo sulle reti neurali convoluzionali
Le reti neurali convoluzionali, un modo per vedere bene al minimo costo

Nel caso dell’analisi audio, ogni frame temporale dello spettro di potenza può essere considerato come un’immagine. Le dimensioni di questo “immagine” possono essere rappresentate dai coefficienti di frequenza (f) e dal tempo (t). Ad esempio, se consideriamo un frame di spettro di potenza di 256 punti nel tempo e 128 punti nelle frequenze, avremo un’immagine di dimensione 128×256.

La rete neurale convoluzionale (CNN)

Lo scopo di questa rete è quello di processare la matrice dello spettrogramma per estrarre caratteristiche utili per la classificazione del suono.

Ricordiamo in breve che la CNN opera attraverso i seguenti tre livelli:

  • Filtraggio Convoluzionale
    In una operazione convoluzionale, il CNN prende una piccola porzione dell’input (il campo recettivo) e applica un filtro (o kernel). Il filtro è una piccola matrice di pesi che viene moltiplicata per l’input. Il risultato di questa operazione viene poi sommato per produrre una singola uscita. L’operazione viene ripetuta applicando il filtro su tutto l’input, ottenendo una mappa delle caratteristiche o feature map. Ogni feature map viene prodotta utilizzando un filtro diverso: potremmo avere una feature map per rilevare, nel caso delle immagini, i bordi, un’altra per rilevare i cerchi e così via. Nel caso dell’audio si tratta di caratteristiche specifiche del segnale.
  • Pooling
    L’operazione di pooling riduce ulteriormente la dimensione dell’input, prendendo un gruppo di neuroni vicini e scegliendo il massimo (max pooling) o la media (average pooling) dell’attività dei neuroni
  • Rete completamente connessa
    Infine il risultato viene inviato ad una rete neurale completamente connessa

CLICCA SULL’IMMAGINE PER INGRANDIRE

La rete neurale ricorrente (RNN)

Siamo giunti al cuore del processo di addestramento di un sintetizzatore vocale che ci offre un’ottima occasione per accennare alla logica che soggiace al funzionamento delle reti neurali ricorrenti.

La sintesi vocale è un problema sequenziale in quanto ogni campione di output dipende dai campioni precedenti.

Per tale ragione Le reti neurali ricorrenti (RNN) sono ideali per la sintesi vocale perché sono in grado di memorizzare informazioni sul passato e utilizzarle per generare l’output successivo.

Le RNN hanno una “memoria” incorporata sotto forma di strato nascosto, che permette di tenere traccia delle informazioni rilevanti da un passaggio all’altro. Questo è utile per modellare le dipendenze temporali nella voce, come l’intonazione e il ritmo. Le RNN, inoltre, possono catturare il contesto a breve termine, che è fondamentale per generare un suono coerente e naturale. Ad esempio, la pronuncia di una parola può cambiare a seconda delle parole circostanti, e una RNN può catturare queste sottigliezze. Dato che le RNN lavorano con sequenze, possono generare output in tempo reale, il che è cruciale per applicazioni come assistenti vocali, traduzione vocale in tempo reale, e altro ancora.

Le RNN sono utilizzate parallelamente per imparare caratteristiche specifiche delle sequenze testuali che verranno poi trasformate in audio.

La forma dell’input

Una delle forme più comuni di input per una RNN è una sequenza di vettori. Ogni vettore rappresenta le caratteristiche estratte da una porzione del segnale audio. Questi vettori possono essere ottenuti appiattendo le mappe delle caratteristiche della CNN o utilizzando tecniche di riduzione della dimensionalità come la Principal Component Analysis (PCA).
Supponiamo, per esempio, che la CNN generi una mappa delle caratteristiche di dimensione 10×10. Questa mappa potrebbe essere appiattita in un vettore di dimensione 100, e una sequenza di tali vettori potrebbe servire come input alla RNN.

In alcuni casi, si potrebbe voler mantenere la struttura spaziale delle mappe delle caratteristiche. In questo caso, ogni mappa delle caratteristiche (o una porzione di essa) potrebbe servire come un elemento in una sequenza di matrici fornite alla RNN. Se stiamo lavorando con audio e abbiamo una mappa delle caratteristiche tempo-frequenza, potremmo fornire piccole “fette” di questa mappa come input sequenziale alla RNN.

In problemi più semplici o per modelli più leggeri, l’output della CNN potrebbe essere ulteriormente elaborato per estrarre uno o più scalari che rappresentano l’informazione più rilevante. Questi scalari possono poi essere forniti come una sequenza alla RNN.

Struttura della rete e addestramento

CLICCA SULL’IMMAGINE PER INGRANDIRLA

l’addestramento dei pesi W in una rete neurale ricorrente (RNN) avviene attraverso un processo iterativo che coinvolge l’intera sequenza di dati. Questo è noto come “Backpropagation Through Time” (BPTT). Ecco come funziona in generale:

Passi dell’Addestramento con BPTT forniti dal modello GPT4:

Addestramento del modello Text to speech

Come si addestra il modello per trasformare testo in una voce umana?

Si inizia con un set di dati di addestramento che contiene coppie di testo e tracce audio corrispondenti. Le tracce audio sono analizzate per estrarre parametri acustici come tono, intensità, durata, ecc.

Il testo viene convertito in una forma simbolica, come una sequenza di fonemi o unità linguistiche più piccole.

Le rappresentazioni simboliche del testo e i parametri acustici estratti dall’audio sono utilizzati come input e output per addestrare la RNN. Durante l’addestramento, la RNN impara a mappare la sequenza di simboli del testo in una sequenza di parametri acustici. La rete viene addestrata per minimizzare una funzione di perdita che misura la differenza tra i parametri acustici previsti e quelli r

Quando si deve generare la voce a partire dal testo, questo viene prima convertito nella stessa forma simbolica utilizzata durante l’addestramento. Questa rappresentazione simbolica viene poi passata attraverso la RNN addestrata. La RNN genera una sequenza di parametri acustici basata su ciò che ha imparato durante la fase di addestramento sui segnali audio. Infine, questi parametri acustici sono utilizzati da un vocoder o un decoder acustico per generare l’onda sonora finale, che è l’audio sintetizzato.