Valutare la qualità e la velocità dei modelli Whisper: un esperimento pratico

Riconoscimento vocale con Whisper
Riconoscimento vocale con Whisper

Negli ultimi giorni ho condotto una piccola sperimentazione con Whisper, il modello di riconoscimento vocale automatico (ASR) open source sviluppato da OpenAI. L’obiettivo era duplice:

  1. Registrare l’audio del sistema in modo pulito (senza passare dal microfono)
  2. Valutare le prestazioni e l’accuratezza dei modelli tiny, base e small di Whisper, cercando una misura sintetica della loro “efficienza complessiva”

Cos’è Whisper

Whisper è un sistema di riconoscimento vocale automatico (Automatic Speech Recognition, ASR) rilasciato da OpenAI nel 2022. È basato su una rete neurale di tipo transformer e addestrato su un enorme corpus di dati multilingue e multitask. Whisper è capace di:

  • Trascrivere audio parlato in testo
  • Tradurre automaticamente parlato in inglese
  • Riconoscere e segmentare parlato in presenza di rumore di fondo

Uno degli aspetti più interessanti è che Whisper è open source e facilmente utilizzabile da linea di comando o come libreria Python. Supporta vari modelli di dimensioni crescenti, dal più piccolo (tiny) al più grande (large), con diversi trade-off tra velocità e accuratezza.

Registrazione pulita con PulseAudio e Audacity

Utilizzando pavucontrol su Ubuntu, è possibile registrare direttamente ciò che il sistema riproduce, senza microfoni. La chiave è selezionare come sorgente di registrazione:

Monitor of Built-in Audio Analog Stereo

In Audacity basta:

  • Premere “Record”
  • Selezionare la sorgente giusta da pavucontrol (scheda “Registrazione”)

Il risultato è una traccia audio digitale e pulita, ideale per testare Whisper.

Trascrizione automatica con Whisper

Whisper supporta modelli di diverse dimensioni, con un compromesso tra:

  • Velocità di esecuzione (più piccolo è il modello, più è veloce)
  • Qualità della trascrizione (i modelli più grandi sono più accurati)

I comandi utilizzati:

whisper test.wav --language Italian --model small --output_dir small --output_format all

Ripetuto per tiny, base e small, salvando i risultati in sottodirectory dedicate.

Una nota sui modelli:

ModelloParametriDimensione fileNote
tiny≈ 39 milioni~75 MBVelocissimo, ma meno preciso
base≈ 74 milioni~142 MBBuon compromesso leggero
small≈ 244 milioni~462 MBPiù lento, ma molto più accurato

La metrica che unisce qualità e prestazioni

Durante il confronto, ho voluto trovare una figura di merito (FdM) che combinasse:

  • WER (Word Error Rate): misura quanto il testo trascritto è fedele
  • RTF (Real-Time Factor): tempo impiegato per trascrivere diviso la durata dell’audio

La formula che ho adottato è:

FdM = (1 - WER) / (1 + RTF)

Più è alta, meglio è il modello.


Risultati su un frammento audio “sporco”

Test su una frase:

Il sistema SRFC si rivolge a persone con esperienza maturata in contesti di istru…

Risultati:

Modello    | Durata audio | Tempo impiegato | RTF   | WER       | FdM
-----------------------------------------------------------------------
tiny       |        8.00s |           0.65s | 0.08  | 28.57%    | 0.66
base       |        8.00s |           0.91s | 0.11  | 35.71%    | 0.58
small      |        7.00s |           2.37s | 0.34  | 7.14%     | 0.69

Osservazioni:

  • small è il più accurato, nonostante sia più lento
  • tiny sorprende: pur essendo meno preciso, ha una FdM superiore a base
  • base in questo caso è il peggiore compromesso

Specifiche del sistema di test

Tutti i benchmark sono stati eseguiti su una macchina con le seguenti caratteristiche:

  • CPU: Intel® Core™ i5-1235U (12th Gen)
  • Architettura: x86_64, 10 core (2 performance + 8 efficient), 12 thread
  • Frequenza massima: 4.4 GHz
  • RAM: [aggiungere se si vuole, es. 16 GB DDR4]
  • Sistema operativo: Ubuntu con Whisper in ambiente venv (Python 3.12)
  • Note: elaborazione solo su CPU, senza accelerazione GPU

Considerazioni finali

Questa esperienza mostra innanzitutto che una registrazione pulita è fondamentale per la qualità della trascrizione; l’accuratezza e la velocità possono essere combinate in una metrica utile. Infine la dimensione small del modello è un ottimo compromesso su CPU se si accetta un RTF più alto

Il pensiero di combinare RTF e WER in un indice sintetico è nato spontaneamente durante il lavoro: un piccolo segnale che la mente umana ha ancora margine per affiancare (e talvolta superare) l’intelligenza artificiale.

Note bibliografiche

  • RTF (Real-Time Factor) è definito come il rapporto tra il tempo di elaborazione e la durata del file audio. Se un sistema ha un RTF = 1, significa che lavora in tempo reale. Vedi anche:
  • WER (Word Error Rate) è la metrica classica per valutare i sistemi ASR, calcolata come:
    • = sostituzioni= cancellazioni= inserzioni= numero di parole nella trascrizione di riferimento

Riferimenti

  • Wikipedia – Word Error Rate
  • “Automatic Evaluation of Machine Translation Quality Using Longest Common Subsequence and Skip-Bigram Statistics” — Lin and Och (2004)

Scritto con l’aiuto di Whisper, Python e un po’ di caffeina.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.