Steven
Steven6 min čítania

Prečo AI transkripcia komolí technické termíny (a ako sme to opravili)

Živá relácia počula "what is the pointer in C++" ako "what is the point in life". Toto je forenzná stopa od toho prepisu až po GeekBye v2.0.11 — keyterm biasing, časový súboj zhadzujúci spojenie a deň, keď sa naša vlastná oprava obrátila proti nám.

Prepis
Spoľahlivosť
Inžinierstvo
Vydania GeekBye
Prečo AI transkripcia komolí technické termíny (a ako sme to opravili)

Druhého júla sme spustili testovaciu reláciu a nahlas sme položili GeekBye jednoduchú otázku: "What is the pointer in C++?" (čo je pointer v C++).

Živý prepis odpovedal poéziou:

[23:16:37] You: Tell me, what is the point in life? [23:16:52] You: Handy Plus. [23:17:02] You: What the pointer in Plus Plus? [23:17:09] You: C.

Namiesto "pointer in C++" (pointer v C++) model počul "point in life" (zmysel života). Zvyšok tej istej relácie dopovedali zdravotné metriky: 3 zhodené transkripčné spojenia za 163 sekúnd a 51-sekundová diera v prepise. A ešte jedna stopa, ktorá sa nakoniec ukázala ako najdôležitejšia: náš obnovovací mechanizmus po relácii — ktorý nanovo prepíše lokálne uložené audio, aby vyplnil medzery — dostal vetu takmer správne: "a pointer in plus, plus? What the pointer in plus, plus C++."

So zvukom bolo všetko v poriadku. Živý model jednoducho nemal dôvod očakávať C++.

Toto je príbeh vydania GeekBye v2.0.11, rozprávaný podľa skutočných prepisov a produkčných logov.

Prečo rečové modely komolia vašu slovnú zásobu

Rozpoznávanie reči je predikčný problém. Pri nejednoznačnom zvuku model vyberá najpravdepodobnejšie slová — a pre všeobecný model je "point in life" oveľa pravdepodobnejšia fráza než "pointer in C++". Každý inžinier, ktorý videl, ako prepis stretnutia zmenil Kubernetes na "cube and eddies", pozná toto zlyhanie z prvej ruky.

Riešením nie je lepší mikrofón, ale keyterm biasing: povedať modelu ešte pred začiatkom relácie, ktoré nepravdepodobné slová sú pravdepodobné u vás. Náš rečový provider podporuje až 50 biasovacích termínov na reláciu. A teraz tá trápna časť: celé potrubie pre tieto termíny existovalo v našom stacku od začiatku do konca — klient, backend, provider — a nikto ho nikdy nenaplnil. Každá relácia bežala s nulovou doménovou pomocou.

Oprava 1: váš profil sa stáva slovníkom modelu

GeekBye už vašu doménu pozná — je vo vašom aktívnom profile. v2.0.11 odvodzuje biasovacie keytermy z názvu a popisu profilu: termíny so symbolmi (C++, Node.js), akronymy (SQL, AWS), názvy v camel case (TypeScript, PostgreSQL) a vlastné mená. Profil, ktorý spomína váš stack, teraz robí tento stack očakávaným, nie exotickým.

Deň, keď oprava všetko zhoršila

Naša prvá verzia považovala každé slovo s veľkým začiatočným písmenom za vlastné meno. Na internom testovacom builde (toto sa nikdy nedostalo k zákazníkom) profil napísaný bežnou prózou poslal modelu tento biasovací zoznam:

Senior, Writing, Direct, For, Includes, Write, Role, Intent…

Nakláňať rečový model k slovu "For" je horšie, než ho nenakláňať vôbec. Hneď v ďalšej testovacej relácii sa slovo "speak" — vyslovené zreteľne, viackrát — vrátilo ako "Clicky", "Hey, Vicky" a "Peter Paderty". Lekcia nás stála jedno popoludnie: biasujte len výraznými termínmi. Slová s veľkým začiatočným písmenom sa teraz rátajú len vtedy, keď stoja uprostred vety (skutočný signál vlastného mena); markdownové nadpisy, kde sa veľkým písmenom začína každé slovo, neprispievajú nikdy. Ten istý profil teraz odvodí presne LinkedIn, AI, CEO, MCP — a validačná relácia správne prepisovala viacjazyčné, rýchlo sa prepínajúce audio 199 sekúnd v kuse: 189 segmentov prepisu, nula chýb.

Oprava 2: súboj, ktorý zhadzoval spojenia

