비전·음성·추천

DOMAIN / 46번째 글

any-to-any 모델 — 소리도 그림도 같은 줄에 놓는다

입력만 여러 모달리티를 받던 모델이 출력까지 열리면 무엇이 달라지는지 정리합니다. 모든 모달리티를 토큰으로 바꾸는 방법, 출력이 입력보다 훨씬 어려운 이유, 조립형 대비 무엇을 얻고 무엇을 잃는지, 그리고 언제 이 구조를 고르는지를 다룹니다.

PALDYN Team14 MIN READ

지난 글에서 음성 대화를 붙일 때 ASR·LLM·TTS 셋을 이어 붙이는 구성과 그 조립을 없앤 통합 음성 모델을 나란히 놓고 봤다. 통합 쪽의 이점으로 적었던 것이 지연과 억양이었다. 이 글은 그 방향을 소리 너머로 밀어붙인 구조, 즉 any-to-any 모델을 다룬다.

이름이 가리키는 것은 단순하다. 텍스트든 이미지든 오디오든 아무거나 넣을 수 있고, 텍스트든 이미지든 오디오든 아무거나 받을 수 있는 모델이다. 그런데 실제로 만들어 보면 앞쪽 절반과 뒤쪽 절반의 난이도가 전혀 다르다. 그 비대칭이 이 구조를 이해하는 열쇠다.

이미 절반은 열려 있었다

이미지를 넣고 설명을 받는 모델, 음성을 넣고 요약을 받는 모델은 이미 흔하다. 그런데 이것들은 정확히 말하면 any-to-text다. 입구는 여럿이지만 출구는 하나뿐이다.

구조 입력 출력 흔한 예
text-to-text 텍스트 텍스트 일반 언어 모델
any-to-text 텍스트·이미지·오디오 텍스트 대부분의 「멀티모달 모델」
text-to-image 텍스트 이미지 그림 생성 모델
any-to-any 텍스트·이미지·오디오 텍스트·이미지·오디오 옴니 계열

여기서 진짜 변화는 마지막 줄, 즉 출력 쪽이 열리는 지점이다. 출구가 텍스트뿐이면 그림을 만들고 싶을 때 결국 그림 생성 모델을 따로 붙여야 하고, 그 순간 다시 조립형이 된다. 지난 글의 3단 음성 구성과 같은 문제가 그대로 돌아온다.

왜 조립형으로는 안 되는가

조립형은 나쁜 설계가 아니다. 단계마다 최고 성능의 전용 모델을 골라 쓸 수 있고, 중간 산출물이 남아 검수하기도 쉽다. 다만 세 가지를 구조적으로 포기한다.

조립형과 통합형의 정보 흐름 비교

첫째, 경계에서 정보가 떨어진다. 소리가 글자로 바뀌는 순간 억양·웃음·머뭇거림·말 겹침·배경 소리가 전부 사라진다. "괜찮아요"라는 다섯 글자는 남지만 그것이 체념인지 안도인지는 남지 않는다. 이미지도 마찬가지다. 사진을 캡션으로 떨어뜨리고 나면 "왼쪽 사람이 든 것"을 되물을 수가 없다 — 왼쪽이 어디였는지가 캡션에 없기 때문이다.

둘째, 지연이 더해진다. 단계는 겹치지 않는다. ASR이 끝나야 LLM이 시작하고, LLM이 끝나야 TTS가 시작한다. 스트리밍으로 겹쳐 봐도 문장 경계 단위로만 겹칠 수 있어 한계가 분명하다.

셋째, 상호참조가 끊긴다. 그림 안의 한 지점을 가리키며 말하고, 그 말에 대한 답으로 다시 그림을 고쳐 내는 대화는 조립형으로는 매번 좌표를 손으로 실어 날라야 한다.

any-to-any는 이 셋을 한 번에 없애는 대신 다른 값을 치른다. 무엇을 치르는지는 뒤에서 보고, 먼저 어떻게 한 모델에 다 집어넣는지부터 본다.

