[생성형 AI] 대화할 수 있는 마동석 AI 캐릭터 만들어보자1

신창호·2024년 5월 28일
1

생성형AI

목록 보기
2/3
post-thumbnail

시작하게 된 이야기

최근 생성형 AI에 대해 언급을 많이 들어본 상태라 관심이 생겼는데,

마침 우아한스터디에서 생성형 AI에 관련하여 스터디를 진행한다고 하여 지원했었다.

스터디가 좋은 이유는 혼자 의지력이 낮아졌을때 도움을 받을 수도 있고 집단지성의 힘도 얻을 수 있다 생각하여 지원했다.

(오! 생성형 AI같이 스터디하면 재밌겠다! 하고 신청했지만,)

아쉽게도 같이 할 수 없게되어, 혼자 알아보게되었다.

다만, 혼자서 하게되면 내가 끝까지 할 수 있게 "재밌는 목표"를 가지고 해야하는데.. 고민하던 도중 내가 즐겨하는 게임의 마동석 형님이 눈에 들어왔다.

어? 총쏘는 동석이형이랑 거칠게 대화하면 재밌겠네? 라는 생각이 들었고
형님을 목표로 시작하게되었다.



준비과정

목표 구체화하기

내가 뭘해야하는지? 흥미가 생겼을때! 내가 해야할일을 정확히 만드는 것이 중요하여 목표를 구체화 해보았다.

  • 콘셉: (배그)마강재 캐릭터를 모티브로 한다.

    • 배그 내에 스토리가 있는지 이때 처음알았다 ㅎㅎ
    • 기존에 있는 캐릭터를 활용하면, 소스를 구하기 좋다 생각하여 모티브로 삼았다.
  • 목표 결과물 : 음성으로 말하면 동석이형 말투와 목소리로 대답한다.

    • 사실 이부분이 핵심 목표이다.

    • 음성을 듣고 음성으로 다이렉트로 말하는 건 힘들 것 같아 몇단계로 세분화 하였다.

      1. 사용자의 음성을 텍스트로 변환한다.
      2. 텍스트를 chatGPT에게 보내고 동석이형 말투 텍스트로 응답받는다.
      3. 받은 텍스트를 동석이형 음성으로 출력한다

    • 마동석 이미지가 움직여 말하면 더 재밌을 것 같지만 이건 추가사항으로..

예상 일정

예상일정은 내가 겪게되는 힘들것 같은 부분도 적어놔서 당연히 해야되는 느낌으로 적었다.(혼자하기에 더욱더 도움이 된다.)

  • 1~2주: 내가 뭘 모르는지, 구현하기 위해서 무엇을 학습해야되는지, 무엇이 필요한지 알아보기
  • 2~4주: 시행착오 겪으면서(+겪었던 내용 기록) 구현해보기
  • 4~5주: 결과물을 만들어내서 주변 사람들(최소 10명)에게 시연시켜보고 피드백 받아보기

1~2주 내용

시작한지 좀 지났기때문에, 내가 겪었던 2주간의 경험 내용을 공유하고 계획을 보다 구체화 하려고 한다.

요약본

필요한 생성형 AI

  • 실질적으로 내가 학습시키고 만들어야하는 생성형 AI는 2개이다.
    • 텍스트 생성형 AI(ChatGPT-4o)
    • 음성 생성형 AI(xTTS)
  • 나머지는 AI가 생성하는 형태가 아닌 통신이나 서비스 구현을 위한 도구들이기에
    현재 내가 생각했을때는 이 2가지를 fine-튜닝(학습시킨다는 뜻)시키는 것이 핵심 과제이다.

그외 필요한 기술

  • 음성 -> 텍스트 변환 기술(whisper사용할 예정)
  • 텍스트 학습 자료 수집 도구
    • 직접 인터넷, 유튜브등 매체를 통해 수집하기(나무위키)
  • 음성파일(wav) 학습 자료 수집 도구
    • youtube-dl, ffmpeg
    • wav 편집 프로그램(GarageBand_mac 프로그램)
  • 서비스 구현
  • python사용
  • 패키지관리를 위한 가상환경 Conda
  • fastAPI 프레임워크

전체 계획 정리

