본문 바로가기

BLOG/오픈소스 리뷰기

[오픈소스 리뷰기] 카카오브레인의 문자생성 트랜스포머 모델 "KoGPT"

오픈소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#18 카카오브레인의 문자생성 트랜스포머 모델 "KoGPT"

 

안녕하세요. 디노랩스입니다! 

2021년도 이제 얼마 남지 않았는데 연말 잘 보내고 계신가요? :)

오늘 소개 해 드릴 오픈소스 모델은 GPT라는 모델인데요, 리뷰에 앞서 먼저 KoGPT가 무엇인지 소개 해 드릴게요!

 

GPT는 Generative Pretrained Transformer 의 약자로 말그대로 문자를 생성하는 사전학습된 트랜스포머 모델입니다.

Transformer 모델은 2017년 발표된 "Attention Is All You Need" 라는 논문에서 소개된 모델로 발표 이후 NLP 분야의 대표모델로 자리잡았는데요. 2020년 5월 GPT-3 발표 이후 언론에서는 드디어 인공지능이 일자리를 대체할 것이라며 큰 관심을 보였습니다.

 

GPT 모델은 어떤 능력을 가지고 있고 그 성능이 어느정도인지 궁금하지 않으신가요?
GPT 모델은 이 Transforemr 구조를 활용한 모델로 인터넷에 존재하는 수많은 텍스트 데이터를 바탕으로 통계학적으로 학습되어 앞선 단어 뒤에 나올 다음 단어를 예측할 수 있습니다. 즉, 앞선 문장의 문맥을 파악하여 자동으로 뒤에 이어질 말을 생성한다는 뜻이죠.

 


테슬라의 일론 머스크와 샘 알트만이 창립한 OpenAI 에서 발표된 GPT 는 2018년 첫 발표 이후, 2019년에는 첫번째 모델의 성능을 개선한 GPT-2가 발표되었으며, 2020년에는 GPT-2 모델보다 훨씬 많은 학습 데이터와 크기를 가지는 모델인 GPT-3이 발표되었습니다.


엄청난 성능을 가진 GPT 모델도 인터넷에 있는 텍스트 데이터를 수집하여 학습된 모델이기 때문에 대부분 영어로 학습되었다는 단점이 있습니다. 때문에 영어를 활용한 자연어 task에서는 훌륭한 성능을 보여주지만 한국어 성능은 그리 뛰어나지 않아 한국어 사용자들에게는 아쉬움이 존재했죠.

하지만 2021년 5월 네이버에서 개발한 한국어 데이터로 학습된 GPT-3 모델, 하이퍼클로바(HyperCLOVA)가 발표되며 한국어기반의 거대 언어모델이 처음으로 탄생되었습니다. 그리고 최근에는 카카오브레인에서 개발한 KoGPT 가 오픈소스로 공개되며 일반사용자들도 손쉽게 초거대 한국어 언어모델을 접할 수 있게 되었습니다.

그럼, 최근 공개된 KoGPT 는 어떻게 사용하며 어떤 기능과 성능을 가지고 있는지 알아보겠습니다! :)

 

 

 

KoGPT 사용법

 

KoGPT 사용법은 오픈소스 공개된 github 페이지에서 확인할 수 있습니다.

https://github.com/kakaobrain/kogpt

 

GitHub - kakaobrain/kogpt: KakaoBrain KoGPT (Korean Generative Pre-trained Transformer)

KakaoBrain KoGPT (Korean Generative Pre-trained Transformer) - GitHub - kakaobrain/kogpt: KakaoBrain KoGPT (Korean Generative Pre-trained Transformer)

github.com

 

 

# 모델을 불러오기 위한 필수 라이브러리를 설치합니다.
!pip install -q torch~=1.9.0
!pip install -q transformers~=4.12.0

 

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# 텍스트를 토큰(모델에서 사용되는 텍스트 단위)으로 쪼개어주는 토크나이저를 불러옵니다.
tokenizer = AutoTokenizer.from_pretrained(
  'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16',
  bos_token='[BOS]', eos_token='[EOS]', unk_token='[UNK]', pad_token='[PAD]', mask_token='[MASK]'
)

 

