뉴스에 목소리를 입히다

MSPEAK

by핑크곰

작년 여름, 사내 AI전환 TF에서 "AI 라디오 뉴스" 관련 개발 요청이 있었다.


처음엔 쉬워 보였다

처음 든 생각은 단순했다. 기사 텍스트를 TTS API에 넣고 오디오 파일을 뽑으면 끝 아닌가. 그런데 말입니다... 실제로 기사 원문을 그대로 읽히면 굉장히 어색하다. 괄호 안에 들어간 기자 이름, 따옴표로 감싼 인용구, 숫자와 단위, 표 형태로 정리된 정보. 사람이 눈으로 읽을 땐 아무 문제 없는 문장들이 그대로 낭독되면 어딘가 로봇이 뉴스를 씹어먹는 소리가 났다.


결국 기사 원문과 실제로 읽을 대본은 다르게 가야 한다는 결론에 도달했다. 그래서 파이프라인을 하나 더 만들었다. 기사를 요약하고, 방송 대본 형태로 다시 쓰고, 오탈자와 어색한 표현을 교정한 다음에야 TTS로 넘기는 구조다.


이 과정에서 프롬프트만 서너 개를 따로 관리하게 됐다. 요약용, 대본 변환용, 교정용, 그리고 심플 버전까지. 프롬프트 파일들이 하나둘 늘어나는 걸 보면서 "아, 이게 그 말로만 듣던 프롬프트 엔지니어링이구나" 싶었다.


TTS 모델

우리시스템은 TTS 관련 두가지를 만족시켜야 했다.

첫째, 기존 아나운서 목소리의 유사성

둘째, 발화의 정확성


뉴스의 특성상 기존 뉴스를 진행하던 아나운서의 목소리와 가장 비슷해야 했고 생성된 음성은 정보를 정확히 전달하기위해 잘못 발음된 부분이 없어야 했다. 때문에 TTS 모델에 대한 검토가 정말 어려웠다.

오픈소스 모델 수십개 넘게 검토했고(벤치마크 점수는 곧이 곧대로 믿으면 안된다는걸 뼈저리게 느낌) 위 두가지 목표를 달성하기 위해 모델 파인튜닝도 다양하게(Full, Partial, LoRA) 진행했다.


편성 시간이 정해진 라디오 뉴스

실시간으로 방송 시간과 맞춰야 하는 서비스다 보니, 대본 길이만 보고도 오디오가 대략 몇 분짜리가 나올지 예측할 수 있어야 했다. AI의 모델의 특성상 정확한 길이의 음성파일을 생성하는 건 현실적으로 불가능했기 때문에 이를 해결하기 위한 알고리즘을 별도로 개발했다. 알고리즘을 위해 다양한 수치 계산하는데도 꽤나 많은 시간이 필요했다.


사람이 쓰는 시스템이라는 걸 잊었다

기술적으로 TTS 파이프라인을 완성했다고 끝이 아니었다. 실제로 이걸 매일 사용하는 사람은 개발자가 아니라 뉴스룸 소속의 기자들이었다. 로그인은 사내 LDAP 계정으로 되어야 했고, 오디오 파일은 방송 편성 시간과 자동으로 맞물려야 했다. 그래서 사내 방송 편성 시스템과 방송 시간을 동기화하는 크론잡을 따로 만들었다.


오디오 파일이 쌓이는 것도 문제였다. 매일 생성되는 파일을 그대로 두면 서버 디스크가 남아나질 않아서, 일정 기간이 지난 파일을 자동으로 정리하는 스크립트도 따로 붙였다. 별거 아닌 것 같은데 이런 자잘한 운영 스크립트들이 결국 서비스를 굴러가게 만드는 진짜 힘이더라.


지금의 MSPEAK

지금은 라디오 뉴스 뿐만 아니라 콘텐츠 제작을 위한 다양한 부서에서 활용하는 TTS 종합 플랫폼으로 자리를 잡았다. 물론 아직 완벽하진 않다. 대본으로 바꾸는 과정에서 특정 고유명사 발음은 여전히 수동으로 손봐야 할 때가 있다. 이 부분은 계속 다듬어가는 중이다.


그럼에도 기능은 점차 늘어나고 있다.

사내 직원이라면 누구나 손쉽게 목소리를 클로닝 할 수 있고 TTS 통해 텍스트를 음성으로 변환 가능하다. 사내외 모델중 본인이 원하는 모델을 선택하여 활용할 수 있고 부서별 업무 특성을 고려하여 특화된 메뉴를 제공하기도 한다.


빠른 시일내 AI Agent를 통해 MSPEAK을 보다 적극적으로 활용하는 한해가 될 거라 믿는다.

카지노 게임의 이전글MUSE, AI 음악 프로젝트