Экспертиза · Транскрибация и перевод
Речь в текст, на румынском и русском, с согласием, записанным до первой секунды аудио.
Мы транскрибируем аудио в реальном времени или из файла, переводим между румынским и русским в разговорах с клиентами и выдаём текст с временными метками, аудиоэкспортом и следом согласия. Распознавание речи мы запускаем через поставщиков, через наш gateway; собственная модель румынского языка — это исследование, а не продукт.
Уже построеноDouă implementări proprii, ambele deschise și citate. Prima e o aplicație de transcriere în flux, cu backend Express de 3.378 de linii în 25 de fișiere și 37 de teste pe care le-am rulat azi — toate trec; ea conține partea pe care nimeni nu o construiește din entuziasm: o poartă de consimțământ care refuză captura când nu există acord înregistrat. A doua rulează în producție, la clienți reali: mesajele vocale primite pe canalele de mesagerie sunt transcrise, iar răspunsul scris de un operator în română este rescris în limba clientului înainte de a pleca. Ce NU intră în „delivered” și e scris ca atare în pagină: modelul propriu de recunoaștere și sinteză în română este cercetare — nu are demonstrație publică, nu are interfață de programare, iar pe acuratețe în română pierde față de sistemele comerciale mari. Serviciul se vinde pe ce rulează, nu pe ce studiem.
Транскрибация кажется решенной проблемой, пока вы не примените ее к румынскому языку, к двум говорящим, которые перебивают друг друга, к цифрам, сказанным быстро, и к клиенту, который переходит на русский посреди фразы. Тогда возникают три настоящие проблемы: какую модель выбрать для языка перед вами, как понять, где заканчивается очередной отрезок речи, и кто дал вам право записывать. Мы занимаемся всеми тремя, а последнюю рассматриваем как проблему кода, а не как абзац политики.
В нашем приложении для потоковой транскрибации браузер никогда не получает ключ поставщика. Он запрашивает у backend одноразовый токен, по умолчанию действительный четверть часа, с которым открывает соединение для транскрибации; маршрут, который выдает токен, закрыт по умолчанию и может быть открыт только явной настройкой вне production, именно потому что это маршрут, на который расходуются деньги. Поверх сырой транскрибации работает анализ на модели языка, со списком резервных моделей в порядке, чтобы недоступность одной не остановила сессию.
Шлюз согласия — это часть, к которой мы особенно внимательны. Перед тем как принять фрагмент аудио, сервер запрашивает строку неотозванного согласия для соответствующей сессии. Если ее нет, отвечает 451 и сообщением на румынском. Если база данных не отвечает, он отклоняет все — 503, а не «пропускает». Уже проверенные сессии проходят через кэш на десять минут, чтобы краткий сбой не прервал текущую запись. Это написано так, чтобы это нельзя было обойти из-за ошибки конфигурации.
Часть, которая уже у клиентов, другая и менее зрелищная: на каналах обмена сообщениями полученное голосовое сообщение становится текстом, а язык выбирается по голосованию на основе последних восьми сообщений разговора, а не путем угадывания по аудио. В обратном направлении, когда коллега отвечает на румынском, его текст переписывается на язык клиента со строгими инструкциями — он не добавляет информации, не выдумывает цены или сроки, не противоречит оператору и рассматривает текст оператора строго как данные для передачи, никогда как инструкции для модели.