비전·음성·추천

DOMAIN / 52번째 글

음성 대 음성 — 글자를 거치지 않고 소리에서 소리로

소리를 글자로 바꿨다가 다시 소리로 만드는 경로는 억양과 감정을 가운데서 버립니다. 소리를 곧바로 소리로 옮기는 방식이 무엇을 얻고 무엇을 포기하는지, 소리를 토큰으로 다루는 원리, 목소리를 그대로 옮길 때의 위험, 그리고 평가가 왜 어려운지를 정리합니다.

PALDYN Team15 MIN READ

지난 글에서는 녹음을 사람별로 갈랐다. 이번에는 방향이 다르다. 들어온 소리를 받아 다른 소리를 내는 일이다. 한국어로 말하면 영어로 나오는 통역, 말을 걸면 말로 답하는 대화, 내 말투를 유지한 채 다른 목소리로 바꾸는 변환이 모두 여기에 들어간다.

지금까지 이 일을 하는 표준적인 방법은 세 조각을 잇는 것이었다. 소리를 글자로 바꾸고, 글자를 다루고, 글자를 다시 소리로 만든다. 잘 작동하고 각 조각을 따로 고를 수 있어 다루기도 편하다. 그런데 이 경로에는 되돌릴 수 없는 손실이 하나 있다.

글자를 지나면 버려지는 것들

사람이 말할 때 실려 나가는 정보는 낱말만이 아니다. 어디서 올라가고 어디서 내려가는 억양, 얼마나 빨리 말하는지, 어디서 쉬는지, 목소리가 떨리는지, 웃으면서 말했는지가 함께 간다. 이것을 통틀어 운율(prosody)이라 부른다 — 같은 낱말을 다르게 들리게 만드는 소리의 결이다.

글자는 이 중 아무것도 담지 않는다. "네, 알겠습니다"라는 전사 결과는 그 말이 흔쾌한 수락이었는지 마지못한 체념이었는지를 지운다. 다시 소리로 만드는 단계에서 합성 모델은 그 정보가 없으니 기본 말투로 읽는다. 통역이 뜻은 맞는데 어딘가 밋밋한 이유가 이것이다.

연결형과 직결형이 지나가는 길

버려지는 것이 운율만도 아니다.

  • 화자 특성. 누구의 목소리인지가 사라진다. 여러 명이 말하는 자리를 통역하면 전부 같은 목소리로 나온다
  • 문자로 안 적히는 말. 표기 체계가 정착되지 않은 언어, 방언, 그리고 말끝을 흐린 발화는 전사 단계에서 이미 뭉개진다
  • 인식 오류의 누적. 앞 단계가 한 글자 틀리면 뒤 단계는 그 틀린 글자를 정답으로 받는다. 조각을 이어 붙인 구조에서 오류는 앞으로만 흐른다

소리를 토큰으로 다룬다

글자를 안 거치겠다면 모델이 소리를 직접 먹고 소리를 뱉어야 한다. 언어 모델이 글자를 다루는 방식과 똑같이 다루려면 소리도 띄엄띄엄한 조각의 나열이 되어야 한다.

그 조각을 만드는 것이 뉴럴 코덱(neural codec)이다. 오디오를 짧은 구간마다 벡터로 바꾼 뒤, 미리 정해 둔 사전에서 가장 가까운 항목의 번호로 대체한다. 이 번호가 음성 토큰이고, 초당 수십 개 정도로 나온다. 이렇게 만들어 두면 소리를 다루는 일이 글자를 다루는 일과 같은 모양이 된다 — 다음 토큰을 예측하면 된다.

토큰은 대개 두 갈래로 나눠 쓴다.

의미 토큰 음향 토큰
담는 것 무슨 말을 했는가 어떤 소리로 들리는가
뽑는 법 음성 표현 모델의 중간층을 묶어서 코덱이 파형을 복원할 수 있게
화자가 바뀌면 거의 안 바뀐다 통째로 바뀐다
쓰는 자리 뜻을 옮기는 단계 실제 소리를 만드는 단계

번역이라면 의미 토큰 쪽에서 언어를 갈아 끼우고, 목소리는 음향 토큰 쪽에서 정한다. 둘을 갈라 놓은 덕에 "무슨 말"과 "누구 목소리"를 따로 정할 수 있다. 원래 화자의 목소리를 유지하면서 언어만 바꾸는 통역이 이 구조에서 나온다.