전부 토큰으로 바꾼다

자기회귀 모델이 아는 것은 하나뿐이다. 지금까지의 번호 줄을 보고 다음 번호를 고르는 것. 그러니 모든 모달리티를 번호의 줄로 바꾸기만 하면 구조를 손댈 필요가 없다.

모달리티별 토큰화와 합쳐진 토큰 줄

텍스트는 원래 이산값이라 할 일이 없다. 부분 낱말 단위로 쪼개는 기존 토크나이저를 그대로 쓴다.

이미지는 격자 조각으로 자른 뒤 각 조각을 벡터로 만들고, 그 벡터를 벡터 양자화(vector quantization)로 번호로 바꾼다. 벡터 양자화는 미리 학습해 둔 사전 — 코드북이라 부른다 — 에서 가장 가까운 항목을 찾아 그 항목의 번호만 남기는 것이다. 연속값이 이산값이 되는 지점이 여기다.

오디오는 신경 코덱을 거친다. 파형을 짧은 프레임으로 자르고 프레임마다 번호를 매기는데, 한 겹으로는 소리를 되살릴 만큼 촘촘하지 않아 잔차 벡터 양자화(residual vector quantization)를 쓴다. 한 번 양자화하고 남은 오차를 다시 양자화하기를 여러 겹 반복하는 방식이다. 첫 겹이 큰 줄기를 잡고 뒷 겹으로 갈수록 결을 메운다. 겹을 몇 개까지 쓰느냐로 음질과 토큰 수를 맞바꾼다.

이렇게 바꾸고 나면 모델 입장에서 소리와 그림의 구별은 사라진다. 남는 것은 어떤 번호 다음에 어떤 번호가 오느냐뿐이고, 어느 구간이 무엇이었는지는 경계 표시 토큰으로만 표시된다.

출력이 입력보다 어려운 이유

입력만 받을 때는 사실 양자화까지 갈 필요도 없다. 이미지 인코더가 낸 연속 벡터를 작은 선형 층 하나로 언어 모델의 임베딩 차원에 맞춰 끼워 넣으면 그만이다. 이 작은 층을 흔히 프로젝터라고 부른다. 학습도 가볍고 성능도 잘 나온다.

출력에서는 이 방법이 통하지 않는다. 모델이 다음에 나올 것을 골라야 하는데, 연속 공간에는 고를 후보 목록이 없기 때문이다. 그래서 출력 쪽 설계는 둘로 갈린다.

이산 토큰 자기회귀 백본 + 전용 디코더
방식 그림·소리도 코드북 번호로 내고, 별도 디코더가 그 번호를 되살린다 백본은 조건 벡터만 내고 확산 모델 등이 실제 픽셀·파형을 만든다
학습 언어 모델과 완전히 같은 손실 하나 손실이 둘 이상, 균형을 맞춰야 한다
텍스트와 섞기 자연스럽다 — 같은 줄에 이어 쓰면 된다 경계에서 다시 붙이는 장치가 필요하다
품질 코드북 해상도가 천장이 된다 전용 생성 모델 수준까지 올라간다
지연 토큰 수만큼 순차 생성 디코더 단계가 통째로 더해진다

실제 모델들은 모달리티마다 다른 쪽을 고르기도 한다. 오디오는 이산 토큰으로, 이미지는 전용 디코더로 가는 식이다. 어느 쪽이든 텍스트 출력 경로는 손대지 않는다는 점은 같다. 언어 능력이 이 모델들의 기반이라 거기를 흔들면 전부 무너지기 때문이다.

무엇을 치르는가

통합형이 조립형을 항상 이기는 것은 아니다. 값을 네 가지 치른다.

품질 천장이 있다. 그림만 만드는 모델, 소리만 만드는 모델은 그 일에 전체 용량을 쓴다. 한 모델이 셋을 다 하면 각각에 쓸 용량이 나뉜다. 세밀한 그림 품질이나 목소리 재현이 결과물의 핵심이면 조립형이 낫다.

