언어 감지기는 기침 소리에도 늘 답을 내놓습니다. 깨끗하거나 여러 언어가 섞인 오디오에서는 감지를 켜 두고, 한 언어가 잡음이나 강한 억양과 함께 말해질 때는 언어를 직접 지정하세요.
모든 전사는 독자에게는 보이지 않는 질문 하나로 시작합니다. 이 음성은 무슨 언어인가? 이 질문에서 틀리면 파이프라인의 나머지 부분은 유창하지만 엉뚱한 결과를 만드느라 애쓰게 됩니다. 이 글에서는 언어 감지기가 무엇을 듣는지, 실시간 오디오와 파일에서 감지가 어떻게 작동하는지, 그리고 언어를 직접 지정하는 편이 나은 경우가 언제인지 설명합니다.
언어 감지기는 말의 뜻을 이해하지 않습니다. 소리 자체를 봅니다. 자음과 모음의 목록, 음절의 강세, 구절의 리듬, 그리고 모든 언어가 기대는 짧고 자주 쓰이는 단어들이 그 대상입니다. 스페인어에는 고유한 모음 체계와 리듬이 있습니다. 네덜란드어와 독일어는 많은 부분을 공유하지만 몇 가지 소리에서 갈라집니다. 명확한 발화 몇 초면 대개 이 둘을 구분하기에 충분합니다.
많은 인식기는 이를 단어를 인식하는 과정의 부산물로 처리합니다. 오디오의 앞부분을 보고, 자신이 아는 모든 언어에 대한 확률로 언어를 결정합니다. 이런 설계에서는 두 가지 결과가 따릅니다. 확률의 합은 항상 1이므로 '언어 없음'이라는 답은 없습니다. 침묵, 기침, 음악의 한 소절도 확신에 찬 점수와 함께 어떤 언어를 얻습니다. 그리고 결정은 앞부분을 보고 내려지는데, 이는 고를 수 있는 가장 나쁜 샘플입니다. 많은 녹음은 인사말, 이름, 지명으로 시작하는데, 이런 요소는 언어 신호를 거의 담지 않습니다. "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.updateAPI에서 spokenLanguage는 en 같은 언어 코드입니다. 이를 빼면 언어가 감지됩니다. 파일 또는 링크 전사의 settings와 실시간 세션의 옵션에 나타납니다. 감지와 지정은 같은 100개 언어를 대상으로 합니다. 번역은 그중 최대 10개 언어로 할 수 있으며, 이는 별도의 선택이고 감지되었거나 지정된 언어와는 무관합니다. 번역이 발화를 어떻게 따라가는지는 실시간 번역 지연 시간 설명에서 다룹니다.
{ "name": "Board meeting", "settings": { "spokenLanguage": "en", "speakerLabels": "auto" } }
실시간 세션은 생성할 때 같은 옵션을 받으며, 오디오가 흐르는 동안에도 바꿀 수 있습니다. 새 spokenLanguage가 담긴 session.update 텍스트 프레임은 그 이후의 발화에 적용됩니다. 값을 "" 또는 "auto"로 설정하면 세션은 다시 감지로 돌아가며, 지원되지 않는 코드는 무시됩니다. 언어 버튼이 있는 자막 보기에서는, 운영자가 잘못된 첫 줄을 보는 즉시 연결을 다시 맺지 않고 언어를 지정할 수 있습니다.
{ "type": "session.update", "spokenLanguage": "ro" }
지원되는 코드와 이름의 목록은 키 없이 접근할 수 있는 GET /v1/languages에 있습니다. 서버에서 세션을 생성하는 것부터 드래프트와 확정 결과를 읽는 것까지의 전체 실시간 흐름은 WebSocket을 통한 실시간 전사 튜토리얼에 있으며, 대화형 레퍼런스는 {{api}}/docs에 있습니다. 대시보드에서 같은 선택은 새 전사 시작에서 보이는 Spoken language 스위치이며, API 키는 Developers에서 관리합니다.