Search
Duplicate

KoGPT2를 사용한 웹툰 줄거리 생성

소속팀
트렌드 리서치 팀
팀명
복숭아녹차

1. 프로젝트 주제

단어만 입력하면 AI가 대신 줄거리를 만들어 줄 수 없을까?
한국콘텐츠진흥원에 따르면, 국내 웹소설 시장 규모는 2020년 기준 6,000억 원에 달합니다. 웹툰 산업 매출액 규모 역시 2020년 약 1조538억 원으로 콘텐츠산업 중 가장 가파른 성장세를 보이고 있습니다. 웹툰과 원작으로 하는 드라마와 영화, 게임 등 2차 콘텐츠의 수요도 커져 웹툰의 상품성은 계속해서 증가하고 있습니다.
AI는 수필, 시 등 다양한 문학작품을 창작하고 있습니다. 우리는 AI 예술창작 분야를 웹툰으로 확장해 새로운 웹툰 줄거리를 생성하는 것이 목표입니다. 새로운 웹툰 창작 활동에 도움을 줄 수 있도록 문장형태의 소재를 제공하고자 합니다.
웹툰 줄거리 데이터를 기반으로 시작 단어 또는 문장 입력 시 웹툰 줄거리를 자동 생성하는 모델을 만들고자 합니다.

2. 데이터

(1) 크롤링

네이버 웹툰에서 연재/완결/도전 웹툰의 줄거리를 크롤링했습니다. 총 4567개의 데이터
모델에는 story에 해당하는 줄거리 데이터만 사용하였습니다.

(2) 전처리

(1) NULL 값과 중복값을 삭제했습니다.
(2) 정규표현식을 사용해 문장부호를 제거했습니다.
def alpha_num(text): return re.sub(r'[^ㄱ-ㅎㅏ-ㅣ가-힣 A-Z a-z 0-9 ]', ' ', text)
Python
복사
(3) 정규표현식을 사용해 1개 이상의 공백을 하나의 공백으로 치환했습니다.
def space(text): return re.sub(r"\s+", " ", text)
Python
복사
전처리 결과는 다음의 cleanstory 열에서 나타나는 것과 같습니다.

3. 모델

(1) 모델 선택이유

GPT는 Transformer 구조를 사용함으로써 넓은 범위에 걸친 언어적 구조와 정보를 학습할 수 있게 하였고 나아가 다양한 과제에 사용할 수 있습니다. 또한 GPT는 사전학습된 모델의 구조를 바꾸는 것을 최소화해 효과적으로 파인튜닝할 수 있어 선택했습니다. 최종적으로 한국어 데이터를 사용해 성능 개선을 하기위해 KoGPT2를 사용했습니다.

(2) GPT-2

Masked Self-Attention을 사용해 타깃 단어 이후의 단어를 보지 않고 예측해야 하므로 타깃단어 뒤의 단어들이 Self Attention에 영향을 주지 않도록 마스킹 처리를 합니다. 따라서 주어진 텍스트의 다음 단어를 잘 예측할 수 있도록 학습된 언어모델이며 문장 생성에 최적화 되어 있습니다.

(3) Pre-Training

대량의 자연어 데이터셋을 언어모델에 학습하는 과정
사전학습 모델로 사용한 KoGPT2는 SKT-AI에서 GPT-2의 한국어성능 한계 개선을 위해 개발한 모델입니다. KoGPT2는 부족한 한국어 성능을 극복하기 위해 40GB 이상의 텍스트로 학습된 한국어 디코더 언어모델입니다.
한국어 위키 백과 이외, 뉴스, 모두의 말뭉치 v1.0, 청와대 국민청원 등의 다양한 데이터가 모델 학습에 사용
tokenizer, CBPE(Character Byte Pair Encoding) 사용
대화에 자주 쓰이는 이모티콘, 이모지등을 추가하여 토큰의 인식 능력을 높임
"skt/kogpt2-base-v2" 의 사전학습 모델과 토크나이저를 사용했습니다.
tokenizer = PreTrainedTokenizerFast.from_pretrained("skt/kogpt2-base-v2", bos_token='</s>', eos_token='</s>', unk_token='<unk>', pad_token='<pad>', mask_token='<mask>') model = AutoModelWithLMHead.from_pretrained("skt/kogpt2-base-v2")
Python
복사

(4) Fine-Tuning

파인 튜닝은 모델의 파라미터를 미세하게 조정하는 과정입니다. 사전학습된 KoGPT2에 태스크에 맞는 웹툰 줄거리 데이터를 추가로 학습시켜 파라미터를 업데이트했습니다.
파인튜닝 하기 전 결과
시작 : 첫사랑
첫사랑을 위해 헌신하는 모든 분들에게 감사드린다"고 말했다. 한편 이날 행사에는 김희정 여성가족부 장관, 박원순 서울시장, 이낙연 국무총리, 홍준표 경남도지사, 이재명 성남시장·김경수 경남지사 등 각계 인사 500여명이 참석했다.</d> 서울중앙지방법원은 지난달 30일 열린 선고공판에서 "피고인은 피해자 유족들로부터 합의금 명목으로 1억원을 받아 가로챘다"며 징역 1년6월에 집행유예 2년, 추징금을 명령했다.
KoGPT2모델 사전학습에 사용된 뉴스 데이터와 같은 형식으로 문장을 생성했습니다. 파인튜닝을 통해 웹툰 줄거리 형식의 문장을 생성하고자 했습니다.

