Ekspertyza · Transkrypcja i tłumaczenie
Mowa na tekst, po rumuńsku i rosyjsku, z zgodą zarejestrowaną przed pierwszą sekundą audio.
Transkrybujemy audio w czasie rzeczywistym lub z pliku, tłumaczymy między rumuńskim i rosyjskim w rozmowach z klientami oraz dostarczamy tekst z znacznikami czasu, eksportem audio i śladem zgody. Rozpoznawanie mowy uruchamiamy przez dostawców, przez nasz gateway; własny model rumuńskiego to badania, nie produkt.
Już zbudowaneDwa własne wdrożenia, oba otwarte i cytowane. Pierwsze to aplikacja do transkrypcji w strumieniu, z backendem Express o długości 3.378 linii w 25 plikach i 37 testami, które uruchomiliśmy dziś — wszystkie przechodzą; zawiera ona część, której nikt nie buduje z entuzjazmu: gate zgody, który odrzuca przechwycenie, gdy nie ma zarejestrowanej zgody. Drugie działa w produkcji, u rzeczywistych klientów: odebrane wiadomości głosowe na kanałach komunikacyjnych są transkrybowane, a odpowiedź napisana przez operatora po rumuńsku jest przepisywana na język klienta przed wysłaniem. To, co NIE wchodzi do „delivered” i jest tak zapisane na stronie: własny model rozpoznawania i syntezy w języku rumuńskim jest badawczy — nie ma publicznej demonstracji, nie ma interfejsu programowania, a pod względem dokładności po rumuńsku przegrywa z dużymi komercyjnymi systemami. Usługa sprzedaje to, co działa, a nie to, co badamy.
Transkrypcja wydaje się problemem rozwiązanym, dopóki nie zastosujesz jej do języka rumuńskiego, z dwiema osobami przerywającymi sobie nawzajem, szybko wypowiadanymi liczbami i klientem, który w połowie zdania przechodzi na rosyjski. Wtedy pojawiają się trzy prawdziwe problemy: jaki model wybrać dla języka przed Tobą, skąd wiadomo, gdzie kończy się kolejka wypowiedzi, i kto dał Ci zgodę na nagrywanie. Zajmujemy się wszystkimi trzema, a ostatni traktujemy jak problem kodu, a nie akapit polityki.
W naszej aplikacji do transkrypcji strumieniowej przeglądarka nigdy nie otrzymuje klucza dostawcy. Prosi backend o jednorazowy token, domyślnie ważny przez piętnaście minut, za pomocą którego otwiera połączenie transkrypcji; trasa emitująca token jest domyślnie zamknięta i można ją otworzyć tylko przez jawne ustawienie poza produkcją, właśnie dlatego, że jest to trasa, na której wydaje się pieniądze. Na surowej transkrypcji działa analiza na modelu językowym, z listą modeli zapasowych w kolejności, aby niedostępność jednego nie zatrzymywała sesji.
Bramka zgody to część, na której szczególnie nam zależy. Przed zaakceptowaniem fragmentu audio serwer żąda wiersza nieodwołanej zgody dla danej sesji. Jeśli go nie ma, odpowiada 451 i komunikatem po rumuńsku. Jeśli baza danych nie odpowiada, odrzuca wszystko — 503, a nie „przepuszcza”. Już zweryfikowane sesje przechodzą przez dziesięciominutowy cache, aby krótka awaria nie przerwała trwającego nagrania. Zapisano to tak, aby nie dało się tego obejść przez błąd konfiguracji.
Część, która już jest u klientów, jest inna i mniej spektakularna: na kanałach komunikatorów odebrana wiadomość głosowa staje się tekstem, a język wybiera się, głosując na podstawie ostatnich ośmiu wiadomości rozmowy, a nie zgadując z audio. W przeciwnym kierunku, gdy kolega odpowiada po rumuńsku, jego tekst jest przepisywany na język klienta z rygorystycznymi instrukcjami — nie dodaje informacji, nie wymyśla cen ani terminów, nie zaprzecza operatorowi i traktuje tekst operatora wyłącznie jako dane do przekazania, nigdy jako instrukcje dla modelu.