Il rilevamento automatico sbaglia: fissa la lingua

La dettatura esce nella lingua sbagliata? Il rilevamento automatico oscilla sul parlato bilingue per costruzione. Fissa la lingua una volta e resta tale.

Teodor Deleanu10 luglio 20267 min di lettura

Se detti in più di una lingua, il fallimento l'hai già visto. Dici una frase in rumeno e la trascrizione torna come inglese storpiato foneticamente — parole vere, nessuna delle tue. Oppure si ribalta a metà frase: la prima metà nella lingua giusta, la seconda in qualcosa a cui il modello ha deciso che fossi passato. Oppure, la mia preferita, una zuppa di alfabeti misti — caratteri latini con qualche cirillico sparso, come se il modello si fosse coperto le spalle lettera per lettera.

Non è una lamentela su un prodotto. È una modalità di fallimento prevedibile del rilevamento automatico della lingua, incluso quello del motore predefinito di Keebye, tarato sull'inglese. Colpisce chi parla inglese con accento e chiunque cambi lingua durante la giornata. Uno sviluppatore bilingue che ha Slack in polacco e i messaggi di commit in inglese dà al rilevamento automatico esattamente i segnali misti che gestisce peggio.

La seconda metà della lamentela è più silenziosa ma altrettanto reale: quando un'impostazione della lingua esiste, spesso è sepolta. Tre menu in profondità, dietro un selettore di motore, oltre un interruttore il cui nome non nomina nemmeno la lingua. Se cambi lingua venti volte al giorno, un'impostazione sepolta è di fatto un'impostazione che non esiste.

Voglio spiegare perché avviene questa oscillazione — usando la storia di guerra del mio stesso prodotto, perché Keebye aveva questo problema prima di avere la soluzione — e poi mostrare che aspetto ha una soluzione vera.

Perché il rilevamento automatico oscilla (e perché non è esattamente un bug)

Ecco la meccanica onesta. I modelli vocali moderni fanno identificazione della lingua in silenzio, come parte della decodifica. Il modello ascolta, si forma un'ipotesi interna su che lingua sta sentendo e decodifica in base a quell'ipotesi. Quando l'audio è pulito, senza accento e monolingue, funziona così bene che non ci pensi mai.

Ora dagli in pasto parlato reale. Un accento sposta le vocali verso i fonemi di un'altra lingua. Una frase contiene tre prestiti inglesi — ogni conversazione tecnica li contiene. C'è un bambino in sottofondo, o sei sul microfono del portatile. Ognuna di queste cose rende meno sicura l'ipotesi interna del modello sulla lingua, e un'ipotesi poco sicura può ribaltarsi tra un frame e l'altro. Quando si ribalta, si ribalta anche la decodifica, e ottieni una trascrizione che cambia lingua a metà pensiero.

La parte cruciale: nella maggior parte degli strumenti non c'è niente che ancori quell'ipotesi. Il modello decide, in silenzio, per ogni enunciato, e tu non hai modo di sovrascriverlo. Non è un bug di una singola app — è ciò che il rilevamento automatico silenzioso è. Un modello che prende una decisione che non puoi correggere.

Lo so intimamente perché il motore predefinito di Keebye ha esattamente questa proprietà. Parakeet, il nostro predefinito tarato sull'inglese, ignora qualsiasi indicazione di lingua a livello di decodifica — non puoi dirgli cosa stai per pronunciare. Sull'inglese chiaro è eccellente, ed è per questo che è il predefinito. Su audio poco chiaro può oscillare tra le lingue come tutto il resto della categoria. Te lo dico prima del mio prodotto, perché la soluzione ha senso solo una volta accettato che il problema vive nell'architettura, non nella sciatteria di qualche concorrente.

Cosa fa davvero fissare una lingua?

La soluzione è smettere di chiedere al modello di indovinare. Keebye include un secondo motore on-device — il Canary 1B v2 di NVIDIA, quantizzato a int8 — che copre esattamente 25 lingue: bulgaro, croato, ceco, danese, olandese, inglese, estone, finlandese, francese, tedesco, greco, ungherese, italiano, lettone, lituano, maltese, polacco, portoghese, rumeno, slovacco, sloveno, spagnolo, svedese, russo e ucraino. A differenza del motore predefinito, Canary accetta un'istruzione di lingua e la rispetta.

Keebye la espone come un fissaggio: un'impostazione esplicita di lingua passata al motore Canary a ogni enunciato. Fissa il rumeno e il decodificatore usa il rumeno invece di fare una scelta automatica di lingua. Il riconoscimento può essere ancora sbagliato, soprattutto attorno ai prestiti e con audio rumoroso, ma la scelta della lingua non è più un'ipotesi senza controllo.

