SyncTrans 1.0.0이 이번 주에 출시되었습니다. Apple Silicon에서 동작하는 macOS 14 이상용 실시간 음성 번역기입니다. 말을 하면 문장이 만들어지는 동안 번역이 화면에 뜨고, 합성된 음성이 그것을 소리 내어 읽어 줍니다. 이 글은 여기까지 오는 과정의 엔지니어링 기록입니다. 무엇을 만들었는지, 어떤 순서로 만들었는지, 그리고 어떤 트레이드오프를 받아들였는지를 다룹니다. 사용자 관점의 짧은 소식은 새 소식에서 확인할 수 있습니다.
왜 Mac용 통역기를 만들었나
스마트폰의 번역 앱은 화장실이 어디인지 물어볼 때는 잘 작동합니다. 하지만 실제 대화에서는 훨씬 덜 잘 작동합니다. 대화가 작은 화면을 번갈아 들여다보고 기기를 돌려 가며 쓰는 일로 변해 버리기 때문입니다. 저희가 중요하게 생각한 대화들 — 고객 미팅, 상담, 변호사나 의사와 함께하는 가족 회의 — 에는 회화책보다 노트북이 테이블 위에 놓여 있는 경우가 훨씬 많습니다.
Mac은 이 작업에 유난히 잘 맞는 하드웨어이기도 합니다. Apple Silicon은 음성 인식, 기계 번역, 음성 합성을 인터랙티브한 속도로 로컬에서 돌릴 수 있고, 이미 좋은 마이크 경로와 제대로 된 스피커, 그리고 원하는 만큼 연결할 수 있는 디스플레이를 갖추고 있습니다. 저희가 세운 목표는 말로 하기에는 간단합니다. 언어는 기계가 처리하고, 사람은 대화에 집중하는 것입니다.
두 개의 엔진 계열, 병행 개발
SyncTrans는 첫 프로토타입부터 같은 일을 수행하는 두 가지 방법을 갖고 있었습니다. 매니지드 클라우드 엔진은 설정이 필요 없습니다. 로그인하고, 언어를 고르고, 시작하면 됩니다. 온디바이스 엔진은 인식, 번역, 합성을 전부 Mac 안에서 실행합니다. 아무것도 기기 밖으로 나가지 않고, 네트워크가 없어도 계속 동작합니다.
저희는 클라우드 경로를 먼저 출시하고 로컬 추론을 나중에 덧붙이는 대신, 두 가지를 의도적으로 동시에 만들었습니다. 그 비용은 분명히 존재했습니다. 모든 기능이 전혀 다른 두 개의 스택 위에서 두 번씩 동작해야 했으니까요. 그 대가로 얻은 것은 두 스택이 모두 꽂히는 단일 엔진 추상화와, 주장 대신 측정하는 습관이었습니다. 모든 로컬 모델 등급에는 측정된 메모리 하한이 붙어 있고, 앱은 그 등급을 제안하기 전에 기기가 실제로 돌릴 수 있는지를 확인합니다. 오래된 Mac에는 스왑에 빠질 곳으로 억지로 밀어 넣는 대신, 어떤 등급이 감당 범위를 벗어나는지를 솔직하게 알려 줍니다.
세 번째 엔진 옵션은 그 추상화에서 거의 공짜로 나왔습니다. 이미 신뢰하는 음성·번역 서비스가 있다면, SyncTrans가 그 API 엔드포인트를 바라보게 하면 되고 앱의 나머지는 그대로 동작합니다. 세 개의 엔진, 하나의 인터페이스. 그리고 엔진 간 전환은 재설치가 아니라 설정 선택입니다.
대면 상황을 위한 설계
제품의 형태를 가장 크게 결정한 기능은 초기 빌드를 사람들이 쓰는 모습을 관찰하면서 나왔습니다. 창이 하나뿐이면 두 명의 화자는 필연적으로 화면을 서로에게 번갈아 기울였습니다. 그래서 1.0에는 듀얼 스크린 대화 뷰가 들어갔습니다. 각 디스플레이에 한 언어씩 전체 화면으로 띄우고, Mac을 두 사람 사이에 놓으면 각자 자기에게 맞는 화면을 읽게 됩니다. 각 창은 앱 안에서 자기만의 디스플레이에 할당할 수 있습니다.
오디오도 같은 처리를 받았습니다. 헤드폰 한 쌍을 나눠 쓸 때, SyncTrans는 한 언어를 왼쪽 귀로, 다른 언어를 오른쪽 귀로 전달할 수 있습니다. Mac 하나를 두 사람이 공유하면서 각자 자기에게 맞는 번역을 듣는 것입니다. 설명하기에는 사소한 일이지만 실제로는 놀랄 만큼 큰 차이를 만듭니다. 대화가 더 이상 기계에 관한 것이 아니게 됩니다.
하나의 세션 기록 위의 세 가지 레이아웃
같은 대화라도 순간에 따라 필요한 뷰가 서로 다릅니다. 그래서 1.0은 하나의 세션 기록 위에 세 가지 레이아웃을 올렸습니다. 채팅 레이아웃은 메시징 앱처럼 두 언어를 턴 단위로 교차해 보여 줍니다. 이중 단 레이아웃은 각 언어에 독립된 단을 주어 두 사람이 동시에 따라 읽기에 더 좋습니다. 회의록 레이아웃은 세션을 메모처럼 훑어볼 수 있는 하나의 문서로 렌더링합니다. 레이아웃이 하나의 기록 위의 뷰이기 때문에, 세션 도중에 전환하더라도 아무것도 잃지 않습니다.
용어집, 컨텍스트, 그리고 제대로 동작하는 숫자
두 가지 품질 기능이 1.0에 들어간 이유는, 이것들이 어떤 모델을 고르는가보다 더 중요하기 때문입니다. 번역은 롤링 대화 컨텍스트와 함께 동작해서, 대명사와 주제 지시가 세션에서 실제로 앞에 나온 말을 기준으로 해석됩니다. 프로젝트별 용어집은 모델이 그렇지 않으면 추측할 단어들 — 제품 이름, 사람 이름, 전문 용어 — 을 고정합니다. 용어가 용어집에 들어가면, 매번 같은 방식으로 나옵니다.
1.0에는 또한 숫자와 할인 표현을 위해 모델 뒤에 놓이는 결정론적 규칙 레이어가 있습니다. 직역하면 조용히 의미가 뒤집힐 수 있는 영역인데, 중국어 할인 관용구가 유명한 사례입니다. 이 작업은 별도의 글로 다룹니다: 번역에서 살아남는 숫자.
검색과 익스포트를 지원하는 히스토리
번역된 대화는 나중에 필요한 경우가 많습니다. 그래서 모든 세션은 Mac에 프로젝트별로 저장됩니다. 히스토리는 프로젝트를 가로질러 검색할 수 있고, 개별 턴을 수정하거나 삭제할 수 있으며, 끝난 세션은 TXT, Markdown, SRT 파일로 추출할 수 있습니다. 회의 메모든, 문서로 남겨야 할 견적이든, 같은 행사의 녹화 영상용 자막이든요. 어떤 엔진이 만들었든 기록은 사용자의 기기에 남습니다.
7개 언어로 된 인터페이스
인터페이스가 한 언어밖에 못 하는 통역기는 신뢰성에 문제가 있습니다. 그래서 1.0 인터페이스는 영어, 중국어, 일본어, 스페인어, 프랑스어, 한국어, 우크라이나어, 총 7개 언어로 현지화되었습니다. 저희는 현지화를 번역물 쏟아붙기가 아니라 엔지니어링 작업으로 대했습니다. 길이가 잘리는 도구 모음 레이블, 컨테이너를 넘어설 만큼 커지는 버튼, 영어에만 맞는 레이아웃을 전부 점검하고 고쳤습니다. 이 블로그도 같은 7개 언어로 발행됩니다. 그것이 정직한 방식이라고 느껴졌습니다.
1.0이 의미하는 것
저희에게 1.0은 기본 약속입니다. 전체 루프 — 말하기, 보기, 듣기, 저장하기 — 가 저희가 출시하는 모든 엔진에서, 저희가 동작한다고 말한 하드웨어에서 끝까지 작동한다는 것입니다. SyncTrans 1.0.0은 Apple Silicon의 macOS 14 이상이 필요하며, 여기에서 다운로드할 수 있습니다. 기능 소개는 기능 페이지에 있습니다.
질문이나 버그 제보가 있으신가요? 피드백 게시판이 저희에게 닿는 가장 빠른 길입니다.