[가상인간연구팀 전동준]
요즘은 대화 모델이 외모를 가진 가상 인간으로 진화하고 있는데요. 다양한 연구와 시도들을 어떤 식으로 결합하고 확장할 수 있을지 맛보기 위해서 대화 모델에 3D 가상 인간의 외모를 붙인 튜토리얼을 진행해 보았습니다!
Virtual Human
지난 2020년, IT 전시회인 CES에서 삼성이 “네온(Neon)” 프로젝트를 공개하면서 실제같은 가상 인간을 선보였습니다. 사람들은 이제 가상 인간이 다양한 분야에서 활용될 수 있을 것이라고 기대하였습니다.
현재에 와서 가상 인간들은 다양한 분야에서 활동하고 있습니다. 여러 기업들에서는 가상 인간들을 만들어 그들의 기술력을 보여주기도 하고, 실제로 매력적인 모델을 창조함으로써 경제적인 효과를 이끌어내기도 합니다. 가상 인간들은 시공간의 제약을 벗어나 있고, 지치지 않고 컨텐츠를 무한하게 생성할 수 있다는 장점으로 고객 응대, 뉴스 생성, 강의, 챗봇 등의 분야에서 활약을 하고 있습니다.
Open-domain Chatbot
챗봇은 기존에도 있었지만 기술이 발전함에 따라 챗봇의 캐릭터를 가상 인간으로 설정하여 고도화된 형태로 보여주는 기술들이 나오고 있습니다. 텍스트 기반의 챗봇과 비교하여 캐릭터나 가상 인간같은 아바타가 붙은 챗봇은 사용자에게 더 풍부한 정보를 보여줍니다. 챗봇의 상태를 아바타의 표정이나 행동으로 나타내면서 더 대화하는 느낌을 줍니다.
보통 챗봇의 목적에 따라 오픈 도메인(Open Domain) 챗봇과 목적 지향형(Task-oriented) 챗봇으로 나뉘는데, 주제가 정해져 있지 않은 일상 대화를 목적으로 하는 챗봇을 오픈 도메인 챗봇으로 분류합니다. 상품 주문, 예약같은 서비스에는 목적 지향형 챗봇 시스템을 구축하지만, 사람같은 대화를 하는 챗봇에는 오픈 도메인 시스템이 필요합니다.
챗봇을 기술적으로 구현하는 방법은 다양합니다. 목적 지향형 챗봇은 챗봇 빌더등을 통하여 NLP를 통하여 질문의 의도를 파악하고 그에 맞는 답변을 미리 구축한 답변 데이터베이스에서 Retrieval 하는 형태로 이루어집니다. 오픈 도메인 챗봇은 다양한 사용자 질문을 정해진 답변으로는 대응할 수 없기 때문에 AI 생성 모델 기반의 대화 엔진이 많이 사용됩니다.
Virtual Human Chatbot
AI의 창의적인 답변을 기대하면서 실감나게 대화할 수 있는 가상 인간 챗봇을 만들어 보겠습니다. 이 가상 인간은 사용자의 어떤 질문이든지 답변을 할 수 있고, 그에 맞는 답변을 말할 수 있는 기본적인 기능을 가진 챗봇입니다.
연동된 기술들이 작동하는 것을 보는 것이 목적이기 때문에 오픈된 기술 스택등을 적절하게 조합해보려고 합니다. 사용하는 기술 스택은 다음 목록과 같습니다.
- Hugging Face Inference API
transformer 기반의 모델 학습과 배포를 위한 라이브러리로, Inference API는 허깅페이스에 구현된 모델들을 배포된 형태의 REST API로 제공합니다. - Unreal Engine Metahuman
언리얼 엔진에서 사용할 수 있게끔 제작된 3D 모델 에셋으로, 사람같은 사실적인 3D 프리셋 캐릭터와 자연스럽게 캐릭터를 제어할 수 있도록 돕는 툴등을 제공합니다. - 기타 Unreal Engine 유/무료 SDK
TTS(Text-to-Speech) 기능을 위한 Google Speech Kit
Lipsync 애니메이션 생성을 위한 Metahuman SDK
REST 통신을 위한 VaRest 플러그인.
언리얼 엔진의 마켓플레이스를 통해 다운받을 수 있습니다.
How to
1단계: huggingface API 이용하여 대화 모델 사용하기
허깅페이스 사이트에 가입을 하고 API를 사용할 수 있는 Access Token을 발급받으면 Inference API를 사용할 수 있습니다. 허깅페이스는 최신 AI 모델들을 Hub를 통해 제공하고 있고, 또한 Inference API를 이용하여 모두 사용할 수 있습니다. 무료 버전은 사용량이 정해져 있고 속도가 느리지만, 따로 모델을 배포하기 위한 환경과 서버 구축을 위한 리소스를 줄여줍니다.
대화모델 선정하기
특정 목정을 가진 대화 엔진이 아닌 오픈 도메인을 대응하기 위해서는 생성형 AI 모델이 적합합니다. 스마일게이트의 HuLiC 플랫폼을 통하여 크라우드소싱을 통한 대화 모델 평가를 진행하였는데, GPT-3 챗봇보다 메타 Facebook AI(現 메타 AI)에서 발표한 Blenderbot 모델의 평가 점수가 더 높았습니다.
GPT-3는 AGI(Artificial General Intelligence)를 타겟으로 한 모델이고 Blender는 정제된 대화 데이터를 학습한 대화에 특화된 모델이라는 것에 차이가 있지만, 평가 항목 전반에서 높은 점수를 받은 것을 볼 수 있습니다.
외부 지식을 이용하는 Blenderbot2.0이 나왔는데 허깅페이스 모델 Hub에 아직 구현이 안되어 있어서 Blenderbot1.0 버전을 사용하여 대화 답변을 할 수 있는 모델을 선정하였습니다.
Inference API 만들기
Inference API 무료 버전으로는 월 30k의 character token(NLP 처리 단위)을 처리할 수 있습니다. REST API 형식으로 다른 프로그램과 HTTP 통신을 이용하여 요청/응답을 받을 수 있습니다. 사용자의 질문을 요청으로 주고, 모델의 Inference를 AI를 답변으로 사용하는 형태입니다.
2단계: Unreal Engine의 Metahuman 사용하기
사실감이 느껴지는 3D 모델을 만드는 것은 많은 리소스가 들어가는 작업입니다. 이런 리소스를 줄여주기 위해 언리얼에서 오픈한 것이 메타휴먼입니다. 사실적인 3D 캐릭터를 쉽게 사용할 수 있고, 무료입니다!
메타휴먼은 3D 모델이기 때문에 사람같이 움직이는 것을 보려면 애니메이션 작업이 필요합니다. 메타휴먼은 정밀하게 움직일 수 있도록 몸과 얼굴의 컨트롤 리그(Control Rig)를 제공하는데, 이를 자동화된 플로우를 따라 제어할 수 있으면 실시간으로 반응할 수 있는 3D 가상 인간을 만들 수 있습니다.
3단계: TTS(Text-to-Speech) 모듈 사용하기
TTS는 입력 텍스트를 오디오로 바꿔주는 모듈입니다. blender 모델을 거쳐 나온 답변 텍스트(허깅페이스 Inference API)를 실제 말하는 것처럼 바꿔주기 위해서 TTS 모듈을 사용합니다. 구글의 TTS API를 사용하고, 이를 언리얼에서 사용할 수 있게 만든 SDK를 사용하여 만들어 봅시다.
4단계: Lipsync 제어하기
음성이 나오면 가상 인간은 그 음성에 맞게 입모양을 생성해야 합니다. 실제 사람이 말하는 것은 말하는 것과 표정이 동시에 생성(?) 되는 것이지만 지금 만드는 가상 인간은 데이터를 순차적으로 만드는 구조이기 때문에 답변 음성에 맞는 입모양을 생성한 다음에 이를 다시 싱크하는 작업을 합니다. Nvidia에서도 딥러닝 기술을 이용하여 3D 모델의 얼굴 애니메이션을 제어하는 기술을 발표했습니다.(audio2face) 이 기술을 이용하여 Metahuman의 애니메이션도 만들어서 사용할 수 있습니다.
하지만 실시간으로 대응하는 것이 목적이기 때문에 언리얼 마켓플레이스에 있는 Metahuman SDK를 사용하였습니다. 이 SDK는 음성을 메타휴먼의 얼굴 애니메이션으로 만드는 기능을 제공하고 이를 실시간으로 렌더링 할 수 있는 인터페이스도 제공합니다. 이 SDK를 사용하여 실시간으로 입술 모양이 바뀌는 모듈을 조합해 보았습니다.
각 단계에 따라 전체적인 흐름을 그림으로 그려보았는데요. 각 모듈을 통과하면서 텍스트, 오디오, 립싱크 애니메이션을 각각 만들고 통합되어 가상 인간을 움직입니다. 각 모듈을 통합하여 실제로 채팅을 진행해 보았습니다.
Demo
Blender1.0의 가장 작은 모델을 이용해 간단한 테스트를 해보았습니다. 실시간으로 인터랙션 할 수 있고, 입모양도 발음에 따라 자연스럽게 움직입니다.
지연 시간과 자연스럽게 몸이 움직이는 애니메이션을 넣어주면 더욱 자연스러운 가상 인간 챗봇을 만들 수 있을 것입니다. 저희는 더욱 사람 답게 말하고 공감해줄 수 있는 AI를 만들기 위해서 연구하고 있습니다.
Reference
https://www.unrealengine.com/ko/metahuman-creator
https://www.nvidia.com/ko-kr/omniverse/apps/audio2face/
https://hulic.smilegate.net/
https://huggingface.co/