ABOUT ME

about

Today
21
Yesterday
378
Total
83,164
  • AI x Bookathon|인공지능을 [수필 쓰는 작가]로 학습시켜보자!
    Side Projects/인공지능과 함께 글쓰기 2019. 11. 25. 01:24

    #인공지능 #북커톤 #성균관대학교 #Bookathon #AIBookathon #수필생성모델 #언어모델 #GPT2 #딥러닝 #Transfer Learning

     

     

     

     

     

     

     


    인공지능과 함께 글쓰기! 창의 AI x Bookathon 대회 in SKKU

    지난 11월 21-22일, 무박 2일동안 성균관대학교에서 AI x Bookathon 대회가 열렸습니다. 와!!! 👏🏼👏🏼👏🏼

     

    본 대회는 학교에서도 처음으로 열게 된 대회였는데요!! 인공지능을 개발하는 기업 마인즈랩과 협약을 맺고 주최했다고 합니다.

    대회 내용은 지난 2월 OpenAI에서 발표한 GPT-2 모델을 학습시켜셔 하나의 수필 작품을 완성해내는 것이었습니다. 

     

    GPT-2 원래 모델은 당연히 영어 기반으로 학습된 모델이었겠죠!

    이 모델을 한국어에 적용시키기 위해 한글 뉴스기사 약 40GB로 학습시킨 사전학습 모델, 그리고 거대한 모델을 학습시키는 데에 필요한 Nvidia의 V100 GPU를 마인즈랩 측에서 제공해주었습니다. (V100이라닛!!! 🤭)

     

    대회에는 명륜캠퍼스와 율전캠퍼스에서 참여한 다양한 전공 배경의 학생들이 참가하였습니다. 학부생 및 대학원생까지 총 11팀이 참가해서! 약 25시간동안 쉬지 않고 열심히 달린 대회였어요. 💪🏼

     

     

     

     

     

    저도 인공지능 꿈나무로써! 두 명의 친구들과 함께 팀을 꾸려 대회를 참가했습니다.

     

    그 결과.. ❗️대상 ❗️이라는 큰 상을 받아 왔어요....😭🎊🎉 (ELC39 최고) (저번에 제게 DEVIEW 표를 줬던 친구도 함께입니다 엉엉)

     

    기술적으로 많이 고민하고 접근했던 다른 팀들도 있었기에 그 중에서 1등을 할 수 있을까 싶은 마음이 있었는데, 생각했던 것보다 좋은 상을 받게 되어서 얼떨떨하기도 하고.. 너무 좋기도 하고.. 그래서 대회를 어떻게 진행했는지, 그리고 어떤 부분이 강점으로 어필되었다고 생각하는지 등의 부분에 중점을 두고 정리해보려고 합니다. 역시 기록만이 남는 것이니까요...!! 😆

     

     

    대회의 마지막에 프레젠테이션 했던 내용을 중심으로, 전체적인 대회 진행 과정을 풀어서 이야기해보도록 하겠습니다. 그럼 출발~!!~!

    (대회에서 발표했던 발표자료는 이 곳 에서 보실 수 있습니다!)

     

     

     

     

     


    Contents

    1. 프로젝트의 시작, 모델에 대한 이해와 전략

    2. 데이터 품질을 끌어올려보자! 데이터 수집, 그리고 전처리

    3. 그럼에도 불구하고! 더 좋은 학습을 위해

    4. 프로젝트의 끝, 우리가 아닌 AI가 쓴 글

     

     

     

     


     

    1. 프로젝트의 시작, 모델에 대한 이해와 전략

    대회에 대한 전체 내용은 대회로부터 약 일주일 전에 있었던 사전 교육에서 처음 듣게 되었습니다.

    그 전에는 인공지능을 이용해서 글을 쓰는 대회를 한다고 한다.. 정도의 러프한 내용만 알고서 대회 참가 신청을 했기 때문에, 자세하게 무슨 모델을 사용하는지, 대회의 구체적인 목표는 무엇인지 등을 알지 못했어요. 

     

    사전교육에서 처음으로 GPT-2 모델을 활용할 것이라는 내용을 전달받았고, 그와 함께 GPT-2 모델, 그리고 모델을 training 또는 inference 하는 몇 가지 코드를 받게 되었습니다.

     

    저희 팀은 개발을 공부하는 친구 둘과 딥러닝을 공부하는 저, 이렇게 셋으로 구성이 되어있었는데 저 또한 이미지 생성 모델을 다뤄본 경험은 있지만 자연어 모델을 직접적으로 다루는 것은 처음이었습니다. 그렇기에 프로젝트의 첫 시작은 GPT-2 모델에 대해 공부하는 것부터였습니다. 팀원 모두와 함께 GPT에 대해 자료조사를 해보고, 모델을 어떻게 활용할 수 있을지에 대해 공부하기 시작했어요.

     

    특히 자료조사를 하면서 새로 알게 된 내용에 대해서는 팀원 모두가 같은 이해도를 가지고 나아가기 위해서, Notion을 활용해 실시간으로 빠르게 공유를 하면서 진행했습니다. 

     

     

    GPT의 구조를 이해하기 위해 notion에 글을 공유하며 진행

     

     

    모델에 대한 이론적이고 수식적인 모든 내용들을 충분히 숙지할 수 있다면 더 좋았겠지만, 대회의 성격이 무엇보다 오랫동안 진행되는 것이 아니라 일주일이 채 안되는 사전 준비 시간과 함께 무박 이일로 짧고 굵게 진행되는 것이었기 때문에 저희도 빠르게 훑으며 이해하는 방식을 취했습니다. 

     

    특히, 대회 전에는 다른 것보다 제공받은 코드를 최대한 이해하는 것에 가장 많은 시간을 썼던 것 같습니다. 아무리 이론에 대한 지식이 많다고 해도 제공받은 코드, 그리고 대회에서 직접 사용할 코드에 대한 이해도가 부족하다면 대회 당일에 많은 브레이크가 걸릴 것이기 때문입니다. 모든 코드는 같은 라이브러리를 쓰더라도 작성자에 따라 구조가 다르니까요..! (클린코드는 안그런가요,, 궁금,,)

     

    그래서 다음과 같이 코드의 구조를 파악하면서, 저 디렉토리 내부에 있는 개별 코드들까지 모두 익히는 데에 대회 준비 시간을 거의 썼습니다.

     

     

    코드 구조를 확인하며 기록

     

     

     

    이 중 가장 까다로우면서도 새롭게 배우게 된 것 중 하나는 데이터가 저장된 포맷인 hdf5 형식이었습니다.

     

    hdf5 파일 형식은 대규모의 데이터를 효과적으로 저장 및 사용할 수 있는 포맷으로, 저는 이번 대회를 진행하면서 처음 접했는데 사용법을 익히는데 많은 시간이 들었습니다. 만약 데이터까지 다루면서 샘플 코드를 사용해보지 않았더라면 이 데이터 형식을 사용한다는 것을 몰랐을 것이고, 그 상태로 대회에 들어갔다면 다른 결과가 나왔을 수도 있을 것 같습니다.. !

     

    처음에는 hdf5 파일이 판다스와 쉽게 호환이 될 거라고 생각해서 판다스 포맷으로 변환해서 사용하려고 했는데, 잘 안돼서 조금 더 알아보니 데이터를 폴더 형식으로 하위 폴더 / 상위 폴더 개념으로 정리해두는 형식이더라구요. (hdf5에서는 이 폴더 개념을 group이라고 합니다.)

     

    파이썬에서 hdf5 파일을 다룰 때는 dictionary 자료형처럼 key로 접근을 하는데, 이 key가 바로 폴더의 이름과 같은 역할을 합니다. 

    다음과 같이 파이썬에서는 h5py라는 패키지를 활용해 hdf5 파일을 저장하거나 사용할 수 있습니다. 

     

     

    h5py 라이브러리 사용 ("data"라는 group생성 후 "crawled_data"라는 이름의 dataset생성)

     

     

    더 자세한 hdf5 파일에 대한 개념과 파이썬 코드는 제가 많이 도움받았던 이 곳 을 참고하세요! :)

     

     

     

    아무튼, 이렇게 모델과 데이터, 그리고 코드를 이해하면서 대회의 큰 골자를 이해해보자면 다음과 같습니다. 

     

     

    대회에서 사용되는 딥러닝 모델에 적용할 2-step Training

     

    앗, 어디서 본 것 같은데.. 😆

    이전에 제 블로그에 포스팅했던, 바로 제가 이전에 진행했던 내 손글씨를 따라쓰는 인공지능 프로젝트와 큰 줄기가 많이 닮아있습니다. 

    바로 대용량 데이터로 학습된 사전학습모델을 이용해서, 적은 양의 데이터로 Transfer Learning 시킨다는 점이요! 

     

    이전에 Transfer Learning로 프로젝트를 진행하며 배운 것을 토대로, 이 프로젝트의 큰 줄기를 이해하고나서는 "아, 엄청난 대용량의 데이터로 학습된 모델은 이미 제공받았으니 Transfer Learning 과정을 잘 진행하는 것이 핵심일 것"이고, 그 과정에서는 "소량의 데이터만으로도 학습을 시킬 수 있겠다!" 는 아이디어가 떠올랐습니다. (이전에 진행했던 손글씨 프로젝트의 목표가 Transfer Learning에서 소량의 손글씨 데이터만으로 학습시키는 것이었죠!)

     

    그래서 대회의 전략을 "소량의 데이터를 사용하되, 데이터의 품질을 올리는 것이 중점" 이라고 설정했습니다.

     

     

    한 가지 비유를 덧붙여보자면, Backbone이라고도 하는 사전학습모델은 마치 정교하게 잘 쌓여진 건축물과 같다고 할 수 있습니다. 많은 연구와 실험, 그리고 실패를 통해 그 구조의 유효성이 검증된 모델이죠. 이미지를 다루는 CNN 계열에서 가장 많이 쓰이는 백본 모델의 예로는 VGG, ResNet 등이 있습니다.

     

    이러한 백본 모델을 "정교하게 잘 짜여져 있지만 아직 색이 안입혀진 무채색의 건축물"이라고 한다면, Transfer Learning은 "그 건축물 위에 원하는 색을 입히는 작업"이라고 할 수 있을 것 같습니다. 대용량의 데이터로 가중치들이 정교하게 학습이 되어있는 Pre-Trained 모델이 있다면, 거기에서 Fine Tuning (미세한 튜닝)을 통해 원하는 방향으로 살짝만 틀어보는 것이죠. (ex. 뉴스기사 문체에서 수필 문체로!)

     

    따라서 이미 잘 학습된 백본 모델의 성능을 더 올린다거나 그 구조를 바꿔보는 것은 그만큼 많은 시간과 노력이 필요합니다. (이걸 많은 대단한 연구자분들이 해내고 계시죠..) 하지만, 이번 대회는 앞서 설명했듯 긴 시간이 주어지면서 기술적 또는 이론적으로 많은 연구를 진행해야 하는 성격의 대회가 아니었기 때문에!

    이미 잘 학습된 Pre-trained 된 모델은 최소한으로 다루면서, Transfer Learning 단계에서 최대한으로 결과물의 품질을 끌어올린 것이 이번 대회에서 좋은 성적을 거둘 수 있었던 가장 큰 포인트였다고 생각합니다. 

     

     

    실제로 마지막 프레젠테이션 때 심사위원이셨던 교수님께서 "이 팀은 사전학습모델에 대해서는 기술적으로 다룬 부분이 없는 것인가?" 라고 질문을 주셨는데, 제가 "이번 대회는 짧은 시간 내에 정해진 포맷의 완성작을 제출해야 했기 때문에 사전학습모델을 건드리기보다는, 데이터의 품질을 최대한 끌어올리며 작품의 퀄리티를 높이는 것을 가장 중점으로 두었습니다." 라고 솔직히 대답했고, 대답을 들으신 후에는 이 부분이 전략적으로 잘 접근한 것이라 할 수 있다고 말해주셨습니다.

     

    하지만 실제로 이론적인 부분을 충분히 못 다룬 부분에 대해서는.. 아쉬움이 남기도 하네요. 이번 대회에서 처음으로 언어모델을 제대로 다뤄보았는데, 언어모델과 자연어에 대해서는 앞으로 꼭 더 깊게 공부해보고 싶다는 마음도 생겼습니다 😆

     

     

    그러면, 이제 프로젝트를 이해했으니 데이터를 수집하러 가보시죠!! 🧚🏼‍♀️

     

     

     

     

    2. 데이터 품질을 끌어올려보자! 데이터 수집, 그리고 전처리

    "데이터의 품질을 최대한으로 끌어올린다"라는 전략 하에, 저희의 데이터 수집은 웹사이트 크롤링으로 진행되었습니다. 

     

    먼저 데이터를 수집할 사이트를 검색해서 리스트업을 한 후, 선정된 사이트에 대해 파이썬의 scrapy 라이브러리로 크롤링을 돌려서 수집이 되는지 확인해보는 것까지 진행을 하고 대회에 들어갔습니다. hdf5 포맷을 다루는 방법을 익히는 데에 시간이 많이 걸려서 대회 시작 직전에야 txt 형식의 데이터를 hdf5 형식으로 변환하는 것을 성공했고, 대회 시작을 하고 나서 처음으로 저희가 수집한 데이터로 직접 학습을 시켜보았습니다. (대회 진행과정에서 hdf5 파일 형식을 다루는 것에 대해 많은 팀들이 어려움을 겪으시더라구요. 이것만 조금 쉬웠어도 다들 더 잘했을텐데.. 😭)

     

    위에서 팀원 모두와 함께 사용했던 Notion을 계속 이용하면서, 수집 사이트에 대한 리스트와 수집 현황을 실시간으로 공유하였습니다.

     

     

    크롤링할 사이트 공유 내용

     

     

    데이터 크롤링은 주로 scrapy, 또는 selemium을 이용해서 진행하였습니다. 

    전체 코드는 이 곳 에서 확인하실 수 있습니다.

     

     

    scrapy를 활용한 크롤링 코드의 일부

     

     

    크롤링을 하면서 주안점을 두었던 것은, 이전에도 계속 언급하였듯이 데이터의 양보다 품질이었습니다. 우리가 최종적으로 생성하고 싶은 "수필"이라는 성격을 띄는 글 데이터를 수집하는 것에 신경을 많이 썼고, 다량의 데이터를 수집하면서 원하지 않는 데이터가 최대한 들어오지 않도록 노력하였습니다.

     

    특히, 글 목록 중 "공지"글이나 "필독" 등의 수필이 아닌 글이 많이 있었기에, 이 부분은 일괄적으로 제거를 하였고, 점과 반점 등의 기본적인 기호를 제외한 특수문자는 모두 제거하는 간단한 전처리를 진행하였습니다. 

     

     

    정규표현식을 이용한 간단한 텍스트 전처리

     

     

    데이터 수집 초기에는 그래도 데이터가 조금 더 있으면 좋지 않을까, 하는 생각에 수필과 소설 데이터를 최대한 끌어모아서 약 70MB의 데이터를 수집했지만, 소설 데이터에는 대화체가 너무 많거나, 또는 좀 더 가벼운 문체가 있는 경우가 많았습니다. 그래서 주기적으로 생성 결과물의 품질을 확인하며, 추후에는 수집되었던 모든 소설, 또는 원하지 않는 스타일의 수필 등을 전부 직접 눈으로 확인하며 데이터를 전체적으로 정제하는 작업을 거쳤습니다.

    ( 결국 마지막에는 이 과정이 학습 품질을 최대한 끌어올린 포인트였다고 생각합니다! 역시 데이터는 직접 확인하는게 최.고.)

     

    모든 데이터 정제를 거친 후 최종적으로는 약 5MB의 적지만 질 좋은 데이터를 모아 최종 학습 데이터로 선정하였습니다.

     

     

    수집된 텍스트 데이터는 모델과 함께 제공받았던 tokenizer 객체를 이용해서 토크나이징을 한 후 hdf5 파일로 변환해 저장하였습니다.

    텍스트 데이터의 토크나이징이란, 일정 단위로 사람이 쓰는 자연어를 쪼개는 것을 말합니다. 대회에서는 Mecab 기반의 tokenizer를 사용하였는데, 데이터 전처리를 진행하면 다음과 같이 형태소 단위로 쪼개지게 됩니다. 

     

     

    자연어를 토큰으로 쪼개는 tokenizing 과정

     

     

    "나는" 이라는 짧은 단어도 "나", 그리고 "##는" 이라는 두 형태소로 쪼개지는데, 여기서 ## 표기는 해당 #이 표시된 위치에 다양한 단어가 올 수 있다는 것을 뜻합니다. 한국어에서는 주로 형용사, 조사 또는 접미사 등에 붙게 됩니다. 

     

    이렇게 토크나이징까지 모두 거친 후 각 토큰에 대한 id를 부여해 숫자 데이터로 변환하고 나면 모델에 입력될 수 있는 array 형태로의 변환이 끝나게 됩니다. 여기까지 전처리를 진행한 한 후 hdf5 파일 형식으로 모델에 바로 입력할 수 있도록 저장하였습니다.

     

    그러면 이렇게 저장된 데이터로 학습시킨 결과는 어떨까요?! 바로 보러 가시죠!! 🍒

     

     

     

     

    3. 그럼에도 불구하고! 더 좋은 학습을 위해

    지금까지 잘 정제되고, 전처리 된 데이터를 준비해보았는데!! 데이터의 품질은 실제로 결과물의 품질에 얼마나 영향을 미칠까요?

     

    앞서 말씀드렸듯, 사전학습모델은 이미 정교하게 잘 학습되어 있는 모델입니다.

    (물론 그렇다고 모든 사전학습모델이 완벽하다는 것은 아닙니다! 실제로 Transfer Learning의 최종 결과물은 사전학습모델의 성능에 가장 큰 영향을 받습니다. 즉, 할 수 있다면 사전학습모델의 성능을 최대한 끌어올리는 것이 결과물 품질을 올리는 데에 가장 효과적이지만, 현실적으로 이 방법이 어렵다면 - 사전학습모델에 대한 연구가 이미 많이 이루어져서 어떻게 성능을 올려야 할지 모르겠다거나, 또는 그에 대한 연구를 할 시간이 없다면요! - Transfer Learning을 하는 데이터의 품질을 올리는 것이 그 다음의 차선책이라는 것이죠!)

     

    지금 이 프로젝트에서는 시간상의 한계로 Transfer Learning의 데이터 품질을 끌어올리는 전략을 취했었습니다. 그리고 데이터의 양 또한 비교적 적어도 잘 학습이 될 것이라고 기대했죠! 그렇다면, 실제로 데이터의 품질이 학습 결과물의 품질에 영향을 준 것이 맞을까요? 이것에 대한 확인을 먼저 진행해보도록 하겠습니다. 정제되지 않은 데이터로 학습시켜본 결과를 먼저 확인해보시죠. 

     

    GPT 모델은 기본적으로 어떠한 context를 입력받으면, 그 뒤에 이어질 문장을 생성해내는 모델입니다. 따라서, 먼저 대회에서 제공받은 대량의 뉴스기사로 학습된 기본 사전학습 모델과, 정제되지 않은 데이터로 5000step을 학습한 모델, 두 가지 모델에 같은 문장을 입력하면 그에 대한 결과물이 어떻게 다르게 나오는지 각각의 결과물을 비교해보겠습니다. 

     

     

    # 사전학습모델과 정제 안 된 데이터로 5000step 학습된 모델에 같은 문장으로 입력될 context

    • "나는 어려서부터 노래를 좋아했다. 설거지를 하거나 청소를 하며 흥얼흥얼 노래를 하면 시간이 빨리 간다." 문장을 입력하면?

     

     

    1) 뉴스기사로 학습된 Pre-Trained 모델

    • "...한다" 며 "...하다" 등의 문체로, 기사의 문체가 남아있음

     

     

    2) 정제 안 된 데이터로 5000step을 학습한 모델

    • 짧게 학습했을 뿐인데, 문체가 바로 수필과 비슷한 문체로 바뀌었음

     

     

    둘을 비교해보면, 적은 데이터로 5000step 정도만 학습해도 바로 수필의 문체가 나오는 것을 확인할 수 있습니다.

    사전학습모델이 약 4000만 step을 학습한 모델이라는 점을 생각하면 놀라운 결과이지 않나요??

     

     

    하지만! 아직 기뻐하긴 이릅니다. 어느정도 문체가 바뀐 것 같기는 하지만, 아직까지는 부족한 부분이 많거든요.

    결과물 샘플을 조금 더 찍어보면 다음과 같은 결과물들이 나오기도 합니다.

     

     

    학습초기의 불안정한 결과 sample

     

     

    아직까지는 안정적인 결과물을 내지 못하는 모습이죠. 이러한 한계점들이 있은 후 저희 팀은 결과물 품질을 올리기 위해서는 데이터의 품질을 더 좋게 만들어야 한다고 생각하였습니다. 그래서 소설 데이터를 제거하고, 눈으로 직접 모든 데이터들을 확인하며 원하는 품질의 데이터로 깔끔하게 정제했죠. 

     

    그렇게 심혈을 기울여 정제한 데이터로 학습시킨 모델의 최종 결과물은..! 

     

     

    3) 데이터를 정제한 후 35,000step 학습시킨 모델

    • "나는 어려서부터 노래를 좋아했다. 설거지를 하거나 청소를 하며 흥얼흥얼 노래를 하면 시간이 빨리 간다." 를 입력

     

    오!! 위에서 봤던 불안정한 모델의 결과보다 훨씬 말이 되는 결과물을 내놓지 않나요?

    "평범한 일상생활을 하는 내게 있어 노래하는 시간은 보너스처럼 느껴질 때다." 라니.. 똑똑한걸 AI.. 😆

     

     

    잘 생성된 샘플 중 인상깊었던 것을 하나 더 가져와보겠습니다. 바로 알파스님의 말씀이죠!! 

     

     

    "그러한"을 입력한 후 AI가 만들어낸 한 문단.. 알파스님의 말씀이시다..

     

    개인적으로 가장 마음에 드는 문당은 "깨닫게 하는 것이 깨달음이다.. 진리라는 것은 어디에건 다 있다.. " 부분입니다. 😂

    더 재미있는 것은, 이건 학습 중간중간 학습 상태를 확인하기 위해 랜덤으로 생성하던 샘플 중 하나라서 입력값이 한 문장이 아니라, 맨 앞의 "그러한" 세 글자 뿐이었다는 사실입니다.

    이 모델은 그러한 깨달음 속에서 나는 스님이 ... 이런 식으로 한 단어씩 어울리는 단어를 뱉어내며 위의 문단을 완성해내었습니다. 대단하지 않나요?!

     

     

    마지막으로 학습과정에 있었던 개선점을 한 가지 더 보여드리고 마무리하도록 하겠습니다!

    바로 학습을 하던 중 갑자기 발산해버린 상황이 있었는데요, 모델이 학습을 잘 하다가 다음과 같이 [PAD] (공백) 만 내뿜으며 발산해버렸습니다.

     

     

    바로 위 샘플까지는 잘 생성하다가, 갑자기 [PAD] 만 생성하며 발산한 모습

     

    이런 경우에는 보통 learning rate를 많이 떠올리게 됩니다. 저번 손글씨 프로젝트를 진행했을 때도 어느 순간부터 학습이 안되며 매번 같은 이미지만 생성했던 상황이 있었습니다. 

     

    따라서 이 상황에 대해서는 learning rate를 학습 step 단계별로 순차적으로 decay(감쇠)를 해줌으로써 해결할 수 있었습니다. 

     

     

    step 별로 learning rate를 1/2씩 감소시키다가 0.00002값부터는 유지

     

    혹시 딥러닝 모델을 학습시키다가 한 가지 결과값만 나오면서 발산해버리는 경우에는, learning rate decay를 시도해보세요! 👍

     

     

    여기까지 모델 학습과 개선에 대한 내용을 다루어보았습니다. 이제 마지막 단계로 가시죠!

     

     

     

     

    4. 프로젝트의 끝, 우리가 아닌 AI가 쓴 글

    지금까지 많은 과정을 거쳐 저희가 진행했던 프로젝트에 대해 이야기해 보았습니다.

    그럼 이제 드디어 저희의 완성작을 한 번 확인해볼까요.. 두근두근!

     

    저희가 작품을 완성시킨 방식은 최대한 AI 모델이 주도적으로 작성하도록 하는 것이었습니다. 프로 휴먼 수필러가 작성한만큼의 완성도는 안되어도..(..) 노력하는 신인작가 정도의 레벨이 되는 우리 모델이 직접 처음부터 끝까지 완성할 수 있도록요! 😂

     

    대회의 주제어는 바로 "만약 - IF" 이었습니다. 그래서! 저희는 과감하게 맨 처음에 모델에 "만약" 두 글자를 입력했습니다. 그렇게 뱉어낸 문장들 중 마지막 문장을 다시 문장에 넣고, 또 마지막 문장을 넣고.. 하면서 전체 글을 완성해나갔습니다. 

    즉, 저희는 모델을 팔로잉만 하는 형태로, 글의 모든 소재와 흐름은 모델이 결정하도록 한 것이죠. 실제로 작품의 완성까지 그렇게 진행을 했고, 마지막에 저희가 수정한 내역은 "불필요한 부분을 삭제하기", 또는 "오탈자 또는 간단한 문법적인 부분을 수정하기" 등, 퇴고를 하는 느낌으로 진행하였습니다. 결국 전체적인 글은 모두 모델이 작성하고, 저희는 살짝 잡아주는 역할만 한 것이죠!

     

    사실 글을 자세하게 보면 어순 또는 서술관계가 조금 어색한 문장들이 있기도 하지만, AI가 온전히 작성한 부분들을 최대한 남기기 위해 더 많이 건드리지 않은 부분들이 있기도 합니다.

     

    그래서 그렇게 완성된 결과물은 어떻게 나왔을까요? 저희도 예상치 못한 스토리가 전개되었습니다. 

     

    글이 완성되고 보니, 글의 주제는

     

    " 인생의 끝자락에서, 과거를 회상하며 여러가지 만약 떠올리는 노인의 회고록 "

     

    이 되었더라구요. 전체적인 이야기의 흐름은 다음과 같습니다. 

     

     

    AI 모델이 완성한 작품의 전체 줄거리

     

     

    신기하지 않나요?!!

    젊은 시절의 일기장이라던지, 거울을 보며 작아진다는 내용, 그리고 돌아가신 아버지와 사별한 아내라는 소재, 철없던 젊은 시절 등등 모든 내용이 모델이 생성해낸 내용들입니다. 

     

    이 중 특히 잘 쓴 문장이라고 생각되는 문장들은 이런 것들이 있습니다.

    • 오늘의 실패가 거울에 비치고 매번 똑같은 표정을 짓고 있는 모습에 나는 한없이 작아졌다.
    • 허물어지고 보니 세월은 삼천을 지나온 같다. 세월은 예나 지금이나 흔적을 보이지 않는다.
    • 궁핍할 때는 맛보기만 해도 배부르셨는데 지금은 흔치 않은, 깊은 자락에서 번의 해변도 가지 못하고 쓸쓸히 계셨던 아버지를 그려본다.
    • 아버지에 대한 회상은 길게, 만에 마음 깊은 곳의 이야기가 풀려나며, 마음속에 선명한 기억으로 아로새겨진 것처럼 감정도 완고해졌다.
    • 실연당한 사랑의 아픔을 노래하던 노래가 만에 다시 나에게 돌아왔다. 짧은 사유의 표현이라고 짐작하면 되지만, 그것도 생각보다는 오랜 기간 나를 짓누르고 있던 외로움이었을까.
    • 속박되고 미워만 가는 나의 마음을 달래주었던 것은 사랑의 형형색색의 아름다운 색깔, 수많은 꽃들과 함께 세상에 여운을 남기며 가없는 사랑을 속삭였던 여인이었다
    • 모두 겨울 하늘을 보면서, 모두가 , 무감각해졌다는 것을 알게 것이다. 그것은 마치 남은 시리운 과정을 거쳐 꺼져가는 불씨를 보듯이.
    • 나는 고독이라는 것에, 그리고 기쁨을, 그리고 안락을 통해 모두 함께함으로써 위안해 주고 싶다. 슬픔도 고통도 행복도 나의 삶이니 어찌 싫어하랴.
    • 사실 내가 정도의 콧대를 가지고 그다지 흥미와 호기심이 없던 내가 못다한 숙제를 얻은 기분이었다. 그러면서도 백일장이라니! 살짝 어깨가 들썩거려 걸음을 재촉했다.
    • 그동안 잘해 왔는가 마음에 걸리셨던 어머니. 나를 낳고 지금껏 살아오는 동안 얼마나 참담했을까. 어머니는 내게 모든 것을 딛고 일어서라고 말씀하셨다. 나는 끝내 눈물을 쏟아야 했다.
    • 욕심없는 마음으로 번민의 보배목이 되어 나의 품위를 다듬고, 나의 등불같은 삶을 풍요롭게 가꾸면 되는대로 살아가면 되는 것이겠지.

     

    많네요..ㅎㅎ 하지만 문학적인 문장들이 굉장히 많아서 나름 만족스러운 결과물이었습니다! 

    원문은  여기  에서 보실 수 있습니다. 

    더보기

    현실의 어지러운 삶에 맞서 부딪쳐 보려고 하는 것도 인간에게는 불가능한 일이겠으나 나에게는 참으로 감사한 일이다. 하찮은 것은 인정이나 칭송 받기를 원하지 않는다. 사실은 너무 기쁘지만 죄송스러운 일이다. 한번은 서점을 가서 책을 구경하다가 이상한 모양의 푸른색 표지에 놀란 일이 있었다. 나는 깜짝 놀라며 표지를 다시 한번 확인했다. 젊은 시절 나의 일기장과 너무 닮아 있었기 때문이다. 내일도 녀석을 만난다면 좋은 기분으로 자야지 하고 내심 기대했었는데, 오늘의 실패가 거울에 비치고 매번 똑같은 표정을 짓고 있는 모습에 나는 한없이 작아졌다. 

    누구나 늙어 가는 아니겠느냐고 생각했던 때였다. 또한 생각없이 사랑이나 외치던 눈빛이 젊은 날의 시간을 되짚어 보는 듯하여 부끄럽기만 했다. 그러나 눈빛도 이제는 많이 늙어 검은 머리를 감추고 있는 것이 아닌가. 상처를 받아도 피와 눈물로 얼룩진 가슴은 느꼈으나 허물어지고 보니 세월은 삼천을 지나온 같다.세월은 예나 지금이나 흔적을 보이지 않는다.

    세월은 누구에게나 찾아온다. 누군가의 인생을 괴롭게 하고 누군가는 행복하게 만들 뿐이지 않을까. 상처도 아픔이지만, 인생을 다시금 돌아보는 흔적이라서인지 가슴에 박힌 지워지지 않는 앙금이 되어 외로이 내다 주고 있는 같다. 나이에 상관없이 내가 기억할 있는 극심한 경쟁과 압박 뿐만 아니라 어릴 가졌던 소원들이다. 하늘의 선물을 동생들에게 전해주며, 기를 살려 달라고 기도했던 하늘이니까. 사실 무엇보다 간절한 소원들이 있었다. 아버지의 장례가 끝날 때까지 친척 동생들을 부를 힘조차 남지 않았다. 그리고 큰아버지가 오셨다. 큰아버지는 예스러운 넓은 공간에서 말문이 트이시며 포근하게 계셨다. 큰아버지는 품에서 아버지의 사진을 꺼냈다.

    논둑 길의 흙에 젖은 발을 적시며 아버지는 괭이질을 번이고 반복하셨을까. 아버지의 발은 거칠었지만 순수한 흙에서 나온 귀한 원액에 흙에 대한 감사와 어머니의 사랑을 느낀다고 하셨다. 그것은 초면의 너그러움에서 시작되었으리라. 나는 어린 시절 아버지를 따라 자연을 걸어서 생애로 많은 것을 보고 느꼈다. 

    이루 다룰 없는 , 어린 시절, 그는 나를 슬프게 한다고 믿었다. 나는 어디로 훌쩍 떠나갈지 생각조차 하지를 못했다. 당장 눈앞에 보이는 것은 온통 백지 뿐이었으니까. 때는 친구들의 아버지가 부러웠다. 집이 그의 아버지가 터였고, 거기에 나는 금팔찌 하나도 끼지 못했다.궁핍할 때는 맛보기만 해도 배부르셨는데 지금은 흔치 않은, 깊은 자락에서 번의 해변도 가지 못하고 쓸쓸히 계셨던 아버지를 그려본다.

    아버지가 일하시는 밭에 들어섰을 때는 바지를 입고 계셨다. 평생 가슴에 묻고 살아온 알았던 그분의 모습은 앙상하게 육신만장에 어겨져 모습조차 후회만큼 슬프게 한다. “ 몸뚱이가 이렇게 많이 고장이냐엉엉 소리를 내면서 키득이는 아버지를 안아드리고 한숨을 내쉬었다. 그래도 당신의 존재는 가슴에 변함이 없구나. 그곳을 찾아가면 아버지의 얼굴은 금방이라도 같은데, 때마다 아버지가 얼마나 쓸쓸해 하고 있는지를.

    아버지에 대한 회상은 길게, 만에 마음 깊은 곳의 이야기가 풀려나며, 마음속에 선명한 기억으로 아로새겨진 것처럼 감정도 완고해졌다.

    아버지의 기억을 업고 둔치 언덕에 이르니 은행나무가 노랗기 짝이 없었다. 해마다 드문드문 나타나는 그루 때문에 마음만 바쁘고 모두가 바쁘게만 보였다. 피어난 은행잎이 노란 옷을 입고 그렇게 보였다. 거기에서 나는 사랑과 이별, 만남과 이별을 노래하는 그런 노래들을 가슴 저리고 듣기 좋은 섞어 주고 있었다.

    실연당한 사랑의 아픔을 노래하던 청산 속의 미운 사랑은 덧없이 내어 왔었다. 실연당한 사랑의 아픔을 노래하던 노래가 만에 다시 나에게 돌아왔다. 짧은 사유의 표현이라고 짐작하면 되지만, 그것도 생각보다는 오랜 기간 나를 짓누르고 있던 외로움이었을까. 참으로 오래되어 보일 것이다. 

    그녀를 사랑했었고 지금도 그녀를 사랑한다. 아름다운 여인의 치맛자락에 얼굴을 스치는 바람결이 빚어내는 노랫소리가 외로움에 젖어 있던 마음을 떨어트렸다. 슬픔과 외로움, 그리고 사람에 대한 마지막 질문은 이것이었다. 바람이 되어 가슴을 적시던 여인의 소리를 떠올려 본다.

    얼마 아름다운 황혼을 보았다. 사람은 자신의 마음 속에 자리 잡기 마련이다. 밖에 없었던 치마를 덩실거리며 가슴 태우던 모습이, 내게도 기쁨을 주던 여인의 고운 모습이 그대로 눈앞에 어른거렸다.

    나를 닮은 여인이 있다. 잃어버린 낙원의 꿈을 되찾으실 있다는 여인이다. 하지만 내가 이제껏 보아 왔던 여인은 고향을 떠나온 후론 보기 안쓰럽게 다시 살아난 노쇠함을 보이는, 새색시가 아니라 기억을 붙들고 버리는 껍데기 속으로 다시 들어가 버린 나약한 모습이었다. 

     아내를 한없이 사랑하고 존경한다. 나는 자식들 앞에서 콩콩한 눈빛으로 아내를 바라보며 애달픈 사연을 털어놓는다. 아내에게 너무 많이 쏟으며 살아가는 같다는 생각이 때마다 이상 진행되어서는 된다는 생각을 하였다.

    아내야, 이제 달라지는 없나. 다른 사람이 나를 바꾸는 것을 보면, 하루도 못살 같은데, 나는 변해가고 있는 같은데.”

    밝은 햇살보다 해맑음을 피부로 느낀다고 생각하니 착각인 거예요, 여보, 우리 나중에 서로 다정한 사이로 발전하기 위하여 서로가 서로를 이해하고 받아들이는 자세를 가질 즈음에 나는 지금쯤 정말 좋은 인연을 만들 있는 멋진 사람이 거예요. 말로는 표현할 없는 뜨거운 감정이야 여태까지 얼만큼 아팠으면 마음 약한 감이 없지 않아 있어요. 맞아요. 지금도 앞으로도.”

    속박되고 미워만 가는 나의 마음을 달래주었던 것은 사랑의 형형색색의 아름다운 색깔, 수많은 꽃들과 함께 세상에 여운을 남기며 가없는 사랑을 속삭였던 여인이었다. 아내는 스승이고 아내와 나의 만남은 운명이다. 우유부단한 태도로 행할 없는 말을 힘겹게 뱉어내는 어리석음을 질책하던 , 차가운 얼음의 정감을 주고받으며 차가운 세월의 골짜기를 흘러 보낸다.

     차가운 눈사태를 견뎌낸 계곡의 얼굴을 담는 것조차 겨울 , 모든 것이 나를 두렵게 한다. 따뜻한 햇살과 차가운 눈송이로 하얀 눈송이가 하얀 구름으로 피어오르고 그것이 거대한 눈꽃으로 밀려오면, 모든 이가 , 진짜 같지가 않은 시간. 시린 겨울, 추워진 세상. 나의 인생에 다가오는 겨울. 모두 겨울 하늘을 보면서, 모두가 , 무감각해졌다는 것을 알게 것이다. 그것은 마치 남은 시리운 과정을 거쳐 꺼져가는 불씨를 보듯이.

    스스로를 지탱하는 등불로 그들의 외로움을 달래주는 것이라. 때로는 고독을, 그리고 정인의 고독을, 그리고 나를 슬프게 하는 모든 것들을. 나는 고독이라는 것에, 그리고 기쁨을, 그리고 안락을 통해 모두 함께함으로써 위안해 주고 싶다. 슬픔도 고통도 행복도 나의 삶이니 어찌 싫어하랴. 

    문득, 나는 많은 사람들 앞에서 떳떳하지 못한 자신의 삶을 초라하게 그려낸 부끄럽고 부끄럽다. 부끄러운 줄도 모르고 글을 써내려간 자신이 엄하다. 부끄러움인지 후회인지, 후회의 탑도 있긴 하지만 부끄러움의 탑은 아직 버티고 있다. 후회의 탑은 어디에 있으며, 어디에 자신의 이름을 감추고 있는가. 그리고 죽음은 너무 심오하고 어렵지 않을까. 

    나는 삼십대 초반부터 지금까지 줄곧 문학을 해왔다. 특히 동인지를 해가 결실을 해였다.  동인지가 10년을 말해준다. 잡지에서 가장 기뻤던 때는 잡지가 서울에 처음 생긴 이래로 최초로 상경소설을 신인상으로 해가 번이던 헤아려 어딘가 역전에서 유일하게 10 이상을 버티고 있었는데 신인상이 주어진다고 후배들에게 지나치게 피해주고 욕먹는 자리에 있었는데도 이리 힘들게 견디게 되었던지. 나는 고주망태가 되어갔고 동안 무기력함을 참을 수가 없었다. 꿈에 대한 집착은 즈음에 심해졌다. 

    부모님이든 주변이든 내가 하는 일이 주는 즐거움이 얼마나 큰지. 그래서 글쓰기는 내가 미리부터 깨달음이 있어서 하는 일이라 생각했고 그렇게 보이지 않았지만 다르게 생각했다. 작은 실수에도 야속하게 생각하고 화내는 모습에 가슴이 탈탈 끓었다. 하필이면 잠시 바닥을 보이고 있는 것이냐며 자책하기도 했다. 결국은 잡히고 말았어야 하는 아니었냐며 투덜거리지만 멍에가 무겁기만 하여 혼자 잡는다는 생각에 속앓이를 하는 것이었다. 지치지도 않고 버티는 것도 외로워 아버지를 찾아뵙지 못하고 그냥 혼자 뒤집어쓰는 서러움을 눈물과 혼까지 쓰며 참아 왔던 것이다. 그런데 어느 보니 갑자기 내가 혼자서 자신을 다스리려 참아 왔던 설움의 정체가 선명하게 드러나는 바로 파동이었다.

    날도 계획과는 다르게 시계를 보며 샘을 내는 바람에 어느새 7시를 조금 넘긴 시간이 되었다. 7 30 경에는 너무 늦은 시간에 7시를 알려주는 문자가 왔다. 어머니께서 오늘은 일하러 가야하니라는 내용이었다. 그날 아침에 근무를 하고 오후 2 출판사에 방문을 했다. 그리고 백일장에 그리 욕심을 부리고 있던 참이었다.

    주위에 친구들도 있었지만 그들은 겉으로 드러나는 만을 찍어내는 경향이 있어서 그런지 대회에 출품하기 시작한 일년이 넘은 지금까지도 실력은 초등부의 졸작과 다름이 없었다.  갈수록 명성이 커져가면서 나도 상을 타기 시작했을 때만 해도 자랑을 하고 다녔는데, 요새는 그게 마음에 들지 않아 수확이 없으면 꼴이 정도가 되었다. 사실 내가 정도의 콧대를 가지고 그다지 흥미와 호기심이 없던 내가 못다한 숙제를 얻은 기분이었다. 그러면서도 백일장이라니! 살짝 어깨가 들썩거려 걸음을 재촉했다. 하지만 무언가 내키지는 않아서 대회 하루 전날 저녁부터 먹은 것을 그대로 토하고 말았다. 대회날도 왠지 기분이 이상했다. 갑자기 기가 죽은 기분이었다. 

    주변에서 무수히 칭찬을 주는 분들이 계시기에 나도 부지런히 글을 쓰려고 하였고, 벼르면 원하는 작품을 있을 거라고 주변에서 넌지시 말해왔지만 그건. 나는 원고지를 있는 자격을 갖추지 못했고 소질도 없었다. 그러자 지금 내가 글을 쓰고 있는 원동력이 익명의 다수 휴대폰 메시지가 나를 부끄럽게 한다. 그녀에게 너무 미안할 따름이다. 그동안 잘해 왔는가 마음에 걸리셨던 어머니. 나를 낳고 지금껏 살아오는 동안 얼마나 참담했을까. 어머니는 내게 모든 것을 딛고 일어서라고 말씀하셨다. 나는 끝내 눈물을 쏟아야 했다.

    아무튼 세월이 빠르게 흘러넘쳐서 지금은 그림자처럼 나약한 사춘기 소년상으로 끝나버렸지만.

    아마 바랜 추억의 조각이었으리라. 모두가 나의 손을 기억하리라고, 아팠던 밤에는 슬피 울었을 거야. 그래, 얘기해보자. 홀로서기. 가끔씩 나는 마음속으로 이야기를 털어놓곤 한다. 여태까지의 나의 삶이 스쳐지나가는 곳이라면 어디든 놓아두는 것만으로도 나에게 의미 있는 일이라고. 그리고 나의 방에 그림자로 길을 떠나게 만들어줬으면 좋겠다고.

    평생의 끈으로 길게 늘어뜨릴 같은 믿음으로 나는 항상 최선을 다하곤 한다. 눈을 들어 나의 걸음걸이는 그래, 나쁘진 않다. 다만 길을 벗어나기가 조금 힘이 뿐이다. 나는 나의 이런 모습이 차츰, 변해가고 있는 것을 느낀다.

    간절한 마음으로 소원을 빌며 살아온 세월을 추억하며 서운한 마음들을 이제는 모두 거두어야 때가 되었다. 그리고 소망의 빛으로 남은 생을 살아나가야 한다. 그리하여 세상은 희망으로 가득하게 되고 오래 희망으로 세상을 본다면 세상은 아직도 꿈으로만 남아있을 것이란 생각으로 꺼져가는 같은, 꺼진 빛을 되살릴 것이란 확신을 가져본다. 

    꿈은 현실이고 꿈은 노력이라는 말이 있지만, 노력만으로 무언가가 나온다는 것은 아니다. 욕심없는 마음으로 번민의 보배목이 되어 나의 품위를 다듬고, 나의 등불같은 삶을 풍요롭게 가꾸면 되는대로 살아가면 되는 것이겠지.

     

     

     

     


     

    여기까지.. 저희의 무박 이일동안 달려왔던 전체 프로젝트 과정을 소개해 드렸습니다. 

     

    부족한 점도 있고, 나름 잘 해낸 점도 있는 것 같습니다. 무엇보다 하나의 프로젝트를 완성했다는 점에서 또다른 좋은 경험이 되었어요!! 

    이런 좋은 기회를 제공하고 대회기간 내내 우리 참가자들의 안녕을 위해 무한 신경을 써주셨던 학교와 삼성학술정보관 관계자님들께 감사드립니다 ㅎㅎ 😆

    또! 장장 25시간동안 지치지 않고 달려줬던 우리 팀에게도 무한 박수를 보냅니다 👏🏼👏🏼👏🏼👏🏼 ELC39 또 달렸~~~~!~!!~!~!!! ❤️

     

     

     

    댓글 3

    • 프로필사진

      안녕하세요 해당 내용 잘 읽었습니다 관련 과정으로 공부중인데 관련 깃헙 링크를 알 수 있을까요??

      2020.06.27 17:39
      • 프로필사진

        안녕하세요! 대회에서 사용했던 코드는 https://github.com/jeina7/AI_Bookathon 에 있습니다. 다만 모델은 마인즈랩에서 제공했던 모델이고 외부로 공개되진 않아서, training 등 관련 코드는 있지만 실제로 코드를 돌려볼 수는 없습니다 ㅠㅠ!

        2020.06.27 20:00 신고
    • 프로필사진

      비밀댓글입니다

      2020.07.16 15:13
Designed by Tistory.