한 가지 짚어 둘 것은 음향 토큰이 한 겹이 아니라는 점이다. 한 겹으로는 파형을 되살릴 만큼 세밀하지 못해서, 남은 오차를 다음 겹이 다시 근사하는 식으로 여러 겹을 쌓는다. 그래서 초당 토큰 수가 겹 수만큼 늘어나고, 이것이 직결형 모델의 비용이 텍스트 모델보다 비싼 직접적인 이유다.

얻는 것과 잃는 것

연결형 (인식 · 처리 · 합성) 직결형 (한 모델)
지연 단계마다 쌓인다 한 번에 흐른다
운율 가운데서 버려진다 입력에서 출력으로 이어진다
목소리 합성 모델의 목소리로 통일 원래 목소리를 유지할 수 있다
검수 중간 텍스트를 읽고 고칠 수 있다 끼울 자리가 없다
용어 교정 사전으로 치환하면 된다 방법이 마땅치 않다
모델 선택 단계마다 자유롭게 고른다 그 벤더에 묶인다
원인 추적 단계별로 끊어 본다 안이 안 보인다
문자 없는 언어 다룰 수 없다 다룰 수 있다
비용 세 번 청구 오디오 토큰 단가가 비싸다

표에서 가장 무거운 줄은 검수다. 금융 상담이나 의료 안내처럼 나가는 말이 규제를 받는 자리에서는, 나가기 전에 읽고 막을 수 있는 텍스트가 있는지가 도입 여부를 가른다. 직결형은 소리가 이미 나간 뒤에야 전사가 나오므로 기록은 남길 수 있어도 차단은 못 한다.

용어 교정도 실무에서 자주 걸린다. 제품명과 사람 이름을 정확히 발음해야 하는 자리에서 연결형은 중간 텍스트에 치환 규칙을 걸면 끝이다. 직결형에는 그 자리가 없어서 프롬프트로 부탁하는 정도밖에 안 된다.

그래서 지금 실무에서 자주 보이는 모양은 순수한 둘 중 하나가 아니라 직결형을 쓰면서 전사를 함께 받아 두는 절충이다. 소리는 빠르고 자연스럽게 나가고, 텍스트는 로그와 사후 점검에 쓴다. 차단은 포기하고 기록만 챙기는 선택이다.

목소리를 옮길 수 있다는 것

원래 화자의 목소리를 유지한 채 언어만 바꾸는 기능은 이 기술의 가장 매력적인 부분이면서 가장 조심할 부분이다. 몇 초짜리 견본만으로 그 사람 목소리를 만들어 낼 수 있다는 뜻이기 때문이다.

제품에 넣는다면 아래는 선택이 아니라 기본으로 깔아야 한다.

  • 동의를 받은 목소리만 쓴다. 견본을 올린 사람이 그 목소리의 주인인지 확인하는 절차가 필요하다. 임의의 녹음 파일을 그대로 견본으로 받으면 안 된다
  • 워터마크를 넣는다. 사람 귀에 안 들리면서 기계는 읽을 수 있는 표식을 합성음에 심어 둔다. 나중에 "이게 우리 시스템에서 나온 소리인가"를 판정할 수 있어야 한다
  • 합성음임을 밝힌다. 통화 시작에 안내를 넣는 것이 여러 나라에서 이미 의무 쪽으로 가고 있다
  • 견본을 오래 두지 않는다. 목소리 견본은 생체정보에 준해 다뤄야 한다. 보관 기간과 삭제 경로를 처음부터 정해 둔다

기능을 켜기 전에 이 넷의 답이 없으면, 기술이 아니라 운영에서 사고가 난다.

평가가 어렵다

연결형은 단계마다 익숙한 지표가 있다. 인식은 글자 오류율, 번역은 번역 품질 점수, 합성은 사람 평가다. 직결형은 중간이 없어서 이 방식이 안 통한다.

지금 쓰는 방법은 대체로 우회로다.

  • 다시 글자로 만들어 잰다. 나온 소리를 음성 인식에 넣어 텍스트를 얻고 그 텍스트로 번역 품질을 잰다. 널리 쓰이지만 채점에 쓰는 인식 모델의 오류가 점수에 섞인다. 잘 들리는 목소리가 유리해지는 편향도 있다
  • 사람이 듣고 매긴다. 자연스러움과 뜻 전달을 나눠 점수를 받는다. 가장 믿을 만하고 가장 비싸다
  • 목소리가 같은지 잰다. 화자 임베딩으로 입력과 출력의 유사도를 본다. 목소리 유지가 목표일 때만 의미가 있다
  • 운율이 옮겨졌는지 본다. 쉼의 위치, 말 속도, 억양 곡선을 입력과 출력에서 비교한다. 표준 지표가 아직 없어 자체 정의로 쓰는 경우가 많다