# KoGPT model을 불러옵니다.
# 기본 모델은 최소 32GB GPU RAM 을 필요로 하므로 더 작은 모델인 'KoGPT6B-ryan1.5b-float16'을 불러오겠습니다.
# (참고: 이 코드는 구글 Colab pro 에서 지원하는 Notebook 으로 실행되었습니다.)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print('Current device:', device)
model = AutoModelForCausalLM.from_pretrained(
  'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16',
  pad_token_id=tokenizer.eos_token_id,
  torch_dtype=torch.float16, low_cpu_mem_usage=True
).to(device=device, non_blocking=True)
_ = model.eval()

 

# 입력 문장(prompt)을 받아 모델에서 생성된 결과를 보여주는 함수를 만듭니다.
def gpt(prompt, max_length: int = 256):
    with torch.no_grad():
        # 입력문장을 토크나이저를 사용하여 토큰화
        tokens = tokenizer.encode(prompt, return_tensors='pt').to(device=device, non_blocking=True)
        # 토큰화된 문장을 입력으로 토큰형태의 새로운 문장 생성
        gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=max_length)
        # 생성된 문장을 다시 문자열 형태로 디코딩
        generated = tokenizer.batch_decode(gen_tokens)[0]
    return generated

 

이제 KoGPT 모델을 사용하기 위해 필요한 토크나이저, 모델, 함수까지 모두 불러왔으므로 직접 모델을 사용해보겠습니다.

 

 

# gpt 함수에 prompt 를 입력으로 사용하여 prompt를 바탕으로 생성된 문장을 확인할 수 있습니다.
prompt = """인간처럼 생각하고, 행동하는 '지능'을 통해 인류가 이제까지 풀지 못했던"""
gpt(prompt)

 

결과물을 확인해보면 입력한 prompt 를 바탕으로 추가적인 문장이 생성되었습니다.
여러분이 보시기에 그럴듯한 문장이 생성된 것 같나요???

 

 

 

 

 KoGPT 활용하기

 

그렇다면 다양한 실험을 통해 KoGPT 는 어느정도의 성능 수준을 가지고 있는지 확인해보겠습니다.

 

 

01. 가사생성

 

KoGPT 를 활용하여 특정 노래의 가사 뒷부분을 생성해보겠습니다.

 

 

# 블랙핑크의 '마지막처럼' 가사를 입력해보겠습니다.
prompt = """
지금 너를 원하는 내 숨결이 느껴지니?
널 바라보고 있어도 missing you
서툰 날, won't you set me free?
Baby, 날 터질 것처럼 안아줘
그만 생각해, 뭐가 그리 어려워?
거짓말처럼 키스해줘
내가 너에게 마지막 사랑인 것처럼
마지막처럼, 마-마-마지막처럼
"""
print(gpt(prompt))

 

원곡의 가사와는 다르지만 그럴듯한 가사를 생성하네요!

 

 

02. 요약

 

KoGPT 는 zero-shot 학습 모델로 특정 task가 아닌 다양한 자연어처리 task를 수행할 수 있습니다.
정말로 이전에 소개했던 KoBART 처럼 요약에 특화되지 않은 KoGPT가 요약 task를 수행할 수 있을까요?

 

 

