Autowykrywanie wciąż zgaduje źle: przypnij swój język

Dyktowanie ciągle ląduje w złym języku? Autowykrywanie z założenia miota się przy mowie dwujęzycznej. Przypnij język raz, a zostanie przypięty.

Teodor Deleanu10 lipca 20267 min czytania

Jeśli dyktujesz w więcej niż jednym języku, znasz tę awarię. Mówisz zdanie po rumuńsku, a transkrypt wraca jako fonetycznie pokaleczony angielski — prawdziwe słowa, żadne z nich Twoje. Albo przewraca się w połowie zdania: pierwsza połowa we właściwym języku, druga w czymś, na co model uznał, że się przełączyłeś. Albo, mój osobisty faworyt, zupa z mieszanych alfabetów — litery łacińskie z kilkoma cyrylickimi wrzuconymi tu i ówdzie, jakby model asekurował się litera po literze.

To nie jest skarga na jeden produkt. To przewidywalny tryb awarii automatycznego wykrywania języka, łącznie ze strojonym pod angielski domyślnym silnikiem Keebye. Uderza w osoby mówiące po angielsku z akcentem i w każdego, kto przez cały dzień przeskakuje między językami. Dwujęzyczny programista, którego Slack jest po polsku, a komunikaty commitów po angielsku, daje autowykrywaniu dokładnie te mieszane sygnały, z którymi radzi sobie najgorzej.

Druga połowa skargi jest cichsza, ale równie prawdziwa: kiedy ustawienie języka istnieje, często jest zakopane. Trzy menu w głąb, za wyborem silnika, po przełączniku, którego nazwa w ogóle nie wspomina o języku. Jeśli przełączasz języki dwadzieścia razy dziennie, zakopane ustawienie funkcjonalnie nie jest żadnym ustawieniem.

Chcę wyjaśnić, dlaczego to miotanie się w ogóle zachodzi — na przykładzie własnego produktu, bo Keebye miał ten problem, zanim miał na niego lekarstwo — a potem pokazać, jak wygląda faktyczne rozwiązanie.

Dlaczego autowykrywanie się miota (i dlaczego to nie do końca błąd)

Oto uczciwa mechanika. Współczesne modele mowy identyfikują język po cichu, jako część dekodowania. Model słucha, formuje wewnętrzne przypuszczenie, jaki język słyszy, i dekoduje pod to przypuszczenie. Gdy dźwięk jest czysty, bez akcentu i jednojęzyczny, działa to tak dobrze, że nigdy o tym nie myślisz.

Teraz nakarm go prawdziwą mową. Akcent przesuwa samogłoski w stronę fonemów innego języka. W zdaniu są trzy angielskie zapożyczenia — jak w każdej rozmowie technicznej. W tle jest dziecko albo siedzisz przy mikrofonie w laptopie. Każda z tych rzeczy obniża pewność wewnętrznego przypuszczenia modelu, a przypuszczenie o niskiej pewności potrafi przeskakiwać między ramkami. Kiedy przeskakuje, przeskakuje z nim dekodowanie, a Ty dostajesz transkrypt zmieniający język w środku myśli.

Kluczowa rzecz: w większości narzędzi nic tego przypuszczenia nie kotwiczy. Model decyduje, po cichu, dla każdej wypowiedzi, a Ty nie masz jak go nadpisać. To nie jest błąd w żadnej pojedynczej aplikacji — tym po prostu jest ciche autowykrywanie. Model podejmuje decyzję, której nie możesz skorygować.

Znam to dogłębnie, bo domyślny silnik Keebye ma dokładnie tę właściwość. Parakeet, nasz domyślny silnik strojony pod angielski, ignoruje wszelkie podpowiedzi językowe na warstwie dekodowania — nie możesz mu powiedzieć, co zaraz powiesz. Na czystym angielskim jest znakomity i dlatego jest domyślny. Na niewyraźnym dźwięku potrafi miotać się między językami jak wszystko inne w tej kategorii. Mówię Ci o tym najpierw na przykładzie własnego produktu, bo lekarstwo nabiera sensu dopiero wtedy, gdy przyjmiesz, że problem mieszka w architekturze, a nie w niechlujstwie jakiegoś konkurenta.

Co właściwie robi przypięcie języka?

Lekarstwem jest przestać prosić model o zgadywanie. Keebye ma drugi silnik na urządzeniu — Canary 1B v2 od NVIDII, skwantyzowany do int8 — który obejmuje dokładnie 25 języków: bułgarski, chorwacki, czeski, duński, niderlandzki, angielski, estoński, fiński, francuski, niemiecki, grecki, węgierski, włoski, łotewski, litewski, maltański, polski, portugalski, rumuński, słowacki, słoweński, hiszpański, szwedzki, rosyjski i ukraiński. W przeciwieństwie do silnika domyślnego Canary przyjmuje instrukcję językową i jej przestrzega.

Keebye udostępnia to jako przypięcie: jawne ustawienie języka przekazywane silnikowi Canary przy każdej wypowiedzi. Przypnij rumuński, a dekoder użyje rumuńskiego zamiast dokonywać automatycznego wyboru języka. Rozpoznawanie wciąż może się mylić, zwłaszcza przy zapożyczeniach i głośnym dźwięku, ale wybór języka nie jest już niekontrolowanym zgadywaniem.