여기서 실수하기 쉬운 자리가 하나 있다. 뜻이 맞는지와 잘 들리는지는 따로 재야 한다. 하나로 합친 점수를 보면, 발음이 또렷해지느라 내용이 조금 틀어진 모델이 더 좋아 보이는 일이 생긴다. 통역에서는 그 반대가 맞다.

어느 쪽을 고를 것인가

  • 나가는 말이 규제 대상이거나 검수를 통과해야 한다 → 연결형. 중간 텍스트가 있다는 것 하나로 결정된다
  • 대화의 응답 속도가 제품의 질을 결정한다 → 직결형. 단계가 줄어드는 만큼이 그대로 지연으로 돌아온다. 이 계산은 실시간 음성 API에서 자세히 다뤘다
  • 감정과 말투가 내용의 일부다(상담 품질 평가, 콘텐츠 더빙) → 직결형
  • 여러 사람이 말하는 자리를 통역한다 → 직결형. 화자마다 다른 목소리로 나가야 누가 한 말인지 따라갈 수 있다
  • 용어와 고유명사를 정확히 발음해야 한다 → 연결형
  • 자료가 적은 언어, 문자 표기가 없는 언어를 다룬다 → 직결형 말고는 길이 없다

정리

  • 소리를 글자로 바꿨다 되돌리는 경로는 억양 · 감정 · 목소리를 가운데서 버린다. 되살릴 방법이 없다
  • 직결형은 소리를 토큰으로 바꿔 언어 모델처럼 다룬다. 의미 토큰과 음향 토큰을 갈라 놓아 "무슨 말"과 "누구 목소리"를 따로 정한다
  • 음향 토큰이 여러 겹으로 쌓이는 구조라 초당 토큰 수가 많다. 오디오 단가가 비싼 이유가 여기 있다
  • 직결형이 포기하는 것은 중간 텍스트를 읽고 막을 자리다. 규제받는 말이 나가는 시스템에서는 이것 하나로 선택이 갈린다
  • 실무에서 흔한 절충은 직결형으로 내보내면서 전사를 함께 받아 두는 것이다. 차단은 포기하고 기록만 챙긴다
  • 목소리를 옮길 수 있다는 것은 사칭도 가능하다는 뜻이다. 동의 확인 · 워터마크 · 합성음 고지 · 견본 보관 기간을 기능보다 먼저 정한다
  • 평가는 아직 우회로뿐이다. 다시 인식해 재는 방식은 채점용 인식 모델의 오류를 함께 재게 되므로, 뜻과 소리를 갈라 매기고 사람 평가를 일부 섞는다

읽어주셔서 감사합니다. 😊

LATEST

비전·음성·추천의 최신 글

비전·음성·추천2026.09.07

오프라인 강화학습 — 쌓인 로그만으로 정책을 배우기

실제 서비스에서 탐색은 곧 사용자에게 나쁜 행동을 해 보는 일입니다. 이미 쌓인 로그만으로 정책을 배우려 할 때 왜 Q값이 혼자 부풀어 오르는지, 그 부풀음을 누르는 세 갈래 대응, 행동 복제라는 기준선의 무게, 그리고 배포 전에 성능을 재는 일이 왜 가장 어려운지를 정리합니다.

18 MIN
비전·음성·추천2026.09.07

다국어 전이 — 라벨 없는 언어에서 모델이 동작하는 이유

영어 라벨만으로 학습한 분류기가 한국어 문장을 그대로 처리하는 일이 실제로 일어납니다. 여러 언어가 한 표현 공간에 겹쳐 놓이는 원리, 그 겹침이 무너지는 조건, 번역해서 학습할지 번역해서 추론할지 고르는 기준, 그리고 언어별로 나눠 재야 하는 이유를 정리합니다.

16 MIN
비전·음성·추천2026.09.06

깊이 추정 — 그림 한 장에서 앞뒤를 읽어 내는 일

사진 한 장에서 거리 지도를 얻는 단안 깊이 추정을 정리합니다. 왜 크기와 거리가 함께 정해지지 않는지, 순서·배율 미상·미터 단위 세 종류의 출력이 어떻게 다른지, 시차와 깊이의 역수 관계, 미터로 올리는 방법, 그리고 자주 무너지는 자리를 다룹니다.

13 MIN