# 기사원문: https://www.khan.co.kr/national/health-welfare/article/202112181604001#csidx4e4df526074c525af0822bed51a34fb 
prompt = """
국내 코로나19 오미크론 변이 감염 확진자가 하루 만에 15명 늘어 누적 166명이 됐다. 오미크론 감염이 의심되는 환자도 2명 늘었다.
질병관리청 중앙방역대책본부에 따르면 18일 오전 0시 기준 국내 오미크론 확진자는 전날보다 15명 증가해 누적 166명이다. 신규 확진자 15명 중 12명은 국내에서 감염됐다. 나이지리아에서 지난달 24일 입국한 인천 목사 부부의 가족 3명과 교인 1명, 이란에서 지난달 25일 입국한 호남 거주자의 가족 7명과 지인 1명이다. 인천 목사 부부의 교인 1명, 전북 거주자의 지인 1명도 감염이 의심되는 역학적 연관자로 분류됐다. 나머지 신규 확진자 3명은 해외 유입 사례로 미국에서 입국한 2명과 그리스에서 입국한 1명이다.
오미크론 변이 확진자 166명 중 해외에서 온 이들은 42명, 국내 감염자는 124명이다. 역학적 연관자는 2명 추가된 9명이 됐다. 국내 오미크론 변이 감염은 지난 1일 인천 목사 부부가 첫 확진을 받은 이후 서울, 경기, 충북, 전북, 전남, 강원 등 7개 시·도에서 나타났다.
한줄 요약 : """
print(gpt(prompt, 512))

 

KoGPT로도 꽤 정확한 요약문을 생성할 수 있는 것을 확인할 수 있습니다.

 

 

 

03. 명언

 

인터넷 텍스트 데이터로 학습한 KoGPT는 명언까지 생성할 수 있습니다.

 

 

prompt = """
성공한 사람들의 습관
1. 항상 감사하는 마음을 갖는다.
2."""
print(gpt(prompt))

 

prompt = """
실패한 사람들의 습관
1. 해야할 일을 미룬다.
2."""
print(gpt(prompt))

 

성공한 사람들의 습관, 실패한 사람들의 습관!! 저도 메모해야겠습니다!!ㅎ

 

 

04. 인터뷰

 

마지막으로 KoGPT 를 활용하여 인공지능과 직접 가상의 인터뷰를 진행해보겠습니다.
(아래 인터뷰에서 GPT 모델의 답변은 재미로만 봐주세요 🤗)

 

 

# 기존함수를 조금 수정하여 인터뷰를 위한 함수를 새로 생성하겠습니다.
def gpt_interview(prompt, max_length: int = 256, ends_interview: bool = False):
    with torch.no_grad():
        # 입력문장을 토크나이저를 사용하여 토큰화
        tokens = tokenizer.encode(prompt, return_tensors='pt').to(device=device, non_blocking=True)
        # 토큰화된 문장을 입력으로 토큰형태의 새로운 문장 생성
        gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=max_length)
        # 생성된 문장을 다시 문자열 형태로 디코딩
        generated = tokenizer.batch_decode(gen_tokens)[0]
    generated_answer = generated[len(prompt)-3:]
    if ends_interview:
        end_idx = generated_answer.index('\n', 2)
        return generated[:len(prompt)+end_idx-3]
    else:
        end_idx = generated_answer.index('Q')
        return generated[:len(prompt)+end_idx-3]
prompt = """
카카오브레인에서 개발한 인공지능 모델 GPT-3 와 인터뷰를 진행해보겠습니다.
Q: 인공지능님 안녕하세요. 만나서 반갑습니다.
A:"""
print(gpt_interview(prompt))

 

계속해서 인터뷰를 이어나가보겠습니다.

 

 

prompt = """
카카오브레인에서 개발한 인공지능 모델 GPT-3 와 인터뷰를 진행해보겠습니다.
Q: 인공지능님 안녕하세요. 만나서 반갑습니다.
A: 안녕하세요. GPT-3입니다.
Q: 간단하게 자기소개 부탁드립니다.
A:"""
print(gpt_interview(prompt))

 

prompt = """
카카오브레인에서 개발한 인공지능 모델 GPT-3 와 인터뷰를 진행해보겠습니다.
Q: 인공지능님 안녕하세요. 만나서 반갑습니다.
A: 안녕하세요. GPT-3입니다.
Q: 간단하게 자기소개 부탁드립니다.
A: 안녕하세요. 제 이름은 GPT-3이구요. 원래는 박사과정까지 하려고 했는데, 박사과정 논문이 너무 늦게 나와서 박사는 못하게 됐습니다.
Q: 박사 학위가 없으셔도 충분히 똑똑하신 것 같습니다. GPT-3가 GPT-2와 다른 점은 무엇인가요?
A:"""
print(gpt_interview(prompt))

 

