
Kāpēc AI transkripcija pārprot tehniskos terminus (un kā mēs to salabojām)
Tiešraides sesija "what is the pointer in C++" sadzirdēja kā "what is the point in life". Šeit ir izmeklēšanas ceļš no šī transkripta līdz GeekBye v2.0.11 — keyterm biasing, savienojumus raujoša laika sacensība un diena, kad mūsu pašu labojums nostrādāja pretēji.
- jūlijā mēs veicām testa sesiju un skaļi uzdevām GeekBye vienkāršu jautājumu: "What is the pointer in C++?" ("kas ir rādītājs C++ valodā?").
Tiešraides transkripts atbildēja ar dzeju:
[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.
Tā pati sesija — veselības metrikas izstāstīja pārējo: 3 pārtrūkuši transkripcijas savienojumi 163 sekundēs un 51 sekundes caurums transkriptā. Un vēl viena pēda, kas izrādījās vissvarīgākā: mūsu pēcsesijas atkopšanas piegājiens, kas atkārtoti transkribē lokāli saglabāto audio, lai aizpildītu caurumus, teikumu uztvēra gandrīz pareizi: "a pointer in plus, plus? What the pointer in plus, plus C++."
Audio bija kārtībā. Tiešraides modelim vienkārši nebija iemesla gaidīt C++.
Šis ir stāsts par GeekBye v2.0.11, izstāstīts no īstajiem transkriptiem un produkcijas žurnāliem.
Kāpēc runas modeļi pārprot jūsu vārdnīcu
Runas atpazīšana ir prognozēšanas problēma. Saņemot neviennozīmīgu audio, modelis izvēlas ticamākos vārdus — un vispārīga lietojuma modelim "point in life" (dzīves jēga) ir daudz ticamāka frāze nekā "pointer in C++" (rādītājs C++ valodā). Katrs inženieris, kurš redzējis, kā sapulces transkripts Kubernetes atveido kā "cube and eddies", ir sastapies ar šo kļūmi.
Risinājums nav labāks mikrofons. Tas ir keyterm biasing: pateikt modelim pirms sesijas sākuma, kuri maz ticamie vārdi ir ticami tieši jums. Mūsu runas pakalpojuma sniedzējs atbalsta līdz 50 virzīšanas terminiem sesijā. Un nu neērtā daļa: šo terminu cauruļvads mūsu stekā pastāvēja no gala līdz galam — klients, backend, pakalpojuma sniedzējs — un neviens to nekad nebija aizpildījis. Katra sesija notika bez jebkādas jomas palīdzības.
1. labojums: jūsu profils kļūst par modeļa vārdnīcu
GeekBye jau zina jūsu jomu — tā ir jūsu aktīvajā profilā. v2.0.11 atvasina virzīšanas keyterms no profila nosaukuma un apraksta: termini ar simboliem (C++, Node.js), akronīmi (SQL, AWS), camelCase nosaukumi (TypeScript, PostgreSQL) un īpašvārdi. Profils, kurā pieminēts jūsu steks, tagad padara šo steku par gaidītu, nevis eksotisku.
Diena, kad labojums visu padarīja sliktāku
Mūsu pirmā versija katru vārdu ar lielo sākuma burtu uzskatīja par īpašvārdu. Iekšējā testa būvējumā (tas nekad nesasniedza klientus) prozā rakstīts profils nosūtīja modelim šādu virzīšanas sarakstu:
Senior, Writing, Direct, For, Includes, Write, Role, Intent…
Virzīt runas modeli uz vārdu "For" ir sliktāk nekā nevirzīt to vispār. Jau nākamajā testa sesijā vārds "speak" — izrunāts skaidri, vairākas reizes — atgriezās kā "Clicky", "Hey, Vicky" un "Peter Paderty". Mācība mums izmaksāja vienu pēcpusdienu: virziet tikai ar atšķirīgiem terminiem. Vārdi ar lielo sākuma burtu tagad tiek ņemti vērā tikai tad, ja tie parādās teikuma vidū (īsts īpašvārda signāls); markdown virsraksti, kur katrs vārds sākas ar lielo burtu, nekad neko nedod. Tas pats profils tagad atvasina tieši LinkedIn, AI, CEO, MCP — un validācijas sesija pareizi transkribēja daudzvalodu, strauji mainīgu audio 199 sekundes pēc kārtas: 189 transkripta segmenti, nulle kļūdu.
2. labojums: sacensība, kas pārtrauca savienojumus
Keyterms izskaidroja pārprastos vārdus. Tie neizskaidroja trīs pārtrūkušos savienojumus.
Šī pēda veda uz kaut ko smalkāku. Mūsu pakalpojuma sniedzējs apstiprina (finalizē) transkripciju pēc savas balss aktivitātes noteikšanas — apmēram sekundi pēc klusuma iestāšanās. Mūsu klients arī sūta drošības commit 250 milisekundes pēc klusuma iestāšanās, lai izskalotu jebkuru karājošos daļējo teikumu. Pakalpojuma sniedzēja apstiprinājums, ka tas jau ir veicis commit, atceļā aizņem vienu līdz trīs sekundes. Parēķiniet ar šiem trim skaitļiem: ikreiz, kad pakalpojuma sniedzējs paspēja pirmais, mūsu drošības commit izšāva pret gandrīz tukšu buferi — un pakalpojuma sniedzēja atbilde uz to nebija tikai pieklājīgs noraidījums. Tas pārtrauca savienojumu. Katra pauze runā bija monētas mešana.
v2.0.11 pret to piegādā divus slāņus:
- Lietotnē: kad pienāk apstiprināts transkripts, klients tagad zina, ka pakalpojuma sniedzēja buferis tikko iztukšots, un izlaiž lieko drošības commit.
- Mūsu backend pusē, tajā pašā dienā: starpniekserveris (proxy), kas atrodas starp lietotni un pakalpojuma sniedzēju, precīzi atspoguļo sniedzēja audio uzskaiti — tas redz katru audio kadru un katru commit apstiprinājumu ar nulles latentumu — un vienkārši atsakās pārsūtīt jebkuru commit, ko sniedzējs noraidītu. Šis aizsargā visas klienta versijas vienlaikus, arī lietotājus, kuri nav atjauninājušies.
Mēs redzējām to strādājam produkcijā stundas laikā. Aizsargs pārtvēra lemtos commit ar 178 ms un 256 ms buferēta audio — katrs no tiem pirms šīs dienas būtu garantēts savienojuma pārrāvums un caurums kāda sapulces piezīmēs. 60 minūšu nepārtraukta sesija tajā pēcpusdienā reģistrēja piecas pārtveršanas un nulli pārrāvumu. Pirms labojuma reāls lietotājs tajā pašā rītā bija pārstartējis ierakstīšanu piecas reizes sešās minūtēs, cīnoties tieši ar šo kļūdu.
Divi mazāki labojumi, kas nāk līdzi
AI ieskati tagad gaida saturu. Šie sakropļotie agrīnie fragmenti agrāk baroja GeekBye tiešraides ieteikumu kartītes, kuras pārliecinoši radīja tēmas kā "Defining Life's Ultimate Purpose" no pārprasta C++ jautājuma. Ieteikumi tagad gaida, līdz sesijai ir īsta sarunas masa.
Atkoptais teksts saņem pareizo runātāju. Atkopšanas piegājiens, kas mūsu C++ jautājumu transkribēja pareizi, bija to attiecinājis uz "Them". Lokāli saglabātā audio laika skala tagad reģistrē, kurš runāja, tāpēc atkoptie segmenti pareizi attiecinās uz You vai Them.
Rezultātu tablo
| Metrika (izmērīta, ne aplēsta) | Pirms | Pēc v2.0.11 + backend aizsarga |
|---|---|---|
| Savienojuma pārrāvumi testa sesijā | 3 pa 163 s | 0 |
| Garākais transkripta caurums | 51 s | ~6 s sliktākais caurums validācijā |
| "pointer in C++" | "point in life" | pareizi, ar virzītu vārdnīcu |
| Lemtie commit, kas sasniedz sniedzēju | visi | 0 (pārtverti backend pusē) |
Ja būvējat uz reāllaika runas API
Trīs pārnesamas mācības no šī laidiena:
- Barojiet virzīšanas funkciju. Ja jūsu STT sniedzējs atbalsta keyterms / frāžu norādes, to aizpildīšana ar mazu, atšķirīgu vārdnīcu ir lētākais pieejamais precizitātes ieguvums — savukārt aizpildīšana ar biežiem vārdiem ir precizitātes zaudējums.
- Nekad nesacentieties ar sniedzēja paša stāvokļa mašīnu no nepareizās tīkla apļa puses. Mūsu klients nevarēja uzvarēt 250 ms pret 3 s informācijas sacensībā. Aizsargam jāatrodas tur, kur abi signāli saplūst — mums tas ir backend proxy.
- Validējiet uz dzīva būvējuma pirms publicēšanas. Keyterms regresija tika noķerta, jo katrs GeekBye laidiens pirms izlaišanas tiek testēts kā parakstīts, notarizēts būvējums pret produkciju. Sliktā versija dažas stundas pastāvēja uz vienas iekšējas mašīnas, ne uz jūsu Mac.
GeekBye v2.0.11 jau ir pieejams — ja lietojat v2, tas jums jau ir, pateicoties automātiskajai atjaunināšanai. Par uzticamības pamatiem, uz kuriem balstās šis laidiens, lasiet kāpēc jūsu AI piezīmju rīks apstājas sliktā Wi-Fi tīklā un kas mainījies GeekBye v2. Par to, kā tiešraides transkripcija strādā ikdienā, sāciet ar reāllaika transkripciju GeekBye.

