Glasovni model proizvodi zvuk, a telefonskom razgovoru treba više od toga. Između modela i pozivatelja agent svaku rečenicu skraćuje, prilagođava joj frekvenciju uzorkovanja, provjerava je tako da je prepozna natrag i sprema u predmemoriju, a predmemorija se noću sama ponovno provjerava. Ova bilješka opisuje tu obradu.
Sintetizirana rečenica može započeti vlastitom kratkom tišinom koju nijedan zapisnik vremena ne pokazuje. Ovdje počinjemo od toga.
Izmjereno na: početna tišina u 400 isječaka iz glasovne predmemorije, prag −50 dBFS. Udjeli predmemorije s testnog postava za opterećenje, agent za zapošljavanje, 64.192 fraze. Pragovi provjere su produkcijske zadane vrijednosti i mogu se podesiti za svaku instalaciju.
Ukratko: tišina prije prve riječi pada s medijana od 280 ms na 40 ms. Svaki isječak koji ulazi u predmemoriju prepozna se natrag i usporedi s tekstom koji je trebao izgovoriti. Predmemorija se sama provjerava svake noći dok nema poziva. Na testnom postavu za opterećenje 94% prvih fraza odgovora došlo je iz provjerene predmemorije, a fraza iz predmemorije počinje za oko 1 ms.
Od zvuka do odgovora u pozivu
Model sinteze govora pretvara tekst u zvuk. Nije građen za telefonsku liniju, a ta se razlika vidi u sitnicama koje pozivatelj odmah primijeti:
- Tišina prije prve riječi. Svaki isječak počinje kratkom stankom. Pozivatelj je čuje kao oklijevanje agenta.
- Stanka usred rečenice. Na telefonskoj liniji pola sekunde tišine usred rečenice zvuči kao prekinuta veza. Pozivatelj počinje govoriti u tu prazninu i izmjena se raspada.
- Rečenica prekinuta prerano ili rečenica koja ne završava. Rijetko se dogodi da se model zaustavi na pola ili uđe u petlju.
- Pogrešne riječi. Svaki neuralni glas povremeno može izgovoriti nešto drugo od zadanog teksta, pa se svaki isječak provjerava. Sve akustičke mjere prolaze: zvuk je čist govor druge rečenice.
- Pucketanje i klipiranje. Zvuk nastao s jednom frekvencijom uzorkovanja mora do linije stići s drugom, u dijelovima, bez pucketanja na svakom spoju.
To je razmak između zvuka i odgovora u pozivu, a ništa od toga nije greška modela. Dialogist taj razmak zatvara obradom na izlazu, provjerom svakog isječka i predmemorijom koja se sama čisti.
Tišina prije prve riječi
Izmjerili smo početak 400 isječaka u glasovnoj predmemoriji. Medijan isječka počinjao je s 280 ms tišine, a nijedan s manje od 200 ms. Ta tišina stoji točno između kraja pitanja pozivatelja i odgovora agenta.
Agent je skida dok se isječak reproducira:
- Okviri. Skraćivač čita zvuk u okvirima od 10 ms. Prvi okvir glasniji od −50 dBFS početak je govora.
- Rezerva. Reprodukcija počinje 40 ms prije tog okvira. Četrdeset milisekundi čuva mekani početak prvog glasa, pa se ništa ne odsijeca.
- Strujanje. Skraćivač zadržava samo tihe okvire, a sve od početka govora propušta bajt po bajt.
- Ograničenje. Ako se govor ne pojavi unutar 600 ms, skraćivač isječak reproducira kakav jest: stanka košta manje od progutane prve riječi.
- Original ostaje. Predmemorija čuva neskraćeni isječak. Skraćivanje se događa pri reprodukciji, pa ga možemo podešavati bez diranja pohranjene datoteke.
Prema zadanim postavkama agent skraćuje prvu rečenicu svakog odgovora, gdje je tišina čisto čekanje. Stanke između kasnijih rečenica ostaju onakve kakve ih je glas napravio, jer tamo zvuče kao disanje.
Skraćivanje uklanja oko 240 ms od medijana uvodne tišine od 280 ms. Na liniji je odgovor jednog poziva stigao oko 200 ms ranije.
Frekvencije uzorkovanja bez pucketanja
Glas se proizvodi u studijskoj frekvenciji uzorkovanja, a telefonska linija radi na 8 ili 16 kHz. Pretvoriti cijeli isječak odjednom lako je. Pretvarati tok dio po dio izvor je pucketanja: svaki dio pretvoren zasebno počinje i završava malim prijelaznim šumom, a spojevi se čuju.
Agent pretvara metodom preklapanja i spremanja (overlap-save). Svaki dio filtrira s kontekstom s obje strane, a šalje samo sredinu, onaj dio koji je izračunat s punim kontekstom. Kad se tako šalje u toku, izlaz se od pretvorbe cijelog isječka odjednom razlikuje najviše za 2 najmanje značajna bita, što je ispod svega što telefonska linija može prenijeti.
Svaki isječak se provjerava
Prije nego isječak uđe u predmemoriju, gdje će ga čuti mnogi pozivatelji, agent ga provjerava. Provjera propušta zvuk natrag kroz prepoznavanje govora i kroz skup akustičkih testova.
| Provjera | Ne prolazi kad | Zašto |
|---|---|---|
| Prepoznavanje natrag | prepoznati tekst se s predviđenim podudara manje od 80% | Jedini način da se zna da je glas izgovorio ovu rečenicu. Tečan isječak pogrešnih riječi prolazi sve druge testove. |
| Duljina | isječak je kraći od 0,4× ili dulji od 2,5× duljine očekivane za taj tekst | Prekratak hvata prekinutu rečenicu. Predug hvata petlju. |
| Stanka unutar rečenice | bilo koja tišina unutar rečenice dulja je od 0,7 s | Na telefonskoj liniji zvuči kao prekinuta veza. |
| Razina | isječak je u cjelini tiši od −50 dBFS | Prazan ili gotovo nečujan isječak. |
| Klipiranje | više od 0,5% uzoraka dosiže puni opseg | Izobličenje koje pozivatelj čuje kao pucketanje. |
| Rubovi | tišina na bilo kojem kraju dulja je od 0,5 s | Samo upozorenje: sam govor je ispravan. |
Dvije pojedinosti održavaju provjeru poštenom:
- Brojevi se prosuđuju blago. Prepoznavanje „500“ zapisuje riječima, pa bi usporedba slovo po slovo oborila savršen isječak. Za tekst s brojkama nepodudaranje je samo upozorenje, a agent isječak ne generira ponovno u beskonačnoj petlji.
- Oznake izgovora uklanjaju se prije usporedbe, pa naglasak u tekstu ne računa kao pogreška.
Agent ponovno generira isječak koji ne prođe. Ako i dalje ne prolazi, agent ga označi da ga čovjek presluša.
Fraze spremne prije poziva
Mnoge rečenice koje agent izgovara predvidive su: pozdrav, pitanja iz skripte, potvrde. Predmemoriju agenta zagrijavamo prije početka poziva: s agentom vodimo simulirane razgovore, skupljamo što govori, sintetiziramo svaku frazu, provjeravamo je kao gore i spremamo.
Svaka fraza koja ne prođe provjeru dobiva drugi pokušaj, a sve što i tada ne dosegne prag označi se u izvještaju.
Na testnom postavu za opterećenje 94% prvih fraza odgovora i 95% svih 64.192 fraze došlo je iz predmemorije. Fraza iz predmemorije počinje za oko milisekundu; nova počinje za oko 100 ms.
Predmemorija se noću čisti sama
Predmemorija je dobra koliko i njezin najlošiji isječak, pa je Dialogist izvan radnog vremena ponovno provjerava.
- Kada. U noćnom prozoru, prema zadanim postavkama od 01:00 do 06:00, i samo dok nema aktivnih poziva. Ako poziv stigne, provjera stane i minutu poslije ponovno gleda.
- Što. Isječke koji nikad nisu provjereni, isječke koji su prošli s upozorenjem i isječke provjerene prije više od 30 dana.
- Kojim redom. Najprije najčešće reproducirane. Pogreška u frazi koja se čuje tisuću puta na dan košta više od pogreške u frazi koja se čuje jednom.
- Koliko. Do 2.000 isječaka na noć, jedan po jedan, tako da provjera ne dolazi u sukob sa sljedećim jutrom.
- Na kojem jeziku. Provjera prepoznaje svaki isječak na jeziku za koji je napravljen, pa greškom ne obara englesku frazu u predmemoriji koja je većinom srpska.
- Kad ne prođe. Provjera isječak ponovno generira, najviše dva puta. Novi zvuk zamjenjuje stari pod istim unosom, a unos zadržava povijest reprodukcije.
- Karantena. Ako ponovna generacija ne popravi isječak, provjera ga stavlja u karantenu. Agent nikad ne reproducira isječak iz karantene: tu rečenicu umjesto toga sintetizira uživo, a rezultat uživo ne smije prepisati datoteku u karanteni. Isječak ostaje dok ga čovjek ne presluša i ne odobri, ponovno generira ili izbriše.
Svako noćno izvođenje ostavlja izvještaj od jednog retka: koliko je isječaka provjereno, prošlo, ponovno generirano i stavljeno u karantenu.
Ista rečenica, isti zvuk
Predmemorija sprema svaki isječak sa svime što mijenja kako zvuči: glasom, brzinom govora, jezikom i profilom izgovora. Dva agenta s istim glasom i različitim brzinama nikad ne dijele isječak.
Rječnici izgovora (imena marki, ulice, žargon) spremaju se uz isječak. Kad noćna provjera ponovno generira frazu, primjenjuje iste unose rječnika koje je koristio izvorni poziv, pa novi isječak zvuči kao onaj koji zamjenjuje.
Na liniji
Posljednji je korak mikser koji šalje zvuk pozivatelju:
- Meki limiter na −1 dBFS na zbroju svega što se reproducira, tako da glas agenta i zvuk u pozadini zajedno nikad ne klipiraju.
- Utišavanje od 30 ms kad se agent zaustavlja zbog upada u riječ, pa staje bez pucketanja.
- Stišavanje agentova glasa dok pozivatelj govori; glas se vraća kad on prestane. Slušanje dok govori opisuje kako agent postupa sa stranom pozivatelja.