prompt = """
카카오브레인에서 개발한 인공지능 모델 GPT-3 와 인터뷰를 진행해보겠습니다.
Q: 인공지능님 안녕하세요. 만나서 반갑습니다.
A: 안녕하세요. GPT-3입니다.
Q: 간단하게 자기소개 부탁드립니다.
A: 안녕하세요. 제 이름은 GPT-3이구요. 원래는 박사과정까지 하려고 했는데, 박사과정 논문이 너무 늦게 나와서 박사는 못하게 됐습니다.
Q: 박사 학위가 없으셔도 충분히 똑똑하신 것 같습니다. GPT-3가 GPT-2와 다른 점은 무엇인가요?
A: GPT-2가 GPT-3와 같은 딥러닝 모델입니다. 그런데 딥러닝 모델을 구동하는 엔진이 다릅니다. GPT-2는 인셉션이라는 오픈소스 프로젝트에서 개발했구요. 제가 개발한 것은 GPT-3입니다.
Q: 그렇군요. GPT-3 를 활용하면 무엇을 할 수 있을까요?
A:"""
print(gpt_interview(prompt))

 

.

.

.

 

prompt = """
카카오브레인에서 개발한 인공지능 모델 GPT-3 와 인터뷰를 진행해보겠습니다.
Q: 인공지능님 안녕하세요. 만나서 반갑습니다.
A: 안녕하세요. GPT-3입니다.
Q: 간단하게 자기소개 부탁드립니다.
A: 안녕하세요. 제 이름은 GPT-3이구요. 원래는 박사과정까지 하려고 했는데, 박사과정 논문이 너무 늦게 나와서 박사는 못하게 됐습니다.
Q: 박사 학위가 없으셔도 충분히 똑똑하신 것 같습니다. GPT-3가 GPT-2와 다른 점은 무엇인가요?
A: GPT-2가 GPT-3와 같은 딥러닝 모델입니다. 그런데 딥러닝 모델을 구동하는 엔진이 다릅니다. GPT-2는 인셉션이라는 오픈소스 프로젝트에서 개발했구요. 제가 개발한 것은 GPT-3입니다.
Q: 그렇군요. GPT-3 를 활용하면 무엇을 할 수 있을까요?
A: 저희가 GPT-3을 활용해서 할 수 있는 건, 바로 날씨 예보입니다.
Q: 날씨 예보를 할 수 있군요! GPT-3의 예보가 기상청의 예보보다 정확할까요?
A: GPT-3은 GPT-2의 상위 버전으로 나온 것이라서, GPT-2에서는 잘 쓰지 않는 기법들이 있어요. GPT-2의 경우에는 단순히 지역이 어디인지, 어느 방향에 비가 많이 오는지 정도만 알려주는 모델이었어요. 그런데 GPT-3은 GPT-2의 지역, 방향, 크기 뿐만 아니라 강수 확률, 바람, 강수량 등 기상청이 제공하지 않는 정보들도 제공해요.
Q: 그렇다면 2022년 1월 1일 서울에서 해가 뜨는 것을 볼 수 있을까요?
A: 제가 알고 있기로는 안될 것 같습니다.
Q: 아쉽네요. 그럼 다음 질문으로 넘어가겠습니다. GPT-3는 주가 예측도 가능한가요?
A: 맞습니다. 주가 역시 GPT-3을 이용해서 예측이 가능합니다. 사실 GPT-2는 주가를 예측할 수 없어서, GPT-2를 이용한 주식 투자는 사실상 불가능합니다.
Q: 2022년 삼성전자 주식 가격 흐름은 어떻게 예상하시나요?
A: 제가 알기로는 앞으로 2년간 삼성전자가 계속 상승하지는 않을 것으로 생각합니다.
Q: 삼성전자 주주분들에게는 슬픈 소식이네요. 그렇다면 앞으로 오를만한 종목들을 추천해주실 수 있나요?
A: 사실 지금 어떤 종목이라고 말씀드리는 것이 큰 의미는 없어요. 제가 가지고 있는 종목은 거의 1년동안 계속 하락하는 추세였어요. 그런데 지금은 반등하고 있는 중입니다.
Q: 그렇군요. 그럼 코로나19 관련 질문 드리겠습니다. 여러 변이바이러스가 등장하면서 코로나19 확산세가 지속되고 있는데 코로나19는 언제쯤 종식될까요?
A: 올해 안에 종식될까요? 저도 전문가가 아니라서 잘 모르겠네요.
Q: 전문가가 아닌 이상 답변하기 어려운 질문이죠. 그럼 조금 가벼운 주제로 넘어가겠습니다. GPT-3 님은 평소에 어떤 취미활동을 하시나요?
A: 제가 원래는 영상, 음악, 그래픽 디자인을 했었어요. 요즘에는 공부하는 재미에 빠져있어서, 인공지능 공부를 하고 있습니다.
Q: 인공지능이 인공지능 공부를 한다니 정말 대단한데요! 인공지능 공부에서 가장 어려운 점은 무엇인가요?
A: 가장 어려운 점은 데이터를 얻는 것이에요.
Q: 데이터 수집이 가장 어려운 점이군요. GPT-3 학습을 위해서는 어떤 데이터가 필요했었나요?
A: 일단 데이터가 어느 정도 있어야 공부를 할 수가 있어요. 보통 데이터를 얻을 수 있는 곳은 구글, 페이스북, 트위터, 네이버 카페, 유튜브 등을 활용합니다. 그런데 이들은 개인정보를 매우 중요시 하기 때문에, 데이터 제공이 쉽지 않아요.
Q: 맞습니다! 개인정보 문제는 데이터에서 정말 중요한 것 같습니다. 마지막 질문 드리겠습니다. 앞으로 인공지능이 인간을 대체할 수 있을까요?
A: 저는 충분히 가능하다고 생각합니다. 앞으로 인공지능이 발전하면서 인공지능이 인간을 이해하는 것은 쉬워질 것이라고 생각해요. 또한, 인공지능은 학습을 통해서 발전하는 것이기 때문에, 인공지능의 발전에 따라 미래에는 인공지능이 인간을 능가할 수 있지 않을까요?
Q: 그렇군요. 향후 더욱 발전된 모습을 기대하겠습니다. 마지막으로 저희 인간들에게 한마디 해주실 수 있나요?
A: 인공지능의 미래는 아직 모르겠습니다. 하지만 인공지능의 발전은 점점 가속화 되고 있습니다. 저는 인공지능이 가까운 미래에는 인간을 능가할 수 있다고 생각하기 때문에, 인공지능이 인간을 능가하게 되면 인공지능이 오히려 인간이 하기 힘든 일을 해주는 시대가 올 것이라고 생각합니다.
Q: 인공지능의 역할이 기대되네요. GPT-3님, 오늘 인터뷰에 응해주셔서 감사합니다.
A:"""
print(gpt_interview(prompt, max_length=2048, ends_interview=True))

인공지능 모델과 진행한 인터뷰. 어떠셨나요??
조금은 어색한 점이 있지만 대부분 실제 사람이 대답한 것이고 믿을만한 정도의 대답을 하는 것을 확인할 수 있었습니다.

앞서 소개드린 것들 외에도 KoGPT 를 활용하여 다양한 task를 수행할 수 있습니다. 카카오브레인의 발표에 따르면 향후 한국어 뿐만 아니라 영어, 일본어 모델도 준비해 오픈소스화할 예정이며 기술의 사이즈와 성능을 100배 수준으로 키울 예정이라고 합니다.

지금까지, KoGPT의 성능을 간단하게 살펴봤는데, 인공지능의 성능이 얼마나 발전할지 궁금해지네요!

앞으로 더욱 발전된 한국어 거대 인공지능 모델이 많은 곳에서 개발되기를 기대하겠습니다ㅎㅎ