Una trascrizione dice che cosa è stato detto. Per interviste, riunioni e podcast, l’altra metà del lavoro è sapere chi lo ha detto: nella ricerca sul parlato questo problema si chiama diarizzazione dei parlanti. Dalle versioni iPhone 1.8.5, Mac App Store 1.3.2 e Mac con download diretto 1.5.1, Whisper Notes esegue la diarizzazione interamente sul dispositivo.
In questo articolo spieghiamo come funziona, pubblichiamo i risultati del benchmark rispetto a un riferimento generato nel cloud e descriviamo l’unico caso di errore che non siamo riusciti a eliminare con interventi tecnici, insieme alla soluzione che abbiamo scelto.
Che cosa fa
Apri una nota — una registrazione, un file audio o video importato oppure una registrazione di una riunione — e tocca il pulsante dei parlanti. Pochi secondi dopo, ogni paragrafo mostra l’etichetta del parlante e un timestamp.
Etichette dei parlanti su Mac e iPhone. Toccando una frase, la riproduzione passa a quel momento.
Le etichette iniziano come Parlante 1 e Parlante 2. Se ne rinomini una, si aggiorna l’intera trascrizione. Tocca una frase qualsiasi per portare la riproduzione audio al momento esatto: verificare una citazione sulla voce originale diventa immediato.
Rinominare un parlante aggiorna ogni paragrafo della nota.
Nelle registrazioni delle riunioni, il riconoscimento dei parlanti parte automaticamente al termine della chiamata; puoi disattivarlo nelle Impostazioni. Le etichette restano anche nell’esportazione: Copia trascrizione con parlanti le porta negli appunti, mentre i file SRT e VTT le includono nei sottotitoli.
La diarizzazione lavora sulle voci, non sulle parole. Si comporta quindi allo stesso modo nelle oltre 100 lingue che l’app trascrive.
Un modello da 19 MB sul Neural Engine
La diarizzazione risponde alla domanda «chi ha parlato e quando?» in tre passaggi. Prima divide l’audio in segmenti con parlato. Poi trasforma ogni segmento in un’impronta vocale, un vettore compatto che descrive la voce e non le parole. Infine raggruppa le impronte: i segmenti nello stesso gruppo ricevono la stessa etichetta.
Whisper Notes usa la pipeline community-1 di pyannote, convertita in Core ML perché entrambe le fasi vengano eseguite sul Neural Engine. Il download una tantum è di 19 MB; una conversazione di 5.7 minuti richiede da 2 a 4 secondi su un Mac con chip della serie M.
Audio → segmenti parlati → impronte vocali → gruppi → etichette
Ogni passaggio avviene sul dispositivo.
Questo conta ancora più per la diarizzazione che per la trascrizione. Un’impronta vocale è un dato biometrico: identifica una persona come un’impronta digitale. Con l’elaborazione locale, le impronte della tua voce, dei colleghi e delle persone che intervisti vengono calcolate, raggruppate e scartate sul dispositivo. Non vengono mai inviate altrove.
Che cosa abbiamo misurato
Manteniamo un benchmark fisso di due file per la diarizzazione. Il riferimento arriva da un servizio cloud di ASR e diarizzazione (ElevenLabs) ed è stato controllato a mano. Il punteggio assegna ogni 10 ms di parlato a un parlante e sceglie la corrispondenza migliore tra risultato e riferimento. Due file sono un campione piccolo: consideriamo questi numeri indicativi, non definitivi.
Il primo file rappresenta il caso comune: un podcast in inglese di cinque minuti, con due voci chiaramente diverse. La maggior parte delle interviste, dei podcast e delle riunioni a due assomiglia a questo.
| Podcast in inglese con due parlanti (5 min) | Risultato |
|---|---|
| Attribuzione a livello di frame (risoluzione 10 ms) | 96.7% |
| Accuratezza per frase (quello che leggi) | 99.1% |
| Tempo di elaborazione, Neural Engine serie M | 2–4 s |
Lo 0.9% restante consiste in tre oscillazioni ai confini delle frasi, per un totale di 3.4 secondi: siamo alla risoluzione del riferimento stesso. Con materiale di questo tipo, il risultato sul dispositivo equivale al servizio cloud che ha prodotto il riferimento.
Il caso difficile
Il secondo file è difficile per scelta: due voci maschili simili in una stanza riverberante, con un conduttore che interviene 19 volte, in media per 2.3 secondi. L’ospite parla per 272 secondi; il conduttore, per 43. È il profilo acustico che mette in crisi la diarizzazione in qualsiasi lingua: voci simili che si alternano in interventi brevi.
Qui il raggruppamento automatico collassa. Le due impronte vocali sono tanto vicine che l’algoritmo le unisce e assegna quasi tutta la conversazione a un’unica etichetta. La registrazione è per caso un programma di interviste in cinese, e ci ha permesso di verificare l’ipotesi più ovvia: un modello specializzato per la lingua avrebbe funzionato meglio. Abbiamo quindi eseguito, in una pipeline CPU, due modelli per i parlanti addestrati specificamente sul parlato cinese:
| Modello | Podcast in inglese | Caso difficile* | Tempo (audio di 5.7 min) |
|---|---|---|---|
| pyannote community-1 (il nostro modello, Neural Engine) | 96.7% | 81–82% | 2–4 s |
| CAM++ (addestrato in cinese, CPU) | 93.9% | 81.2% | 36–103 s |
| ERes2NetV2 (addestrato in cinese, CPU) | — | 80.5% | 220–290 s |
* Attribuzione a livello di frame sul file difficile con il numero di parlanti specificato. Senza questa informazione, tutti i modelli convergono su un unico parlante.
Entrambi collassano nello stesso modo, con un costo computazionale da 10 a 100 volte superiore. La difficoltà è acustica, non linguistica: il limite è ciò che gli embedding vocali attuali riescono a distinguere, in qualsiasi lingua.
Questo ha escluso la soluzione più ovvia e ne ha indicata un’altra: fornire alla pipeline un dato che non può dedurre, il numero di persone nella stanza. Specificando il numero (un’opzione del menu da 2 a 6), il file difficile passa dal collasso all’89% di accuratezza per frase. Il rilevamento automatico resta l’impostazione predefinita, perché funziona sul materiale tipico.
Ripetere il rilevamento con il numero esatto di parlanti. Lo stesso menu esporta SRT e VTT con le etichette.
Correggere gli interventi brevi
Una volta fissato il numero, circa metà degli errori rimasti si trovava in interventi sotto i tre secondi. Una clip di due secondi offre pochissimo segnale al modello di embedding; negli scambi rapidi, la sua impronta assorbe anche parte della voce del parlante vicino.
Dopo il raggruppamento, la pipeline riesamina quindi ogni frase più breve di 3.5 secondi. Ricalcola l’impronta con una maschera che copre esattamente i frame della frase, la confronta con l’ancora di ogni parlante — la media dei suoi interventi più lunghi — e cambia l’etichetta solo quando il margine è netto. Riutilizza il modello esistente; non serve alcun download aggiuntivo.
| Accuratezza per frase end-to-end | Prima della correzione | Dopo |
|---|---|---|
| Caso difficile (numero di parlanti indicato) | 89.0% | 94.8% |
| Podcast in inglese (automatico) | 98.5% | 99.1% |
La soglia è prudente: sui due file, la correzione ha cambiato 21 etichette senza introdurre nuovi errori.
Limiti
• Le etichette compaiono dopo la fine della registrazione, non durante la chiamata. Se ti servono sottotitoli in diretta con i nomi dei parlanti mentre la riunione è ancora in corso, è più adatto un servizio cloud come Otter o Notta.
• Quando due persone parlano insieme, ogni frase riceve una sola etichetta.
• Le voci simili restano difficili. Il risultato del 94.8% sul nostro file difficile è il limite attuale con il numero di parlanti indicato, non un problema risolto.
Disponibilità
L’identificazione dei parlanti è inclusa nell’acquisto una tantum da $6.99, insieme ai tre motori di trascrizione dell’app — Parakeet V3, Whisper Large V3 Turbo e SenseVoice — e all’editing locale con IA. Non esistono piani separati e non serve un account.
• iPhone: App Store, versione 1.8.5 o successiva.
• Mac App Store: versione 1.3.2 o successiva.
• Download diretto per Mac (DMG): versione 1.5.1 o successiva da whispernotes.app, con una prova gratuita.
Per sapere come funziona la registrazione delle riunioni, leggi il nostro articolo sulla trascrizione offline delle riunioni.