Keytermy vysvetlili skomolené slová. Tri zhodené spojenia nevysvetlili.

Táto stopa viedla k niečomu jemnejšiemu. Náš provider commituje (finalizuje) prepis na základe vlastnej detekcie hlasovej aktivity, zhruba sekundu po nástupe ticha. Náš klient tiež posiela poistný commit 250 milisekúnd po tichu, aby dotlačil prípadnú visiacu nedokončenú vetu. Providerovo potvrdenie, že už commitol, cestuje späť jednu až tri sekundy. Spočítajte si tie tri čísla: kedykoľvek provider commitol prvý, náš poistný commit vypálil do takmer prázdneho buffera — a providerova odpoveď nebola len zdvorilé odmietnutie. Zhodil spojenie. Každá pauza v reči bola hodom mincou.

v2.0.11 proti tomu prináša dve vrstvy:

  1. V aplikácii: keď príde commitnutý prepis, klient už vie, že providerov buffer bol práve vyprázdnený, a nadbytočný poistný commit preskočí.
  2. V našom backende, v ten istý deň: proxy medzi aplikáciou a providerom presne zrkadlí providerovo účtovanie audia — vidí každý audio frame a každé potvrdenie commitu s nulovou latenciou — a jednoducho odmietne preposlať akýkoľvek commit, ktorý by provider zamietol. Táto vrstva chráni všetky verzie klienta naraz, vrátane používateľov, ktorí sa ešte neaktualizovali.

Videli sme to fungovať v produkcii do hodiny. Poistka zachytila odsúdené commity nesúce 178 ms a 256 ms bufferovaného audia — každý z nich pred tým dňom znamenal zaručene zhodené spojenie a dieru v niečích poznámkach zo stretnutia. 60-minútová súvislá relácia v to popoludnie zaznamenala päť zachytení a nula výpadkov. Pred opravou, v to isté ráno, skutočný používateľ päťkrát za šesť minút reštartoval nahrávanie v boji presne s týmto bugom.

Dve menšie opravy v tom istom balíku

AI insighty teraz čakajú na obsah. Tie skomolené skoré útržky predtým kŕmili živé čipy s návrhmi v GeekBye, ktoré zo zle počutej otázky o C++ sebavedomo vyrábali témy ako "Defining Life's Ultimate Purpose". Návrhy teraz čakajú, kým relácia nazbiera skutočnú konverzačnú masu.

Obnovený text dostane správneho hovoriaceho. Obnovovací mechanizmus, ktorý našu otázku o C++ prepísal správne, ju pripísal "Them" (druhej strane). Lokálne ukladaná zvuková časová os teraz zaznamenáva, kto hovoril, takže obnovené segmenty sa správne priradia vám alebo druhej strane.

Výsledková tabuľa

Metrika (nameraná, nie odhadovaná) Pred Po v2.0.11 + backendová poistka
Výpadky spojenia v testovacej relácii 3 za 163 s 0
Najdlhšia diera v prepise 51 s ~6 s najhoršia medzera pri validácii
"pointer in C++" "point in life" správne, s biasovanou slovnou zásobou
Odsúdené commity, ktoré sa dostali k providerovi všetky 0 (zachytené na backende)

Ak staviate na realtime rečových API

Tri prenositeľné lekcie z tohto vydania:

  1. Naplňte biasovaciu funkciu. Ak váš STT provider podporuje keytermy/frázové nápovede, naplniť ich malou, výraznou slovnou zásobou je najlacnejší dostupný zisk presnosti — a naplniť ich bežnými slovami je strata presnosti.
  2. Nikdy nesúperte so stavovým automatom providera z nesprávnej strany sieťového round-tripu. Náš klient nemohol vyhrať informačný súboj 250 ms verzus 3 s. Poistka patrí tam, kde sa oba signály stretávajú — u nás je to backendové proxy.
  3. Validujte na živom builde pred publikovaním. Regresiu keytermov sme zachytili preto, lebo každé vydanie GeekBye sa pred expedíciou testuje ako podpísaný, notarizovaný build proti produkcii. Zlá verzia existovala pár hodín na jednom internom stroji, nie na vašom Macu.

GeekBye v2.0.11 je už vonku — ak ste na v2, máte ho už cez automatickú aktualizáciu. O základoch spoľahlivosti, na ktorých toto vydanie stavia, si prečítajte prečo sa váš AI zapisovač zastaví na zlej Wi-Fi a čo sa zmenilo v GeekBye v2. A o tom, ako živý prepis funguje v bežnom dni, začnite pri prepise v reálnom čase v GeekBye.