1. 음성 -> 텍스트 변환

  • 음성을 텍스트로 변환해주는 (Speech-to-text)기술이 여러가지가 있었지만, ChatGPT를 개발한 OpenAI에서
    Whisper모델도 개발했기때문에, 서로 호환성도 좋고 공식문서에서도 언급되어 있기 때문에 큰 고민없이 Whisper모델을 선택했다.
  • 지난 포스팅을 통해 한국어음성도 꽤나 괜찮게 텍스트로 변환하는 것을 확인도 해봤다.

2. ChatGPT fine-Turning

동석이 형님의 성격과 말투로 이야기하기위해서 교육을 시켜야한다. 그렇지않으면 GPT의 친절한 말로 답변하여 느낌이 살지 않는다.

  • 새로운 베타 기능인 Assistant를 사용

    • 프롬프트의 튜닝으로는 한계가 있었기때문에
    • 파일 업로드하여 튜닝이 가능하여 사용함.
    • 물론 사용하기위해, assistant와 thread, run의 관계와 file-Search기능을 알아야한다.
  • 자주하는 대사, 서로 대화하는 dialog, 성격 및 지식을 넣어주는 것이 목표, 프롬프트로 친철하고 자세할 수록 좋다.

    • 마 형님의 성격과 말투는 범죄도시와 이웃사람 영화를 기반으로 가져옴.

    • 마 형님의 배경은 배틀그라운드 마강재의 배경을 가져옴.

    • 마 형님의 지식은 배틀그라운드 가이드 내용을 가지고 하였다.

(동석이 형님 dialog만드는 과정에서 워낙 명대사들 말투가 거칠다보니 코파일럿이 너무 무섭다고하는 해프닝도 일어남ㅎㅎ)



  • 파인튜닝이 완료가 되었다면, FastAPI로 튜닝한 모델을 불러서 사용할 수 있게 만들면 된다.

    이름 몇번 더 물어보면..잡아먹을 기세.. 이웃사람 마동석캐릭터가 너무 강해서 나도 무서웠따..😥

3. 텍스트-> 마동석 음성 변환

  • 오픈소스인 xTTS를 채택했다.
  • 음성을 생성해야되는 경우임으로 텍스트랑 달리 음성데이터가 필요하다.
  • 음성을 파인튜닝하기위해 필요한 단계
    1. dataSet(학습할 데이터가 준비되어 있어야 하고)
    2. Setting(학습시킬 아키텍쳐를 정의해야한다.)
    3. fine-turning(학습)

음성데이터 수집

  • 공식문서를 보니까, dataSet를 좋게 수집하는 방법은
    1. 음성파일 데이터가 잡음이 없어야하며
    2. 말하는 사람 한명의 내용이 들어가야하며
    3. 총 음성의 시간이 한파일당 3.6초로 약 1만개의 음성
      • 즉, 10시간은 최소로 필요하다.
    4. 게다가 같은 음성파일일 경우 과적합이 일어날 수 있으므로 다른 음성파일일 수록 좋다.

3.6초짜리 음성파일을 1만개..어떻게 모으나? 여기서 막막했다.
이웃사람 영화 한편을 봐도 마동석형님의 대사는 몇분이 안되었고, 그나마 메인 주인공인 범죄도시가 있어서 추출하려고 해도 마형님 대사만 추출해야되기에, 완전 노다가가 따로 없었다..

  • 그래서 나름 해결책으로 유튜브를 선택했다. 다행히 마동석배우님의 영화를 좋아하시는 분들이 모와놓은 영상들이 꽤 있었다. (그래도 부족)
    • 유튜브 음성따기 좋은 라이브러리: youtube-dl
    • wav
    • wav 파일 편집: GarageBand_mac Mac 내장프로그램



마무리

  • 현재도 노다가하여 음원을 추출하고 있다.
  • 음성을 튜닝하는 부분에서 오래거릴줄은 몰랐지만, 보다 효율적인 방법을 알게된다면 다시 공유해보고자한다.
  • 그리고 생성형 AI를 튜닝하면서 알게된 내용과 공식문서의 내용도 한번 정리하여 올려놓을 예정! (난 생성형AI가 뭔지도 몰랐기 때문에)
  • 어느정도 완성이 되면 결과물 또한 공유해보고자한다. (저작권이슈가 있기 때문에 공식적으로는 불가능할지도..)
  • 그리고 역시 개발하면서 최고의 동기는 재미인듯 하다.ㅎㅎ
  • 참고로,ChatGpt-4o는 결제하여야만 사용할 수 있다.

참고자료

나무위키

profile
한단계씩 올라가는 개발자

0개의 댓글