데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Language-Image Multi-modal AI 기술 연구 - 자연어 처리 기반의 기술 연구과정

      KEANU 22.10.24
      3,542 7 0

      데보션 개발자 여러분 안녕하신가요? 저희는 SKT AI FELLOWSHIP 4기에 참여 연구 중인 팀 KEANU입니다.


      이번 블로그 포스팅에서는 저희 팀이 다루는 주제이면서 Vision-Language Modeling 태스크 중 가장 🔥화두가 되고 있는 분야 중 하나인 텍스트 기반 이미지 합성 및 생성(Text to Image Synthesis or Generation) 태스크를 백업해주기 위한 자연어 처리 파트에서의 컨트리뷰션을 소개해드리려 합니다.


      가령 최첨단 모델 기반의 사용자 환경에서 AI 지식이 전혀 없는 일반인들도 효율적으로 원하는 그림을 생성해낼 수 있도록 하는 유저 친화적인 텍스트 입력을 다루기 위한 방법이 요구될 수 있는데, 이러한 상황에 대해 저희 팀이 연구하고 있는 내용들에 대해 공유해 드리고자 합니다.


      텍스트 기반 이미지 합성 및 생성(Text to Image Synthesis or Generation) 태스크에 대한 설명은 이전 저희 팀의 포스팅에 너무나 잘 설명되어 있기 때문에 이번 포스팅에서는 생략하도록 하겠습니다.

      해당 태스크에서 오늘 메인으로 소개해 드릴 텍스트 입력 파트는 일반적으로 대화형 텍스트, 정리가 되지않는 장문 형식 등 유저의 성향에 따라 자유도가 높아서 여러가지로 발생할 수 있는 반면, 현재 텍스트 기반 이미지 합성 모델들은 커맨드 형식의 프롬프트형 입력을 대부분 요구하고 있습니다.


      현재 일반인들로 하여금 Text-to-image synthesis 모델을 사용하게끔 하기 위해서 가장 많이 사용되는 방식은 모델을 데모로 배포하여 사용자로부터 커맨드 형식의 텍스트 입력(이를 프롬프트라고 합니다.)을 요구하는 형태입니다. DALL-E 2, DALL-E와 같은 SOTA 모델이 다음과 같은 데모 방식을 사용하고 있다고 볼 수 있습니다.


      저희는 아래 그림과 같이 대화형 입력을 받아 이미지를 생성하도록 하는 방식의 좀 더 유저 친화적인 방식을 Text-to-Image Model에 적용해 보는 건 어떨까? 라는 물음을 갖고 기존 자연어 처리 분야의 기술들을 응용하기로 해 보았습니다.


      지금부터 소개해 드릴 내용은 그러한 내용들을 어떻게 적용했는지에 대한 것입니다. 함께 가보시죠😀


      Textchat2Prompt의 필요성

      이해를 돕기위한 몇 가지 예시를 준비해 보았는데요,

      아래 그림처럼 일러스트레이션 그림을 필요로 하는 사용자 A, 사용자 B, 사용자 C가 있다고 가정해 봅시다.


      사용자 A는 본인의 도전작 웹툰의 일러스트를 필요로 하는 사용자이며 Text-to-Image Model의 프롬프트 형식을 전혀 알지 못하기 때문에 아래와 같이 모델에 물어봤습니다.

      “안녕하세요. 일러스트 그림 그려주세요. 후드티를 입고 고양이 귀를 한 분홍머리 여자, 나이는 16살 정도, 일본 애니메이션 스타일로 부탁드려요.”

      사람인 저희들이 보기엔 공손하게 잘 물어본 것 같아 보이죠? 하지만 불행하게도.. (unfortunately..) 사실상 로봇이라고 볼 수 있는 모델의 관점에서는 해당 입력에서의 안녕하세요, 그려주세요, 부탁드려요 등의 텍스트 토큰은 양질의 생성을 방해하는 일종의 **노이즈(noise)**에 불과합니다. 😭

      이를 프롬프트 형식으로 바꿔주는 중간 과정이 자동으로 이뤄진다면 참 좋을 것 같지 않나요? 그 부분은 조금 후에 다시 이야기 해보겠습니다.


      비슷한 처지의 사용자 B는 좀비물 베스트 도전 웹툰 작가입니다. 비싼 비용의 일러스트 작가를 고용할 돈이 아깝기 때문에, 본인의 웹툰 표지를 만들기 위해 Text-to-Image Synthesis 모델을 사용하고자 했습니다.

      역시 명령문에 익숙치 않아 아래와 같이 다소 naive한 입력을 주었습니다. 명령이 아닌 모델에게 설명을 통해 이해시키려고 시도 한 것 같습니다. ㅎㅎ

      “웹툰 표지로 일러스트를 쓰고 싶은데 그림 그려줘. 웹툰은 좀비 던전과 보물에 얽힌 비밀들에 관한 내용이고, 내가 필요한 일러스트는 좀비 던전을 지나는 칼을 든 금발의 5살 여자 아이야.”

      모델이 처리하기 위한 정보의 관점에서는 잘 입력한 편으로 볼 수도 있겠으나, 대화 형식의 어투에서 나오는 텍스트 토큰들이 충분히 노이즈로 작용할 수 있습니다. 마찬가지로 처리 과정을 통해 정교성을 높이는 과정이 있다면 좋을 수 있겠습니다.


      사용자 C는 아예 일반인이라 칩시다. SNS로 본인의 친구들에게 좀 더 위트있는 명절 인사를 보내기 위해 추석 토끼, 보름달 관련 그림을 그려서 공유하고 싶은데, 그림을 직접 그림판으로 그리는 데에는 무리가 있기에 최근에 🔥HOT하기로 소문난 Text-to-Image Synthesis 모델을 이번 기회에 사용해보기로 했습니다. 아래와 같이 인풋을 주었습니다.

      추석이기도 하니, 보름달을 배경으로 한 한복입고 세배하는 토끼를 그려 줄 수 있을까?

      간결하게 입력을 주었기에, 노이즈는 적지만 마찬가지로 좀더 정형화된 방식의 입력으로 변환하여 모델이 이를 좀 더 잘 이해하게 하면 출력물의 퀄리티가 더욱 좋겠다는 생각이 듭니다.


      How to help them?

      저희는 예시 속 사용자 A, 사용자 B, 사용자 C의 고민이 사용자의 잘못이 아니라고 생각합니다.


      그렇기에, 단순히 “프롬프트 형식을 좀 더 조사 해서 다시 입력해 봐”라는 결론이 아닌, 사용자가 마치 그림 그려주는 로봇과 대화하는 것처럼 입력한 채팅 방식의 대화형 입력을 존중하여 이를 자동으로 중간 변환하는 일종의 [ 대화형 입력 텍스트 → 자연어 분석 → 프롬프트 형식으로 변환 ] 과정이 충분히 수요가 있을 수 있다고 판단하여 이를 직접 만들어 봤습니다.


      이러한 태스크는 기존에 정형으로 존재하는 방식은 아닙니다.

      저희는 태스크 명칭을 From-Text-chat-to-Prompt (Textchat2Prompt)로 규정하고 이를 구현했습니다.


      응용한 자연어 처리 기법 소개

      1. Few-shot Learning (+ GPT-3 )

      퓨삿 러닝이란?

      퓨 샷 러닝(Few-shot Learning)에 대해 직관적인 이해를 돕기 위해 하나의 예시를 준비했습니다. 여러분은 아래 예시에서 몇 가지의 예시문만 보고 다음 예시문의 물음표에 들어갈 숫자를 맞출 수 있나요?


      위 예시는 4개의 모범답안 데이터만 보고 정답 레이블을 예측하는 일종의 “퓨 샷 텍스트 분류 태스크”입니다.

      이러한 태스크에서 저희와 같은 보통의 사람들은 직관적으로 레이블(label)을 파악하기 때문에 대부분 물음표에 들어갈 숫자가 무엇인지 파악하는데 어려움을 겪지 않는 편입니다.

      사람은 대부분의 언어 태스크를 수행하기 위해 ‘예제 데이터’를 많이 필요로 하지 않습니다.

      그러므로 맛있다, 재밌다 등의 긍정적인 문장이 1, 지루하다, 방해했다, 등의 부정적인 문장이 0에 맵핑되므로 마지막 예시문의 돈 잃어버렸다는 부정적인 경향이 강히 0으로 맵핑될 것이라고 4개 데이터만으로도 충분히 추론할 수 있습니다.

      ( 이를 머신러닝의 관점에서는 패턴을 파악하도록 하는 메타 러닝(meta learning)으로 볼 수 있습니다. )

      그러나 우리가 데이터를 학습시켜서 높은 성능을 거두기 위해 대부분 사용하는 머신 러닝과 딥 러닝 방식에는 많은 데이터를 필수적으로 요구하게 됩니다. 고작 4개의 매우 작은 데이터로는 거대한 모델 파라미터를 학습하는 데에 무리가 있죠.

      작은 양의 데이터로도 패턴을 학습하는 등의 방식의 메타 러닝을 기반으로 모델 파라미터를 효율적으로 학습하도록 하는 방법을 Few-shot Learning으로 볼 수 있습니다.

      그리고 Few-shot Learning의 장점으로 아래와 같은 점을 들 수 있습니다.

      장점

      • Few-shot learning은 높은 성능을 위해 Fine-tuning을 필수적으로 요구하는 기존 언어모델 학습의 한계를 뛰어 넘을 수 있다.

      • 말 그대로 적은 데이터(few data)로 학습을 할 수 있게 하는 목적이 있으므로 데이터를 많이 필요로 하지 않는다. 데이터셋이 없거나 데이터셋이 매우 부족한 태스크에서 적당하게 좋은 성능을 발휘하고자 하는 상황에서 강점을 발휘한다.

        • 대신 Few-shot learning은 Fine-tuning을 통해 모델이 낼 수 있는 최고의 성능까지 내는 것은 아직까지 challenge적인 부분 여전히 존재

      • 모델 파라미터가 클 수록 좋기 때문에, 모델 스케일이 계속해서 커지고 있는 자연어처리 모델링 추세에 매우 잘 부합하는 편이다.

      자연어 처리의 생성 기반 모델링의 Few-shot Learning의 대표적인 예시로는 OpenAI의 GPT-2와 GPT-3를 예시로 들 수 있습니다.

      GPT-2는 대규모 말뭉치 데이터셋으로 사전학습이 이뤄진 Transformer-based Modeling을 통해 한번에 여러가지 태스크에서 파인튜닝 시 sota를 달성할 수 있다는 점을 보여줬다면, GPT-3는 명칭에서도 알 수 있듯 GPT-2의 연구를 이어 받되 여러가지 점들을 개선시켜 자연어 생성 성능을 대폭 향상시킨 것입니다. 두 모델 다 Few-shot Learning을 적용하는 실험을 제시하지만 아무래도 GPT-2의 좋지 못했던 Few-shot Learning 성능이 GPT-3 연구에서 제시된 Few-shot Learning 방식인 In-context Learning을 통해서 성능이 많이 개선되는 연구 흐름을 보이기 때문에, GPT-2의 설명은 생략하도록 하겠습니다.

      그렇다면 GPT-3에서 소개된 효과적인 성능을 보인 Few-shot Learning 기법인 In-context Learning은 어떤 것일까요?


      2. In-context Learning

      “Language Models are Few-shot Learners”

      AI 개발자들 사이에서는 GPT-3라는 이름으로 아주 유명한 연구 논문의 제목입니다.

      논문 제목부터 Few-shot Learning을 암시하며 깔고 갑니다.

      아래 그림은

      GPT-3에 수록된 Few-shot (In-context) Learning과 전통적인 fine-tuning의 차이를 직관적으로 보여줍니다.



      In-context Learning은 태스크 설명과 같은 프롬프트형 텍스트(prompt or text description)와 몇 개(few)의 예시들을 조합하여 다음 예시의 결과를 언어 모델의 자연어 생성 성능을 통해 풀고자 하는 few-shot learning 방식입니다. 이것이 가능하게 하는 핵심적인 원동력은 바로 매우 많은 데이터로 이미 사전 학습(pre-training)된 매우 큰 파라미터를 가지는 언어 모델입니다. 실제로 모델 파라미터 수가 1 Billion (10억 개) 이상인 경우에 In-context Learning을 적용하면 효과를 충분히 볼 수 있다고 여깁니다. 아래 그래프는 in-context Learning의 성능을 보여주는 그림입니다.

      첫 번째 그림은 자연어 질의응답인 QA 태스크에서 모델 파라미터가 커질 수록 Few-shot In-context Learning task 성능에서 SOTA에 가깝게 성능을 뽑을 수 있다는 것을 보여주는 그림입니다.

      두 번째 그림은 포함한 전반적인 자연어 처리 멀티 태스크에서도 모델 파라미터가 클 수록 좋음을 보여줍니다. 덧셈, 뺄셈과 같은 모델이 퓨샷으로 학습하기 거의 불가능해 보이는 태스크들을 포함하기도 하기 때문에 1B 대의 모델 파라미터에서는 성능이 낮아 보입니다만 실제로 자연어 처리 태스크에 적용해보면 1B 이상의 모델에서 아주 잘 동작하는 경향이 있습니다.





      주요 사항들을 다시 요약하면 아래와 같습니다.

      • In-context Learning은 자연어 처리 태스크에서 Few-shot Learning로 다운스트림 태스크를 학습하는 데에 패턴 등의 방식을 학습에 활용하는 Meta-learning 기반의 학습 방식 (OpenAI의 GPT-3에서 제안됨)

      • GPT-2에서는 파인튜닝에 비해 성능적 한계를 보였으나 GPT-3와 같은 175B (1,750억 개) 모델 파라미터의 초 거대 언어모델에서 In-context Learning 기반의 Few-shot learning으로 fine-tuning의 성능을 능가함

      • 초 거대 사이즈 외에도 1B 이상의 모델 파라미터를 가지는 언어 모델에서 In-context Learning을 통해 Few-shot으로 태스크를 어느 정도 높은 수준으로 학습할 수 있음을 제시

      • 학습 데이터를 task description + few data + prompt로 구성하여 모델이 패턴을 학습할 수 있게 도움


      In-context Learning 기반 Prompt Engineering

      앞서 In-context Learning을 적용하면 사전학습된 모델 파라미터 1B 이상의 큰 언어 모델 (Large-scale Language Model)를 작은 양의 데이터로 few-shot learning을 시킬 수 있음을 설명드렸습니다.

      저희 팀은 앞서 사용자 A,B,C 케이스에서 본 것 처럼 Textchat2Prompt 기술을 In-context Learning을 통해 구현하였습니다.


      [ 모델 ]

      저희는 한국어 기반의 태스크를 구현하기 위해 영어 기반의 GPT-3를 사용하는데에는 당연히 무리가 있다고 여겼으며,

      그렇게 저희가 채택한 모델은 KakaoBrain의 KoGPT입니다.

      그 이유는 현재 모델 파라미터 1B 이상의 사전학습된 GPT-style 한국어 기반 언어모델은 (1) NAVER CLOVA AI의 HYPERCLOVA와 (2) Kakao Brain의 KoGPT 두 가지인데, 회사에 소속되어있지 않은 일반 개발자 관점에서는 HYPERCLOVA는 네이버 내에서 직접 사용하는 것을 목적으로 하고 오픈 소스 공유를 최소화하고 있기 때문에 모델을 학습 등에 직접 적용하는 것은 접근성에 무리가 있는 반면 Github를 통해 오픈소스로 완전히 배포되어 있는 KoGPT가 더욱 사용하기 용이하다는 점에서 Kakaobrain의 KoGPT를 Textchat2Prompt 베이스라인으로 선정하게 되었습니다.


      아래 표에서 영어 기반의 모델인 GPT-3와, KoGPT와 HyperCLOVA의 모델 파라미터 수를 비교할 수 있는 그림입니다. 보시다시피 모델 파라미터 수 부분에서 6.16B의 KoGPT는 GPT-3의 6.7B 모델과 성능이 거의 비례할 것으로 여길 수 있습니다.





      [ 인 컨텍스트 러닝 학습을 통한 Textchat2Prompt ]

      저희가 수행하려고 하는 Textchat2Prompt 태스크는 [ 대화형 입력 텍스트 → 자연어 분석 → 프롬프트 형식으로 변환 ]의 형식을 거치면서 정보량을 유지하되 노이즈를 줄이는 식으로 구현하면 되므로,

      인 컨텍스트 러닝을 구현할 때 텍스트 요약, 텍스트 스타일 변환과 유사하게 접근할 수 있었습니다.

      인 컨텍스트 러닝을 통한 Textchat2Prompt의 Few-shot In-context Learning 예시는 다음과 같습니다.

      Few-shot Learning : K-shot data

      입력: 대화형식 그림요청 텍스트문 A

      출력: {(입력에 대한) Desired-style-prompt text[0]}


      입력: 대화형식 그림요청 텍스트문 B

      출력: {(입력에 대한) Desired-style-prompt text[1]}


      …


      입력: 임의의 대화형식 그림요청 텍스트문 C

      출력: {(입력에 대한) Desired-style-prompt text[K]}


      위와 같이 입력 데이터를 직접 desired pair로 구성하여 K개를 in-context learning input으로 만들어 KoGPT의 모델 입력값으로 주어 학습시켰습니다. ( K는 통상적으로 4,8,16,32,64 등 64개 이하를 주로 사용하며 이례적으로 K=0의 경우 Zero-shot Learning, K=1의 경우 One-shot Learning으로 지칭하곤 합니다. )


      Generation based prompt : For prediction

      입력: "그림을 그려주세요. 음 기타를 든 잘생기고 젊은 가수로 부탁하고, 배경은 대학교 축제로 해주세요!"

      출력:


      모델 출력 텍스트:

      일러스트레이션, 대학교 축제, 기타를, 든, 잘생기고, 젊은, 가수, 배경


      아웃풋 예시:

      Example #1 [Test data]

      입력: "그림을 그려주세요. 음 기타를 든 잘생기고 젊은 가수로 부탁하고, 배경은 대학교 축제로 해주세요!"

      출력:


      (output prompt: 일러스트레이션, 대학교 축제, 기타를, 든, 잘생기고, 젊은, 가수, 배경)


      Example #2

      입력: "안녕하세요, 일러스트 그림 그려주세요. 후드티를 입고 고양이 귀를 한 분홍머리 여자, 나이는 16살 정도, 일본 애니메이션 스타일로 부탁드려요.

      출력:


      (output prompt: 일러스트레이션, 후드티, 고양이 귀, 분홍머리, 여자, 16살, 일본 애니메이션 스타일)


      Few-shot data만으로 학습시켜본 테스트 결과에서, 대화 데이터를 통해 텍스트 프롬프트를 만들어 낼 수 있는 가능성을 크게 볼 수 있었습니다.

      이를 추후에 챗봇 데모를 통해 실제 대화형 그림 요청 텍스트를 변환해 본다면 응용 가치가 높아질 것이라 예상하고 있습니다.


      그럼 마지막으로 추석 연휴가 막 지났으니 마무리로 추석 인사도 드릴 겸 사용자 C의 예제에 대한 아웃풋과 함께 이만 글을 마치도록 하겠습니다.

      Example #3

      입력: “그림챗봇아 안녕,추석이기도 하니, 보름달을 배경으로 한 한복입고 세배하는 토끼를 그려 줄 수 있을까?”

      출력:



      KEANU



      References

      [1] KoGPT: https://github.com/kakaobrain/kogpt

      [2] DALL-E: https://github.com/openai/DALL-E

      [3] DALL-E-2:https://cdn.openai.com/papers/dall-e-2.pdf

      [4] HyperCLOVA: https://aclanthology.org/2021.emnlp-main.274/ (EMNLP 21’)

      [5] GPT-3: https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html (NeurIPS 20’)

      [6] GPT-2: https://github.com/openai/gpt-2

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KEANU 님의 최신 블로그

      더보기
      동영상 기고하기