4. 결과

(1) 아쉬운 결과

시작 : 가까운
생성 줄거리 :
가까운 녀석들을 만나고 싶다구요 그럼 우리도 같이 해볼래욧<unk>ᄏ 그치만 좀 도와줘용 진짜 귀여운 고양이들 아니면 저기 있는 거야 난 고양이가 아니거든 왜 자꾸 사람을 마주치는 거지 궁금해 요거 이게
Vocabulary에 단어가 없어서 ‘<unk>’로 표현해야 하는 OOV(Out of Vocabulary) 문제가 발생
자연스럽지 않은 흐름
시작 : 복잡한 관계
생성 줄거리 :
복잡한 관계 속에서 펼쳐지는 그들의 이야기 어느 날 갑자기 나타난 정체불명의 괴물들 때문에 모든 것이 엉망이 되어버린 세상 속 평범한 고등학생들의 성장 드라마 대한민국 명작 만화 리메이크 2 네이버 웹툰 작가들이 들려주는 2015 대학만화 최강자전 수상 작품입니다 한국
“2015 최강자전 수상 작품” 과 같이 줄거리와는 관련 없는 내용이 생성
“어느 날 갑자기 나타난 정체불명의 괴물들” 이라는 내용이 다른 입력 키워드에 대해서도 자주 등장

(2) 성공적인 결과

파인튜닝하기 전 ‘첫사랑’ 결과와 대비되게 웹툰 줄거리 형식의 그럴듯한 줄거리가 생성된 것을 확인할 수 있습니다. 로맨스, 스릴러, 판타지 등 다양한 장르의 웹툰을 볼 수 있고 10년 전, 10년 후라는 시간의 흐름에 맞게 줄거리가 생성되었습니다. ‘은빛 금’ 이라는 말이 안되는 키워드에 대해서도 적절한 줄거리를 만들었습니다. “궁금증을 자아낸다”, “있을 까”, “깨닫게 되는데”와 같이 줄거리 형식에 맞는 흥미를 끌게 만드는 형식의 문장이 생성되었습니다.
시작 : 첫사랑
첫사랑을 하며 살고 있는 민준은 어느 날 갑자기 나타난 수상한 아이와 함께 평범하게 학교생활을 시작한다 그런데 이 아이가 바로 전학생 강찬성 이라는 걸 알고 당황하는데 과연 그의 목적은 무엇일까 궁금증을 자아낸다
시작 : 꽃처럼
생성 줄거리 :
꽃처럼 맑은 눈빛으로 자신을 뽐내는 남자 백아진 과연 그녀는 자신의 마음을 전할 수 있을까요 사랑스러운 외모와 달리 냉철하지만 소심한 성격 때문에 항상 고생하는 민석이의 좌충우돌 성장 스토리
시작 : 10년 후
생성 줄거리 :
10년 후 그는 자신의 과거를 숨기고 자신을 변호할 수 있는 사람을 찾고 있었다 하지만 그 사람은 바로 과거 자신이 저지른 살인 사건에 연루된 사람이었고 결국 그의 손을 들어줬다는 것 이 모든 것은 그가 과거에 저질렀던 범행을 감추기 위한 것이었고 또 다른 범죄도 숨겨야 한다 이제
시작 : 10년 전
생성 줄거리 :
10년 전 사고로 인해 기억을 잃은 주인공 한솔은 우연히 과거의 상처를 치유하고 다시 살아나기 위해 과거로 돌아가고 싶다는 마음을 먹는다고 한다 그런데 이 때 과연 자신의 과거를 극복하고 원래의 삶을 찾을 수 있을까
시작 : 은빛 금
생성 줄거리 :
은빛 금붕어 그리고 인간들의 이야기 어느 날 갑자기 나타난 정체불명의 괴물들 때문에 모든 것이 엉망이 되어버린 세상 속 평범한 고등학생이었던 한별은 우연히 자신의 몸에 갇혀있는 것을 알게 된다 하지만 그 순간부터 자신이 원하는 것은 무엇이든 이룰 수 있다는 사실을 깨닫게 되는데

5. 의의 및 발전 가능성

(1) 의의

AI 창작의 분야를 웹툰으로 확장해 단어만 입력해도 웹툰 줄거리를 생성해주는 모델을 구현했습니다. 웹툰 분야 외에도 동화, 드라마, 영화 줄거리 등으로 확장가능합니다.

(2) 발전 가능성

Seq2GAN 모델을 사용한 웹툰 줄거리 생성 모델
대표적인 비지도 학습 모델인 GAN을 문장 생성에 활용할 수 있습니다. GAN에 Seq2Seq와 강화학습 알고리즘을 적용한 Seq2Gan을 사용해 웹툰 줄거리 생성 모델을 사용해보고 싶습니다.
장르 별 웹툰 줄거리 생성
웹툰 줄거리별 장르 라벨링을 추가해 장르별 웹툰 줄거리 생성으로 확장할 수 있습니다.
데이터 정제 및 하이퍼파라미터 튜닝으로 더 자연스러운 흐름
GPU부족으로 다양한 하이퍼파라미터 튜닝을 시도해보지 못한 것이 아쉽습니다. 또 웹툰 내용 이외의 작가나 홍보 문구 등을 제거하는 등 전처리 과정을 더 구체화해 데이터를 정제한다면 더 매끄러운 흐름의 줄거리 생성할 수 있을 것입니다.