Automatisk detektering fortsätter gissa fel: lås ditt språk

Landar dikteringen hela tiden på fel språk? Automatisk detektering pendlar på tvåspråkigt tal av konstruktion. Lås ditt språk en gång, så förblir det låst.

Teodor Deleanu10 juli 20267 min läsning

Om du dikterar på mer än ett språk har du sett felet. Du säger en mening på rumänska och transkriptionen kommer tillbaka som fonetiskt manglad engelska — riktiga ord, inget av dem ditt. Eller så vänder den mitt i meningen: första halvan på rätt språk, andra halvan på något modellen bestämde att du bytte till. Eller, min personliga favorit, blandad alfabetssoppa — latinska tecken med några kyrilliska instrockade, som om modellen garderade sig bokstav för bokstav.

Det här är inget klagomål om en enskild produkt. Det är en förutsägbar felmod hos automatisk språkdetektering, inklusive Keebyes engelsktunade standardval. Det drabbar talare med brytning på engelska och alla som kodväxlar under dagen. En tvåspråkig utvecklare vars Slack är på polska och vars commit-meddelanden är på engelska ger den automatiska detekteringen precis de blandade signaler den hanterar sämst.

Klagomålets andra halva är tystare men lika verklig: när en språkinställning finns är den ofta begravd. Tre menyer ner, bakom en motorväljare, förbi en växel vars namn inte ens nämner språk. Om du byter språk tjugo gånger om dagen är en begravd inställning i praktiken ingen inställning.

Jag vill förklara varför pendlandet uppstår — med min egen produkts krigshistoria, för Keebye hade problemet innan den hade lösningen — och sedan visa hur en faktisk lösning ser ut.

Varför automatisk detektering pendlar (och varför det inte precis är en bugg)

Här är den ärliga mekaniken. Moderna talmodeller gör språkidentifiering tyst, som en del av avkodningen. Modellen lyssnar, formar en intern gissning om vilket språk den hör, och avkodar mot den gissningen. När ljudet är rent, utan brytning och enspråkigt fungerar det så bra att du aldrig tänker på det.

Mata den nu med riktigt tal. En brytning förskjuter vokalerna mot ett annat språks fonem. En mening innehåller tre engelska lånord — det gör varje tekniskt samtal. Det finns ett barn i bakgrunden, eller så sitter du på en laptopmikrofon. Var och en av de sakerna gör modellens interna språkgissning mindre säker, och en osäker gissning kan vända mellan bildrutor. När den vänder vänder avkodningen med den, och du får en transkription som byter språk mitt i tanken.

Det avgörande: i de flesta verktyg finns ingenting som förankrar den gissningen. Modellen bestämmer, tyst, per yttrande, och du har ingen överstyrning. Det är ingen bugg i någon enskild app — det är vad tyst automatisk detektering är. En modell som gör en bedömning du inte kan rätta.

Jag känner det här på pulsen för att Keebyes standardmotor har exakt den egenskapen. Parakeet, vårt engelsktunade standardval, ignorerar varje språktips på avkodningslagret — du kan inte tala om för den vad du är på väg att säga. På tydlig engelska är den utmärkt, vilket är varför den är standard. På otydligt ljud kan den pendla mellan språk som allt annat i kategorin. Jag berättar det här om min egen produkt först, för lösningen är begriplig först när du accepterar att problemet bor i arkitekturen och inte i någon konkurrents slarv.

Vad gör det egentligen att låsa ett språk?

Lösningen är att sluta be modellen gissa. Keebye levererar en andra motor på enheten — NVIDIAs Canary 1B v2, kvantiserad till int8 — som täcker exakt 25 språk: bulgariska, danska, engelska, estniska, finska, franska, grekiska, italienska, kroatiska, lettiska, litauiska, maltesiska, nederländska, polska, portugisiska, rumänska, ryska, slovakiska, slovenska, spanska, svenska, tjeckiska, tyska, ukrainska och ungerska. Till skillnad från standardmotorn tar Canary emot en språkinstruktion och respekterar den.

Keebye exponerar det som ett lås: en explicit språkinställning som skickas till Canary-motorn för varje yttrande. Lås rumänska så använder avkodaren rumänska i stället för att göra ett automatiskt språkval. Igenkänningen kan fortfarande bli fel, särskilt kring lånord och brusigt ljud, men språkvalet är inte längre en okontrollerad gissning.