L'impostazione viene letta al volo, a ogni dettatura. Cambiala e la prossima dettatura a tasto premuto userà la nuova lingua senza riavviare l'app. Conta più di quanto sembri: un controllo sulla lingua è molto più utile quando cambiarlo non interrompe il lavoro.

E poiché Canary gira on-device come tutto il resto in Keebye, il fissaggio non ti costa la storia della privacy. Il modello è di circa 1,3 GB, scaricato una volta; dopodiché il tuo rumeno, il tuo polacco, il tuo ucraino non lasciano mai la macchina. (Il perché riteniamo che la dettatura multilingue locale conti è un articolo a sé — la dettatura non dovrebbe essere solo in inglese. Questo ne è il seguito pratico: quello difende le lingue, questo parla di renderle davvero usabili.)

Due clic, non tre menu di profondità

Un fissaggio che non riesci a raggiungere è un fissaggio che non userai, quindi l'interruttore vive nella barra dei menu. L'icona di Keebye nella barra dei menu ha un menu «Lingua di dettatura» con una selezione curata di 11 lingue — inglese, rumeno, francese, tedesco, spagnolo, italiano, portoghese, olandese, polacco, russo, ucraino. Due clic da qualsiasi app: clic sull'icona, clic sulla lingua. Non apri le Impostazioni, non lasci la finestra in cui stavi lavorando.

L'elenco completo di 25 lingue vive nelle Impostazioni, per le lingue fuori dalla selezione rapida. Ma quella selezione copre la realtà quotidiana della maggior parte del lavoro bilingue: scrivi al tuo team in una lingua e a un cliente o a un agente AI in un'altra, e il passaggio deve costare zero.

C'è un'altra opzione che vale la pena conoscere, perché cambia del tutto il modo in cui alcuni usano il fissaggio: un interruttore di traduzione verso l'inglese. Parli nella tua lingua, al cursore atterra l'inglese — stesso motore, stessa esecuzione on-device. Se il tuo monologo interiore va in rumeno ma il tuo output deve essere in inglese (messaggi di commit, prompt a un agente di coding, risposte a un team internazionale), questo elimina il passaggio di traduzione che facevi in testa. Lo uso più di quanto mi aspettassi.

Cosa ti costa il fissaggio

25 lingue sono 25 lingue. Gli strumenti di dettatura cloud ne elencano molte di più, perché mandare l'audio a un grande modello lato server è il modo economico di aggiungere lingue. È questo il vero compromesso dell'on-device: un modello che sta sul tuo Mac copre meno mondo di un modello che riempie un datacenter. Se la tua lingua non è nell'elenco delle 25, il motore multilingue di Keebye oggi non ti copre, e preferisco dirlo piuttosto che arrotondare per eccesso.

Un fissaggio è un fissaggio. È il rovescio della medaglia del determinismo, e voglio essere chiaro: se fissi il rumeno e poi parli inglese, Keebye decodificherà fedelmente il tuo inglese come rumeno finché non cambi. Il motore sta facendo esattamente quello che gli hai detto. Tutto il fascino del rilevamento automatico stava nel non doverci mai pensare — il fissaggio scambia quella comodità con la prevedibilità. Nella mia esperienza lo scambio conviene, perché un'ipotesi sbagliata che non puoi controllare è peggio di un'impostazione sbagliata che puoi correggere in due clic. Ma è uno scambio, non un pasto gratis.

La selezione rapida ha 11 lingue, non 25. Se la tua coppia quotidiana include, poniamo, il finlandese o il greco, per un lato passi dalle Impostazioni. Curare significa che la lingua di qualcuno non è entrata nel menu rapido.

Dove lascia la lamentela

La lamentela di categoria — «la mia dettatura esce sempre nella lingua sbagliata» — è in realtà una lamentela sulle decisioni silenziose. Il modello ha indovinato, l'ipotesi era sbagliata e non c'era modo di dirgli altrimenti. Ogni rimedio che mantiene l'ipotesi (rilevamento migliore, finestre audio più lunghe, soglie di confidenza) rende solo il fallimento più raro e più strano. Il rimedio che davvero chiude la lamentela è restituire la decisione all'utente.

Se stai vivendo tutto questo con un altro strumento, le nostre pagine di confronto sono oneste su dove ciascuno si colloca — Keebye vs Superwhisper e Keebye vs Wispr Flow trattano entrambe la questione della lingua, tra le altre. Per provare il fissaggio, inizia la prova gratuita qui sotto, ripeti la frase in rumeno o in polacco dall'inizio di questo articolo e guarda quanta parte dell'oscillazione veniva da un'ipotesi senza controllo, e non dal tuo accento.

Fissa la lingua che usi davvero

Inizia la prova gratuita e ripeti una risposta nella tua lingua madre che il rilevamento automatico aveva storpiato.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Continua a leggere