Ustawienie jest odczytywane na żywo, przy każdym dyktowaniu. Zmień je, a następne przytrzymanie klawisza użyje nowego języka, bez restartu aplikacji. To znaczy więcej, niż brzmi: kontrola nad językiem jest znacznie użyteczniejsza, gdy jej przełączenie nie przerywa pracy.

A ponieważ Canary działa na urządzeniu jak wszystko inne w Keebye, przypięcie nie kosztuje Cię prywatności. Model waży około 1,3 GB, pobierany raz; potem Twój rumuński, Twój polski, Twój ukraiński nigdy nie opuszczają maszyny. (Dlaczego w ogóle uważamy lokalne dyktowanie wielojęzyczne za ważne, to osobny tekst — Dlaczego dyktowanie dla programistów nie powinno być tylko po angielsku. Ten jest jego praktyczną kontynuacją: tamten argumentuje za tymi językami, ten jest o tym, jak zrobić je faktycznie używalnymi.)

Dwa kliknięcia, a nie trzy menu w głąb

Przypięcie, do którego nie możesz dosięgnąć, to przypięcie, którego nie użyjesz, więc przełącznik mieszka w pasku menu. Ikona Keebye w pasku menu ma menu „Język dyktowania” z wyselekcjonowaną krótką listą 11 języków — angielski, rumuński, francuski, niemiecki, hiszpański, włoski, portugalski, niderlandzki, polski, rosyjski, ukraiński. Dwa kliknięcia z dowolnej aplikacji: kliknij pasek menu, kliknij język. Nie otwierasz Ustawień, nie opuszczasz okna, w którym pracowałeś.

Pełna lista 25 języków mieszka w Ustawieniach, dla języków spoza krótkiej listy. Ale krótka lista pokrywa codzienną rzeczywistość większości pracy dwujęzycznej: piszesz do zespołu w jednym języku, a do klienta lub agenta AI w drugim, i potrzebujesz, żeby przełączenie nic nie kosztowało.

Jest jeszcze jedna opcja warta poznania, bo u części osób całkowicie zmienia sposób korzystania z przypięcia: przełącznik tłumaczenia na angielski. Mówisz w swoim języku, angielski ląduje przy kursorze — ten sam silnik, to samo wykonanie na urządzeniu. Jeśli Twój monolog wewnętrzny biegnie po rumuńsku, a wyjście musi być po angielsku (komunikaty commitów, prompty do agenta kodującego, odpowiedzi do międzynarodowego zespołu), to zwija krok tłumaczenia, który robiłeś w głowie. Używam tego częściej, niż się spodziewałem.

Co kosztuje Cię przypięcie

25 języków to 25 języków. Chmurowe narzędzia do dyktowania wymieniają znacznie więcej, bo wysyłanie dźwięku do dużego modelu po stronie serwera to tani sposób na dodawanie języków. To prawdziwy kompromis działania na urządzeniu: model, który mieści się na Twoim Macu, pokrywa mniejszą część świata niż model wypełniający centrum danych. Jeśli Twojego języka nie ma na liście 25, wielojęzyczny silnik Keebye dziś Cię nie obsłuży, a wolę to powiedzieć, niż zaokrąglać w górę.

Przypięcie znaczy przypięcie. To druga strona determinizmu i chcę powiedzieć to wprost: jeśli przypniesz rumuński, a potem powiesz coś po angielsku, Keebye wiernie zdekoduje Twój angielski jako rumuński, dopóki nie przełączysz. Silnik robi dokładnie to, co mu kazałeś. Cały urok autowykrywania polegał na tym, że nigdy nie musiałbyś o tym myśleć — przypięcie wymienia tę wygodę na przewidywalność. Z mojego doświadczenia ta wymiana się opłaca, bo złe przypuszczenie, nad którym nie masz kontroli, jest gorsze niż złe ustawienie, które poprawisz dwoma kliknięciami. Ale to wymiana, a nie darmowy obiad.

Krótka lista w pasku menu ma 11 języków, nie 25. Jeśli Twoja codzienna para obejmuje na przykład fiński albo grecki, po jedną stronę idziesz przez Ustawienia. Selekcja oznacza, że czyjś język nie trafił do szybkiego menu.

Co z tego wynika dla samej skargi

Skarga na poziomie kategorii — „moje dyktowanie ciągle wychodzi w złym języku” — jest tak naprawdę skargą na ciche decyzje. Model zgadł, przypuszczenie było złe i nie było jak mu powiedzieć inaczej. Każde lekarstwo, które zostawia zgadywanie (lepsza detekcja, dłuższe okna dźwięku, progi pewności), tylko czyni awarię rzadszą i dziwniejszą. Lekarstwem, które faktycznie kończy skargę, jest oddanie decyzji użytkownikowi.

Jeśli obecnie przeżywasz to z innym narzędziem, nasze strony porównań uczciwie mówią, gdzie każde narzędzie pasuje — Keebye vs Superwhisper i Keebye vs Wispr Flow poruszają między innymi kwestię języka. Żeby wypróbować samo przypięcie, zacznij bezpłatny okres próbny poniżej, powtórz rumuńskie albo polskie zdanie z początku tego artykułu i zobacz, ile z tego miotania się brało się z niekontrolowanego przypuszczenia, a nie z Twojego akcentu.

Przypnij język, którego naprawdę używasz

Zacznij bezpłatny okres próbny i powtórz jedną odpowiedź w ojczystym języku, którą autowykrywanie wcześniej pokaleczyło.

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.

Czytaj dalej