Детектор мови завжди дає відповідь, навіть на кашель. Залишайте визначення увімкненим для чистого або змішаного аудіо, а мову називайте, коли звучить одна мова на тлі шуму або з сильним акцентом.
Кожна транскрипція починається з питання, якого читач не бачить: якою мовою це звучить? Помилитися тут — і решта конвеєра старанно працює над створенням плавного, але безглуздого тексту. Ця стаття пояснює, на що прислухається детектор мови, як він поводиться з живим аудіо та з файлами і коли краще назвати мову самостійно.
Детектор мови не розуміє, що саме говориться. Він дивиться на сам звук: набір приголосних і голосних, наголоси в складах, ритм фраз і короткі, часті слова, на які спирається кожна мова. Іспанська має власний набір голосних і ритм; нідерландська та німецька багато в чому спільні, але розходяться в кількох звуках. Кількох секунд чіткого мовлення зазвичай достатньо, щоб їх розрізнити.
Багато розпізнавачів роблять це як побічний продукт розпізнавання слів. Вони визначають мову за початком аудіо, як імовірність для кожної відомої їм мови. З такої конструкції випливають дві речі. Імовірності завжди в сумі дають одиницю, тож відповіді «жодної мови» не існує: тиша, кашель чи музичний сигнал теж отримають мову, часто з упевненим балом. І рішення ухвалюється за початком, а це найгірший зразок, який можна було обрати. Багато записів починаються з привітань, імен і назв місць, які несуть дуже мало мовного сигналу: "Good morning, Maria, welcome to Berlin" звучить майже так само німецькою, як і англійською. Інші записи починаються з тиші чи кашлю, і детектор, якому доведеться вирішувати саме на цьому, все одно вирішить — упевнено і без жодних підстав. Так буває і з реальним аудіо: румунська проповідь, що починається з фонового шуму і фрази "Bună dimineața", легко може бути сприйнята як італійська "Buona domenica" — з абсолютною впевненістю.
Ціна помилки теж гірша, ніж здається. Розпізнавач, що декодує мовлення не тією мовою, не просто пише з помилками — він переписує. "For God so loved the world", декодоване як румунська, перетворилося на "Forgot to love the world". Румунська фраза "mândria slujește", декодована як англійська, стала "Pride serves" — точним перекладом речення, яке ніхто не просив перекладати. Слова звучать плавно, і в транскрипті немає жодної ознаки, що щось не так, — саме тому помилка коштує дорого.
Найчастіше детектора збивають п'ять речей:
Яка з цих проблем вас стосується, залежить від того, чи аудіо надходить наживо, чи вже лежить у файлі.
Для живої транскрипції немає цілого запису, який можна було б переглянути. Аудіо надходить у міру того, як його говорять, і транскрипт має надходити разом із ним. Тому мова визначається, поки мовець говорить, і відстежується, якщо він її змінює. Саме це означає примітка під перемикачем Spoken language, коли ви починаєте живу транскрипцію на панелі керування: мова мовця визначається автоматично, і мовець може змінити її будь-коли.
Перемикання підтверджується, перш ніж застосовується, тож один шумний фрагмент не відведе транскрипт в іншу мову. Слабке місце — початок: якщо перші слова — шумне привітання, перший рядок може вийти не тією мовою. Назвавши мову, ви цього уникаєте.
Файли працюють інакше, бо весь запис уже доступний.
Файл — кращий випадок: не треба довіряти першим секундам. Для файлу мова визначається з усього запису, тож шумне привітання на початку не може її вирішити.
Мова файлу все ще є робочим припущенням, а не остаточним вироком. Запис, що справді змінює мову посередині, наприклад інтерв'ю, яке з англійської переходить на румунську в другій половині, відстежується, а не нав'язується, а той, що чергує мови протягом усього часу, теж обробляється.
Детектор, що вирішує один раз і більше не повертається, впевнений у неправильному місці.
Жоден детектор не допоможе багато, коли весь запис шумний. Визначення — це типовий режим, бо воно правильне в більшості випадків і нічого не коштує. Проте для деяких записів мову варто назвати, і панель керування каже, для яких саме: назвавши мову, що звучить, ви покращуєте точність на шумних записах і при сильних акцентах.
Це випадки, коли визначенню найменше є з чого працювати. Шум прибирає ознаки, на які покладається детектор; сильний акцент зміщує їх до іншої мови; близькоспоріднена пара пропонує мало ознак від початку. Носій англійської з сильним португальським акцентом у гулкій залі важко визначається лише за звуком, і якщо детектор помилиться, транскрипт перетворюватиме англійське мовлення на португальське протягом усього часу помилки. Назвавши мову, ви прибираєте це питання, і всі зусилля йдуть на слова.
Короткий контрольний список:
Назва мови — це налаштування транскрипції, а не вашого облікового запису, тож ви можете вирішувати для кожного запису окремо. Усе вищесказане зводиться до однієї опції API.
spokenLanguage означає визначення; session.update під час потокуВ API spokenLanguage — це код мови, наприклад en; якщо його не вказати, мова визначається автоматично. Він з'являється в settings транскрипції файлу або посилання та в опціях сесії реального часу. Визначення і називання охоплюють ті самі 100 мов. Переклад на до 10 з них — окремий вибір, і він не залежить від того, яку мову визначено або названо. Про те, як переклад встигає за мовленням, йдеться у статті Затримка живого перекладу, пояснена.
{ "name": "Board meeting", "settings": { "spokenLanguage": "en", "speakerLabels": "auto" } }
Сесія реального часу приймає ту саму опцію під час створення, і її можна змінити, поки йде аудіо. Текстовий фрейм session.update з новим spokenLanguage застосовується до мовлення відтепер; якщо встановити "" або "auto", сесія повертається до визначення, а невідомий код ігнорується. Вид субтитрів із кнопкою мови дозволяє оператору назвати мову, щойно він побачить хибний перший рядок, без перепідключення.
{ "type": "session.update", "spokenLanguage": "ro" }
Список кодів з їхніми назвами доступний за адресою GET /v1/languages, для якого ключ не потрібен. Повний потік роботи в реальному часі — від створення сесії на вашому сервері до читання чернеток і підтверджених фрагментів — описано у статті Транскрибування в реальному часі через WebSocket, а інтерактивний довідник — за посиланням {{api}}/docs. На панелі керування той самий вибір — це перемикач Spoken language, коли ви починаєте нову транскрипцію, а ключі API розміщені в розділі Developers.