검수할 자리가 없어진다. 3단 구성에서는 ASR 결과에 금칙어 필터를 걸고, LLM 출력을 검사한 뒤 TTS에 넘길 수 있었다. 통합형에서는 그 중간 텍스트가 아예 생기지 않는다. 검사를 걸려면 출력 토큰을 되살린 뒤에 하거나, 모델에게 텍스트도 함께 내도록 시켜야 한다 — 후자는 지연을 다시 늘린다.

토큰 예산이 폭발한다. 텍스트 한 문단이 수백 토큰이라면 이미지 한 장은 수백에서 수천, 오디오 1분은 그보다 더 든다. 컨텍스트 창은 그대로인데 한 항목이 먹는 몫이 열 배씩 뛰므로, 대화가 몇 턴만 지나도 창이 찬다. 그림을 매 턴 다시 넣지 말고 첫 턴의 요약만 남기는 식의 관리가 필요해진다.

평가가 어렵다. 텍스트만 나올 때는 정답과 맞춰 보면 됐다. 출력이 그림과 소리로 갈리면 무엇을 맞다고 할지부터 정해야 하고, 모달리티를 넘나드는 능력 — 그림 속 지시를 소리로 답하는 것 같은 — 은 기존 벤치마크에 아예 없다.

그래서 언제 고르는가

아래 질문을 위에서부터 물어 처음 「그렇다」가 나온 곳을 따르면 대체로 맞다.

질문 그렇다면
결과물의 품질 자체가 상품인가 (음원·일러스트·더빙) 조립형. 각 자리에 전용 최고 모델
중간 단계에 반드시 사람이나 규칙 검사가 들어가야 하는가 조립형. 검사할 텍스트가 필요하다
말투·억양·현장 소리 같은 비언어 정보가 답을 바꾸는가 통합형
그림 속 위치를 가리키며 여러 턴 대화해야 하는가 통합형
응답이 1초 안에 시작해야 하는가 통합형
나머지 조립형으로 먼저 만들고, 막히는 지점이 위 셋 중 하나로 좁혀지면 옮긴다

마지막 줄이 실무에서 가장 자주 맞는 답이다. 조립형은 부분마다 갈아 끼울 수 있어 초기 반복이 빠르고, 어디가 병목인지도 눈에 보인다. 통합형으로 옮기는 것은 그 병목이 경계 자체라는 것이 확인된 다음이다.

정리

  • any-to-any의 새로운 부분은 입력이 아니라 출력이 열리는 지점이다. 입력만 여럿인 모델은 이미 흔하고 만들기도 쉽다
  • 한 모델에 다 넣는 방법은 하나뿐이다 — 전부 번호의 줄로 바꾼다. 이미지는 코드북 번호로, 오디오는 잔차 양자화로 겹겹이
  • 입력은 연속 벡터를 그냥 끼워 넣어도 되지만 출력은 안 된다. 고를 후보 목록이 있어야 하기 때문이다
  • 조립형이 포기하는 것은 셋이다. 경계에서의 정보 손실, 더해지는 지연, 끊기는 상호참조
  • 통합형이 치르는 값도 넷이다. 품질 천장, 검수 자리 소멸, 토큰 예산, 평가의 어려움
  • 먼저 조립형으로 만들고 병목이 경계 자체로 좁혀졌을 때 옮기는 것이 대체로 안전하다

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

LATEST

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

비전·음성·추천2026.09.07

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

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

18 MIN
비전·음성·추천2026.09.07

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

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

16 MIN
비전·음성·추천2026.09.07

정보 추출 — 글 한 덩이를 표 한 줄로 바꾸는 일

계약서와 이메일을 데이터베이스에 넣으려면 글에서 값을 뽑아 칸에 채워야 합니다. 개체명·관계·사건의 세 층위, 값을 정규화하는 일이 왜 절반인지, 근거 위치를 함께 남겨야 하는 이유, 규칙·전용 모델·언어 모델의 갈림길, 그리고 필드별로 재는 평가법을 정리합니다.

17 MIN