Inställningen läses live, per diktering. Ändra den så använder nästa håll-in-för-att-diktera det nya språket utan omstart av appen. Det spelar större roll än det låter: en språkkontroll är långt mer användbar när det inte avbryter arbetet att byta den.

Och eftersom Canary körs på enheten som allt annat i Keebye kostar låset dig inte integritetsberättelsen. Modellen är ungefär 1,3 GB, nedladdad en gång; efter det lämnar din rumänska, din polska, din ukrainska aldrig maskinen. (Varför vi tycker att lokal flerspråkig diktering spelar roll över huvud taget är sitt eget inlägg — diktering för utvecklare bör inte vara enbart på engelska. Det här är dess praktiska uppföljare: det inlägget argumenterar för språken, det här handlar om att göra dem faktiskt användbara.)

Två klick, inte tre menyer ner

Ett lås du inte kan nå är ett lås du inte använder, så växlingen bor i menyraden. Keebyes ikon i menyraden har en meny för ”Dictation Language” med en kurerad kortlista på 11 språk — engelska, rumänska, franska, tyska, spanska, italienska, portugisiska, nederländska, polska, ryska, ukrainska. Två klick från vilken app som helst: klicka på ikonen, klicka på språket. Du öppnar inte Inställningar, du lämnar inte fönstret du arbetade i.

Hela listan på 25 språk bor i Inställningar, för språken utanför kortlistan. Men kortlistan täcker den dagliga verkligheten i de flesta tvåspråkiga arbeten: du skriver till ditt team på ett språk och till en kund eller en AI-agent på ett annat, och du behöver att växlingen inte kostar något.

Det finns ett alternativ till som är värt att känna till, för det ändrar hur vissa använder låset helt: en växel för att översätta till engelska. Tala ditt språk, engelska landar vid markören — samma motor, samma körning på enheten. Om din inre monolog går på rumänska men din utdata måste vara engelsk (commit-meddelanden, prompter till en kodagent, svar till ett internationellt team) kollapsar det översättningssteget du gjorde i huvudet. Jag använder det mer än jag väntade mig.

Vad låset kostar dig

25 språk är 25 språk. Molnbaserade dikteringsverktyg listar långt fler, för att skicka ljud till en stor servermodell är det billiga sättet att lägga till språk. Det är den verkliga avvägningen med att köra på enheten: en modell som får plats på din Mac täcker mindre av världen än en modell som fyller ett datacenter. Om ditt språk inte finns på listan med 25 täcker Keebyes flerspråkiga motor dig inte i dag, och jag säger hellre det än rundar upp.

Ett lås betyder ett lås. Det här är determinismens baksida, och jag vill vara tydlig med den: om du låser rumänska och sedan talar engelska kommer Keebye troget att felavkoda din engelska som rumänska tills du byter. Motorn gör exakt det du sa åt den att göra. Hela poängen med automatisk detektering var att du aldrig skulle behöva tänka på det här — låset byter den bekvämligheten mot förutsägbarhet. Enligt min erfarenhet är bytet värt det, för en felaktig gissning du inte kan styra är värre än en felaktig inställning du kan fixa på två klick. Men det är ett byte, ingen gratislunch.

Kortlistan i menyraden har 11 språk, inte 25. Om ditt dagliga par innehåller till exempel finska eller grekiska går du via Inställningar för den ena sidan av det. Kurering betyder att någons språk inte kom med i snabbmenyn.

Var det här lämnar klagomålet

Klagomålet på kategorinivå — ”min diktering kommer hela tiden ut på fel språk” — är egentligen ett klagomål om tysta beslut. Modellen gissade, gissningen var fel, och det fanns inget sätt att säga emot. Varje lösning som behåller gissandet (bättre detektering, längre ljudfönster, konfidenströsklar) gör bara felet sällsyntare och konstigare. Lösningen som faktiskt avslutar klagomålet är att ge beslutet tillbaka till användaren.

Om du just nu lever det här med ett annat verktyg är våra jämförelsesidor ärliga om var varje verktyg passar — Keebye vs Superwhisper och Keebye vs Wispr Flow täcker båda språkfrågan bland andra. För att testa själva låset, starta din kostnadsfria provperiod nedan, spela upp den rumänska eller polska meningen från början av den här artikeln, och se hur mycket av pendlandet som kom från en okontrollerad gissning snarare än från din brytning.

Lås språket du faktiskt använder

Starta din kostnadsfria provperiod och spela upp ett svar på modersmålet som den automatiska detekteringen tidigare manglade.

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.

Läs vidare