brunch

You can make anything
by writing

C.S.Lewis

by 배울장 Mar 26. 2024

효율적인 오프라인 TTS(Text-to-Speech)

온디바이스로 텍스트를 음성 소리 데이터로 변환해보자. 효율적으로.

TTS는 텍스트를 입력하면 음성 데이터로 반환해주는 기술이다. 아주 다양한 영역에서 활발하게 쓰이고 있다. 현재 TTS의 기술은 추억을 회상시켜주기도 하고, 좋은 현상인지는 모르겠지만 숏폼에서도 장악하다시피 쓰이고 있다. 해외에서 서비스 중인 디스크립트는 녹화 혹은 녹음한 음성을 기반으로 텍스트를 추출하고 텍스트를 수정하면 알아서 그 음성을 기반으로 자연스럽게 수정된 텍스트로 음성을 생성해준다.(아쉽게도 아직 한국어는 지원하지 않는다.)


TTS의 반대는 SST로 음성 데이터를 텍스트로 변환해주는 기술이다. OpenAI에서 공개한 Wispher 모델이 SST 알고리즘 중 가장 널리 쓰이고 있다. 성능도 아주 훌륭하고 하드웨어 요구사항도 높은 편이 아니라 아이폰에서도 인터넷 연결없이(서버 없이) 스마트폰 자체 연산으로 구동할 수 있다.


인터넷 연결이 없는 오프라인 상태에서는 클라우드를 사용할 수 없다. 이는 AI 적용에 있어서 아주 치명적이다. 사실 어떤 작업을 하기 위한 AI를 구축했다고 해도 그 AI 모델을 구동할 수 있는 하드웨어를 구비해야 하는데, 인터넷에 연결할 수 있다면 사실 클라우드를 사용하면 되기 때문에 거의 무적이라고 할 수 있다. 이제 문제는 인터넷이 없을 때이다. 인터넷 없이 기기 자체에서 구동할 수 있는 온디바이스 AI가 중요해지는 대목이다.


SST 모델 Wispher 모델은 다양한 크기로 미리 학습되어 있고 그 크기마다 속도와 음성 인식 성능이 다르다.

wispher 모델 크기와 성능의 트레이드오프


AI 모델의 크기는 신경망을 이루고 있는 파라미터의 개수로 판단하는데, 가장 작은 모델인 tiny의 경우 3900만 개의 파라미터를 갖고 있다. 작은 모델이기 때문에 성능은 가장 안 좋지만 속도는 large모델 대비 32배 빠르다. 클라우드에서 사용한다면 큰 모델로 높은 성능을 내는 것이 좋겠지만 온디바이스 환경에서는 수용할 수 있는 인식 성능을 기반으로 최대한 작은 모델 크기로 결정해야 한다.


지금까지는 음성 인식 기능을 하는 SST모델이었다. 오늘의 주제는 그 반대인 음성 생성 기능인 TTS다. SST의 Wispher처럼 TTS에서 가장 유명한 것은 Coqui TTS이다. 엄밀하게 말하면 Wispher는 알고리즘이고 모델 자체이지만 Coqui TTS는 여러 TTS 모델을 모아놓은 라이브러리이다. 라이브러리에 있는 모델 중 납득할 수 있을 만한 수준의 TTS 성능을 갖고 있으면서 가장 빠른 것은 FastSpeech 2였다. 내가 목표하는 수준의 작은 모델은 아니었다. SST와는 다르게 TTS는 온디바이스에서 동작할 수 있는 모델이 많지 않았다. 작은 모델을 설계해서 학습을 해야 하나.. 먼 길로 돌아가야 하나..라고 생각하던 중 눈길을 이끄는 제목을 가진 논문이 보였다. 바로 EfficientSpeech다. 내가 목표한 만큼 모델이 작았고 FastSpeech 2와 비교한 성능을 보니 납득할만한 수준이었다. 문제는 미리 학습된 모델이 영어만 있다는 것이었다. 한국어로 학습하는 게 그렇게 어렵겠어?라고 생각했는데, 큰 오산이었다.


많은 AI 분야가 그렇듯 TTS도 데이터 전처리가 필요하다. 그런데, 단순히 이미지 사이즈를 맞추거나 라벨링별로 분류하는 것이 아니었다. 기본적으로 생각할 수 있는 음성 생성 모델의 데이터는 음성/텍스트 짝이다. "안녕하세요. 배울 장입니다."라는 텍스트와 그 글을 읽은 음성 데이터를 짝으로 갖고 있어야 하는데, 여기서 끝나는 것이 아니다. 텍스트를 발음에 맞게 바꿔줘야 한다. 이를테면 "배울장"을 발음과 같이 "배울짱"으로 바꿔줘야 한다. 다음으로는 "배울짱"을 "ㅂ, ㅐ, ㅇ, ㅜ, ㄹ, ㅉ, ㅏ, ㅇ"으로 발음 단위별로 나눠주고, 이 나눈 텍스트를 음성 데이터의 어느 부분에 해당하는지 시간대별로 찾아서 연결해줘야 한다. 감사하게도 이런 작업들을 해주는 오픈소스 프로젝트(1, 2)가 있다.


우선 상업적으로 사용할 수 없지만 공개되어 있는 데이터를 통해 한국어가 학습이 잘 되는지 확인하기로 했다. 그 결과는 온디바이스에서 구동이 가능하다 것을 생각했을 때 납득할만한 수준이었다. 온디바이스에서 가능하다는 것은 클라우드 서버 사용료도 내지 않아도 되고, 인터넷에 연결되어있지 않아도 되며, 심지어 속도도 빠른 편이라 렉 걸린 것처럼 길게 기다릴 필요도 없다는 장점도 있다.


결과적으로 모델 데이터는 고화질 사진 한 장 크기정도이며, CPU에서도 매우 빠른 속도로 생성하고, 심지어 라즈베리파이에서도 구동할 수 있다. 학습 결과는 아래에 있다. 학습이 되는지 확인하기 위해 테스트한 것으로, 수렴했을 때 중단한 것이 아니기 때문에 더 학습한다면 더 좋은 결과를 낼 것이라고 생각한다.

한국어를 직접 학습한 결과(1개의 GPU에서 24시간 정도 학습)

온디바이스 환경이 아니라면 무지막지한 성능을 자랑하는 모델들이 포진해 있다. 그런 모델들과 비교했을 때는 초라해지지만, 언더독 정신을 위안 삼으며 마무리하기로 했다.


참고로 AI 음악 생성의 경우는 TTS지만 화자 변경과 같은 태스크이기 때문에 이번에 살펴본 분야와는 약간 다르다. 화자 변경의 경우 아주 적은 데이터(심지어 몇 초)로도 무지막지한 성능을 내는 논문이 있으니 관심이 있다면 클릭해 보시는 것도 좋을 것 같다.

작가의 이전글 AI로 반려동물 그림 그려주는 서비스 개발기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari