PENSAI-STT: quando una vecchia macchina può ancora ascoltare
Trascrizione vocale offline: un esperimento di intelligenza artificiale locale
C’è un aspetto dell’intelligenza artificiale contemporanea che tende a passare inosservato: per utilizzare modelli avanzati non è necessariamente indispensabile affidarsi a un servizio remoto.
È da questa domanda, molto concreta, che nasce PENSAI-STT, un progetto sperimentale condotto da PENSAI e Salvatore Martino: è possibile trasformare la voce in testo utilizzando esclusivamente il computer dell’utente, senza inviare l’audio a un server, senza API a pagamento e senza acquistare nuovo hardware?
Nel caso specifico, la domanda è stata posta a una macchina che, secondo gli standard odierni, non appartiene certo alla categoria dei computer potenti: un Intel Pentium G620 dual-core, con 12 GB di RAM e grafica integrata Intel HD Graphics 2000.
Il progetto non nasce quindi dalla ricerca della massima velocità.
Nasce da una domanda diversa:
Quanto lontano possiamo spingere l’intelligenza artificiale locale con ciò che abbiamo già?
scarica il blueprint
1. Dal problema alla sperimentazione
L’osservazione iniziale era semplice.
Negli ultimi anni sono comparsi moltissimi strumenti capaci di trasformare testo in voce, cioè sistemi Text-to-Speech (TTS).
Il percorso inverso — Speech-to-Text (STT) — è altrettanto importante: registrare una voce, riconoscerla e trasformarla in testo utilizzabile da un sistema informatico.
Per PENSAI questa seconda direzione è particolarmente interessante.
Se un sistema decisionale deve lavorare con informazioni provenienti da una conversazione, da una registrazione o da una dettatura, il primo passaggio può essere:
VOCE
↓
TRASCRIZIONE
↓
TESTO
↓
PENSAI
Il riconoscimento vocale, quindi, non è la decisione.
È l’interfaccia di ingresso.
Questa distinzione è fondamentale.
2. La scelta: non costruire un altro servizio cloud
Il progetto avrebbe potuto essere realizzato facilmente utilizzando una API STT online.
Ma sarebbe stata una soluzione poco coerente con l’obiettivo sperimentale.
Con una API cloud:
microfono
↓
Internet
↓
server remoto
↓
modello STT
↓
testo
Con PENSAI-STT l’obiettivo è invece:
microfono/file
↓
computer locale
↓
modello STT
↓
testo
La differenza non è soltanto economica.
È anche architetturale.
Nel secondo caso l’audio può essere elaborato senza dover essere trasferito a un’infrastruttura esterna.
3. Perché Whisper
La ricerca ha prodotto negli ultimi anni importanti progressi nel riconoscimento automatico del parlato.
Uno dei lavori più significativi è “Robust Speech Recognition via Large-Scale Weak Supervision”, pubblicato da Alec Radford e colleghi nel 2022.
Gli autori descrivono Whisper, un sistema addestrato su circa 680.000 ore di audio multilingue, mostrando capacità di generalizzazione in modalità zero-shot su numerosi compiti e lingue. (arXiv)
Articolo scientifico originale su arXiv — Radford et al., 2022
La scelta di Whisper per il progetto non significa però che il modello sia infallibile.
Il model card ufficiale avverte esplicitamente che le prestazioni variano tra lingue e contesti e raccomanda cautela nell’utilizzo in domini ad alto rischio. (GitHub)
Questa cautela è perfettamente coerente con PENSAI: una trascrizione è un’interpretazione computazionale del segnale audio, non una registrazione infallibile della realtà.
4. Il passaggio decisivo: whisper.cpp
Il problema successivo era pratico.
Whisper è un modello di intelligenza artificiale; occorreva trovare un’implementazione capace di eseguirlo localmente senza trasformare il vecchio computer in un laboratorio di calcolo impossibile.
La scelta è caduta su whisper.cpp, implementazione C/C++ di Whisper.
Il progetto ufficiale supporta Linux, CPU-only inference e WebAssembly, oltre a diverse piattaforme hardware. (GitHub)
Repository ufficiale whisper.cpp
Ed emerge un elemento particolarmente interessante: il progetto contiene una specifica implementazione WebAssembly.
La documentazione ufficiale descrive whisper.wasm come un port di whisper.cpp che permette di eseguire l’inferenza di Whisper direttamente all’interno del browser. La stessa documentazione specifica che i dati audio vengono elaborati localmente e non lasciano il computer. (GitHub)
Questo rappresenta esattamente il modello architetturale cercato da PENSAI.
5. Perché WebAssembly
A prima vista potrebbe sembrare strano utilizzare un browser come ambiente per eseguire un modello di intelligenza artificiale.
In realtà WebAssembly nasce proprio per portare codice a basso livello nel contesto del Web con caratteristiche di portabilità, efficienza e sicurezza.
Il lavoro scientifico di Haas, Rossberg, Schuff e colleghi, presentato a PLDI 2017, descrive WebAssembly come un bytecode portabile a basso livello, progettato per un’esecuzione efficiente e sicura e con indipendenza dall’architettura hardware sottostante. (Google Ricerca)
Haas et al., “Bringing the Web up to Speed with WebAssembly” — Google Research
La stessa ricerca è stata pubblicata negli atti ACM del PLDI 2017. (sigplan.org)
In termini semplici:
il browser diventa il contenitore; WebAssembly diventa il motore computazionale.
6. Il computer scelto per l’esperimento
Ed è qui che il progetto diventa più interessante.
PENSAI-STT non è stato progettato pensando a una workstation moderna.
Il sistema di riferimento è:
Intel Pentium G620
2 core
12 GB RAM
Intel HD Graphics 2000
x86_64
Linux Mint 22.3
Il processore appartiene alla generazione Sandy Bridge e non dispone di AVX né AVX2.
Questo introduce immediatamente una domanda fondamentale:
Il progetto è realmente fattibile oppure soltanto teoricamente possibile?
La risposta non può essere data guardando soltanto le specifiche.
Deve essere misurata.
7. Il PRECHECK
Prima di costruire il sistema è stato eseguito un controllo dell’ambiente.
Il risultato ha mostrato:
Python 3.12.3
PyTorch: non installato
arecord: disponibile
PipeWire: attivo
microfoni ALSA: disponibili
RAM disponibile: circa 8,7 GiB
spazio libero: circa 159 GB
Il fatto che PyTorch non fosse installato non rappresentava un problema.
Anzi, contribuiva a chiarire la direzione del progetto.
Non serviva costruire un ambiente Python pesante.
L’obiettivo era verificare se fosse possibile realizzare una pipeline molto più leggera:
WAV
↓
WASM
↓
Whisper
↓
TESTO
8. Prima ancora dell’intelligenza artificiale: catturare l’audio
Un sistema STT non può funzionare se non possiede un segnale audio utilizzabile.
Sul computer era già in esecuzione una riproduzione audio.
L’analisi di PipeWire ha mostrato:
47
alsa_output...analog-stereo.monitor
PipeWire
RUNNING
Questo è un punto tecnico importante.
Un monitor source consente di catturare ciò che viene riprodotto dal dispositivo audio, anziché necessariamente registrare il microfono.
Il progetto ha quindi potuto verificare la prima parte della catena:
audio riprodotto
↓
PipeWire
↓
monitor
↓
registrazione WAV
È stato prodotto:
pensai-test.wav
Il file è stato poi riprodotto e verificato acusticamente.
Il segnale esisteva.
Il primo problema era quindi risolto.
9. Una scelta apparentemente banale: soltanto WAV
A questo punto è stata presa una decisione progettuale volutamente conservativa.
Non partire da MP3.
Non partire da M4A.
Non partire da OGG.
Non partire da una molteplicità di codec.
La V1 deve accettare:
WAV
Questa scelta riduce la complessità della pipeline.
Il percorso diventa:
WAV
↓
PCM
↓
Whisper
↓
TESTO
Inoltre, la documentazione di whisper.cpp indica esplicitamente il supporto alla trascrizione di file WAV; l’interfaccia CLI attuale lavora con WAV PCM a 16 bit, mentre altri formati richiedono una fase di conversione. (GitHub)
La scelta non significa che MP3 sia tecnicamente impossibile.
Significa semplicemente:
non introdurremo una seconda complessità prima di aver dimostrato la prima.
10. Perché partire dal modello tiny
Il secondo compromesso riguarda il modello.
Whisper esiste in diverse dimensioni.
Su una macchina moderna è possibile ragionare in termini di modelli più grandi.
Sul Pentium G620 sarebbe una strategia poco disciplinata.
PENSAI-STT V1 parte quindi dal modello:
Whisper tiny multilingue.
Non tiny.en, perché il progetto deve lavorare in italiano.
La documentazione ufficiale dell’esempio WASM indica per tiny una dimensione del modello di circa 74 MB e specifica che la versione browser è stata progettata per modelli fino a small, pur evidenziando limiti di prestazioni e memoria. (GitHub)
La scelta di tiny non è quindi una dichiarazione di superiorità qualitativa.
È una strategia di fattibilità.
Prima si dimostra che il sistema funziona.
Poi si valuta se sia possibile aumentare la qualità.
11. La parola più importante: benchmark
Uno degli errori più facili da commettere in un progetto di questo tipo sarebbe affermare:
“Funziona in tempo reale.”
Non è stato fatto.
La documentazione ufficiale di whisper.cpp WASM indica prestazioni dell’ordine di 2–3× real-time per tiny e base su una CPU moderna, ma avverte che le prestazioni non sono particolarmente elevate e richiede supporto WASM SIMD. (GitHub)
Questo dato non può essere trasferito automaticamente al Pentium G620.
Per questo PENSAI-STT introduce un criterio sperimentale semplice:
RTF =
tempo di elaborazione
--------------------
durata dell'audio
Se:
audio = 10 secondi
elaborazione = 30 secondi
allora:
RTF = 3
Il sistema funziona.
Ma non è real-time.
Questa distinzione è essenziale.
12. Funzionare non significa essere veloce
È uno dei principi più importanti emersi dall’esperimento.
Possiamo avere:
FUNZIONAMENTO = SI
PRESTAZIONE = BASSA
e il progetto può comunque essere tecnicamente interessante.
Per esempio, se una registrazione di cinque minuti richiedesse dieci minuti per essere trascritta, il sistema sarebbe inutilizzabile per una conversazione simultanea.
Ma potrebbe essere perfettamente utilizzabile per:
- archiviare registrazioni;
- trascrivere interviste;
- trasformare dettature in testo;
- preparare materiale editoriale;
- acquisire appunti vocali.
La prestazione deve quindi essere valutata rispetto all’uso, non rispetto a un ideale astratto di velocità.
13. La vera architettura PENSAI-STT
A questo punto la struttura del progetto è stata definita.
PENSAI-STT
│
▼
FILE WAV
│
▼
PREPARAZIONE AUDIO
│
▼
WHISPER.CPP WASM
│
▼
TESTO ITALIANO
│
┌───────┴───────┐
▼ ▼
COPIA TXT
E, soprattutto:
PENSAI-STT
↓
TESTO
↓
PENSAI
Non:
PENSAI-STT
↓
decisione
Il sistema STT deve riconoscere la voce.
PENSAI riceve il risultato testuale e, eventualmente, lo sottopone al proprio processo.
Questa separazione rende possibile sostituire il motore STT in futuro senza riscrivere l’architettura decisionale.
14. Perché questa separazione è importante
Whisper non “conosce” il significato decisionale della conversazione nel senso in cui lo intende PENSAI.
Produce una trascrizione.
Una trascrizione può contenere:
- errori;
- parole mancanti;
- nomi propri errati;
- punteggiatura imperfetta;
- ambiguità;
- problemi dovuti al rumore.
Pertanto:
voce ≠ testo perfetto
testo ≠ verità
testo ≠ decisione
La trascrizione deve essere considerata un dato di ingresso.
Questo è coerente anche con la documentazione di Whisper, che mette in guardia dall’utilizzo dei modelli in contesti ad alto rischio e raccomanda valutazioni specifiche prima della distribuzione. (GitHub)
15. La questione dell’open source
Anche qui PENSAI ha scelto di non utilizzare la parola “open source” superficialmente.
Il repository ufficiale di whisper.cpp dichiara una licenza MIT. La licenza concede, tra le altre cose, il diritto di usare, copiare, modificare, distribuire e sublicenziare il software nel rispetto delle condizioni previste dalla licenza. (GitHub)
Licenza MIT ufficiale di whisper.cpp
Ma questo non significa automaticamente che ogni componente associato a Whisper abbia la stessa licenza.
Un progetto responsabile deve verificare separatamente:
codice
modello
runtime
WASM
dipendenze
eventuali codec
È una distinzione importante.
Open source del motore non significa automaticamente identica licenza di ogni componente del sistema.
16. Perché non usare PyTorch
Durante il PRECHECK è emerso:
PyTorch: NON DISPONIBILE
La reazione più ovvia sarebbe stata installarlo.
Non era necessario.
Per questa sperimentazione si è scelto un approccio diverso: utilizzare un’inferenza leggera tramite whisper.cpp.
Il repository descrive infatti whisper.cpp come un’implementazione C/C++ ad alte prestazioni con possibilità di inferenza esclusivamente CPU. (GitHub)
Questo rende il progetto più coerente con il vincolo:
utilizzare il computer esistente, senza costruire un ambiente di machine learning sproporzionato rispetto all’obiettivo.
17. Il significato del costo zero
“Costo zero” deve essere definito correttamente.
Nel progetto significa:
API €0
abbonamento €0
cloud €0
GPU dedicata €0
nuovo hardware €0
Non significa:
CPU gratuita
elettricità gratuita
tempo di elaborazione gratuito
Il computer consuma energia e impiega tempo.
Ma non viene introdotto un costo monetario per l’utilizzo del servizio STT.
Questa distinzione è importante anche dal punto di vista metodologico.
18. La privacy non è una promessa generica
Dire “offline” non basta.
Un’applicazione può avere un’interfaccia locale e tuttavia effettuare connessioni remote.
Per PENSAI-STT il requisito viene quindi trasformato in un test:
Internet disconnesso
↓
caricamento WAV
↓
trascrizione
↓
testo
Se funziona, l’operazione fondamentale è realmente locale.
La documentazione ufficiale di whisper.wasm afferma esplicitamente che i dati audio vengono elaborati localmente e non lasciano il computer. (GitHub)
Naturalmente, nel progetto finale sarà necessario verificare concretamente anche le dipendenze aggiunte dagli agenti.
19. Il ruolo degli agenti GML 5.2
La fase successiva del progetto non consiste semplicemente nel chiedere a un agente:
“Scrivimi un programma STT.”
È stato invece preparato un blueprint operativo.
Il lavoro è stato suddiviso concettualmente in quattro funzioni:
Builder
Costruisce:
HTML
JavaScript
CSS
interfaccia
Runtime
Integra:
whisper.cpp
WASM
modello
Tester
Verifica:
trascrizione
italiano
prestazioni
stabilità
offline
Auditor
Controlla:
API
cloud
tracking
analytics
dipendenze
licenze
Questa struttura riduce il rischio che l’agente “risolva” un problema introducendo un altro problema.
20. Un esperimento, non una promessa commerciale
Questo punto deve rimanere centrale.
PENSAI-STT V1 non deve essere presentato come:
- il miglior sistema STT;
- un sistema professionale;
- un sistema real-time;
- un sistema perfetto;
- un sostituto universale delle piattaforme commerciali.
È un esperimento tecnico riproducibile.
La domanda è molto più circoscritta:
È possibile realizzare una pipeline locale, gratuita e offline di trascrizione italiana su un computer molto vecchio, utilizzando un modello moderno di riconoscimento vocale?
Solo il benchmark reale potrà fornire la risposta definitiva.
21. La ricerca scientifica dietro il progetto
PENSAI-STT non nasce nel vuoto.
Esiste una vasta ricerca sull’Automatic Speech Recognition.
Un riferimento importante è il lavoro sul corpus Common Voice, progettato per fornire dati vocali trascritti multilingue per la ricerca e lo sviluppo di tecnologie di riconoscimento automatico del parlato. Il lavoro descrive, tra gli altri aspetti, esperimenti che includevano anche l’italiano. (arXiv)
Ardila et al., “Common Voice: A Massively-Multilingual Speech Corpus” — arXiv
Whisper rappresenta una successiva evoluzione del campo, basata su una scala molto maggiore di dati e su un’impostazione multilingue e multitask. (arXiv)
Il passaggio da questi modelli a whisper.cpp e quindi a WebAssembly è però soprattutto un problema di ingegneria dell’inferenza:
ricerca AI
↓
modello
↓
implementazione efficiente
↓
WebAssembly
↓
computer locale
22. La vera domanda non è “quanto è potente l’IA?”
Il progetto porta a una riflessione più ampia.
Quando si parla di intelligenza artificiale, l’attenzione tende a concentrarsi sulla dimensione del modello.
Più parametri.
Più GPU.
Più server.
Più dati.
Ma esiste anche un’altra direzione:
modello sufficientemente piccolo
+
hardware già disponibile
+
software efficiente
+
architettura locale
Questa strada non compete necessariamente con i grandi sistemi cloud.
Risponde a esigenze differenti.
In alcuni casi può essere preferibile avere:
meno potenza, ma più controllo.
23. La vecchia macchina diventa parte dell’esperimento
Il Pentium G620 non è un elemento accidentale.
È parte integrante della domanda scientifico-tecnica.
Se il progetto fosse testato su una moderna workstation con GPU potente, dimostrerebbe soprattutto che una workstation moderna può eseguire Whisper.
Non sarebbe particolarmente interessante.
Sul vecchio sistema, invece, la domanda diventa:
Qual è il limite minimo pratico di un’architettura STT locale?
Questo non significa che il G620 rappresenti il limite assoluto.
Significa che costituisce un caso di studio volutamente restrittivo.
24. Dove potrebbe fallire
Un progetto serio deve anche dichiarare anticipatamente i propri punti di possibile fallimento.
Primo rischio: velocità
Il G620 potrebbe essere troppo lento.
Secondo rischio: browser
La versione WASM richiede caratteristiche specifiche del browser, incluso il supporto alle istruzioni SIMD WASM indicate dalla documentazione ufficiale. (GitHub)
Terzo rischio: memoria
Il modello deve essere caricato nella memoria del browser.
Quarto rischio: qualità
La trascrizione italiana potrebbe non essere sufficientemente accurata per determinati utilizzi.
Quinto rischio: file audio
Non tutti i WAV sono necessariamente identici.
Sesto rischio: esecuzione locale
“Funziona nel browser” non significa automaticamente “funziona aprendo semplicemente un file HTML con doppio clic”. La documentazione ufficiale dell’esempio WASM mostra infatti un avvio tramite un server HTTP locale. (GitHub)
Questo dettaglio è importante e dovrà essere affrontato dagli agenti nella realizzazione definitiva.
25. Il progetto non nasconde i compromessi
La filosofia è semplice:
PRIMA
funzionamento
POI
accuratezza
POI
prestazioni
POI
comodità
INFINE
estensioni
Non:
100 funzioni
prima ancora di sapere
se la trascrizione funziona.
Per questo la V1 è deliberatamente limitata.
26. La V1
La specifica congelata è:
PENSAI-STT V1.0
INPUT
WAV
LINGUA
Italiano
MODELLO
Whisper tiny multilingue
MOTORE
whisper.cpp
RUNTIME
WebAssembly
ELABORAZIONE
locale
INTERNET
non necessario durante l'uso
OUTPUT
testo / TXT
COSTO
€0
MP3 è stato deliberatamente escluso.
Non perché sia impossibile.
Ma perché la semplicità della prima prova è più importante della quantità delle funzioni.
27. E dopo?
Se la V1 supera il test reale, si potranno valutare estensioni.
Per esempio:
V1
WAV → testo
V1.1
MP3 → testo
V1.2
microfono → testo
V1.3
segmentazione
V1.4
timestamp
V2
STT → PENSAI
Ma nessuna di queste evoluzioni deve essere data per scontata.
La prima domanda deve essere risolta prima.
28. Il punto più interessante: STT come ingresso di PENSAI
L’aspetto più significativo del progetto non è necessariamente Whisper.
È la possibilità di costruire una catena:
MONDO REALE
↓
VOCE
↓
STT
↓
TESTO
↓
PENSAI
↓
ANALISI
Il passaggio tra voce e decisione viene quindi scomposto.
Questo consente di mantenere separati:
percezione → rappresentazione → elaborazione → decisione.
È una separazione architetturale più importante della scelta di uno specifico modello.
29. Un principio di metodo
Il progetto PENSAI-STT mostra anche un metodo.
Non partire dalla domanda:
“Qual è la tecnologia più potente?”
Partire da:
“Qual è il minimo sistema necessario per verificare l’ipotesi?”
Nel nostro caso:
un vecchio PC
+
un file WAV
+
un modello piccolo
+
un runtime locale
+
un benchmark
È sufficiente per iniziare.
Se fallisce, sappiamo perché.
Se funziona, abbiamo una base sperimentale.
30. Conclusione
PENSAI-STT nasce da una domanda apparentemente modesta: possiamo far ascoltare un computer senza mandare la sua voce da qualche altra parte?
La risposta tecnica, allo stato attuale della progettazione, è sì, almeno come ipotesi concreta e implementabile.
Esistono infatti sia il modello Whisper e la relativa ricerca scientifica, sia un’implementazione C/C++ locale, sia una versione WebAssembly progettata per l’esecuzione nel browser. (arXiv)
Ma il progetto non sarà considerato riuscito finché non supererà il test più importante:
il Pentium G620 reale.
Non basta che funzioni su un computer moderno.
Non basta che funzioni nella documentazione.
Non basta che un agente AI produca del codice.
Deve funzionare su quella macchina, con quel modello, con quel file WAV, senza Internet e senza trasferire l’audio.
Solo allora potremo dire di avere trasformato una possibilità teorica in un risultato sperimentale.
E forse è proprio questo il punto più interessante dell’intero progetto.
L’intelligenza artificiale non è soltanto una questione di modelli enormi e infrastrutture gigantesche.
Può essere anche una questione di riduzione, controllo, misura e riutilizzo dell’esistente.
Un vecchio computer non diventa improvvisamente potente.
Ma, con il software giusto, può ancora diventare parte di un esperimento contemporaneo.
Riferimenti scientifici e tecnici verificabili
- Radford, A. et al. (2022) — Robust Speech Recognition via Large-Scale Weak Supervision.
Articolo originale — arXiv:2212.04356 - Ardila, R. et al. (2020) — Common Voice: A Massively-Multilingual Speech Corpus.
Articolo scientifico — arXiv:1912.06670 - Haas, A. et al. (2017) — Bringing the Web up to Speed with WebAssembly, ACM SIGPLAN PLDI 2017.
Pagina scientifica Google Research - Haas, A. et al. (2017) — versione negli atti PLDI, ACM.
PLDI 2017 — ACM SIGPLAN - ggml-org — whisper.cpp — implementazione C/C++ di Whisper, supporto CPU-only e WebAssembly.
Repository ufficiale - ggml-org — whisper.wasm — implementazione WebAssembly per l’esecuzione di Whisper nel browser, con elaborazione locale dell’audio. (GitHub)
Documentazione ufficiale whisper.wasm - ggml-org — Licenza whisper.cpp — licenza MIT del codice del progetto. (GitHub)
Licenza ufficiale - OpenAI — Whisper Model Card — dati di addestramento, lingue, prestazioni e limitazioni dichiarate. (GitHub)
Model Card ufficiale Whisper
Disclaimer AI
Questo articolo descrive un progetto sperimentale e tecnico, non un prodotto certificato né una valutazione scientifica indipendente delle prestazioni di Whisper sul sistema hardware specificato.
Le informazioni relative a Whisper, whisper.cpp e WebAssembly sono state confrontate con documentazione tecnica e pubblicazioni scientifiche verificabili. Le prestazioni effettive di PENSAI-STT sul Pentium G620 devono essere determinate mediante benchmark reale e non possono essere dedotte dalle prestazioni dichiarate per hardware moderno.
Una trascrizione automatica può contenere errori, omissioni, sostituzioni di parole, errori di punteggiatura e problemi particolari con nomi propri, dialetti, rumore o registrazioni di bassa qualità. Il testo prodotto da un sistema STT non deve quindi essere considerato automaticamente una trascrizione perfetta o una rappresentazione certa del contenuto originale.
PENSAI-STT è concepito come strumento di acquisizione e trasformazione audio → testo. Non costituisce, da solo, un sistema di decisione, diagnosi, consulenza legale, consulenza finanziaria o valutazione ad alto rischio.
L’eventuale integrazione futura con PENSAI non deve eliminare la necessità di verificare l’affidabilità del testo di ingresso.
PENSAI-STT V1.0 deve essere considerato sperimentale fino al completamento dei test funzionali, prestazionali, di sicurezza, privacy e offline previsti dal progetto.
Hyłf Göt!
