만약 누군가가 “까마귀 날자…”라고 말을 꺼낸 뒤 문장을 완성하라고 하면, 우리는 대개 “배 떨어진다”라고 대답할 것이다. 우리말을 아는 사람이라면 대화의 맥락이 없어도 이렇게 기계적으로 속담을 완성할 수 있다. 그렇다면 정작 기계(=컴퓨터)는 어떨까?
딥러닝을 통해 구축된 대형 언어모델이 주목을 받으면서, 척하면 착하고 대화할 수 있는 기계에 대한 기대가 높다. 특히 작년 여름에 공개된 오픈AI의 GPT-3는 총 1,750억 개의 파라미터를 자랑하는 대형 언어모델로[1], “이제 말로 컴퓨터 프로그램을 짤 수 있다”, “사람이 쓴 기사와 분간이 안 가는 기사를 쓸 수 있다” 등으로 화제가 됐다. ‘지피티-쓰리’의 ‘쓰리’에서 알 수 있듯이 GPT-3에는 전신이 있다. 바로 GPT-2다. 2019년 2월에 공개된 GPT-2는 GPT-3의 백분의 일 크기로 15억 개의 파라미터를 갖지만, 언어모델 구축에 사용된 핵심 기술(transformer)은 GPT-3와 같다[2]. 외국에서 개발된 언어 기술은 대부분 영어에 초점이 맞춰져 있어서 우리말에 이 기술을 적용하려면 우리말에 대한 최적화 작업이 필요하다. 공개 소프트웨어로 소스코드가 공개된 GPT-2의 경우[3], SK텔레콤 AI센터가 대량의 우리말 데이터로 한국어 GPT-2 (KoGPT2)를 구축해 공개하고 있다[4]. KoGPT2는 한국어 위키백과와 뉴스 기사 속 2,500만 개 이상의 문장을 학습했다고 한다. 그렇다면 2,500만 개 이상의 우리말 문장을 모아 15억 개의 파라미터에 반영한 ‘문장 생성 기계’의 수준은 어느 정도일까? “까마귀 날자”라고 입력하면 ‘배 떨어진다’라고 출력할 수 있을까? 그래서 KoGPT2를 이용한 문장 완성 실험을 해봤다. 일반적으로 언어모델을 활용할 때에는 해결하고자 하는 작업, 예를 들어 문장 요약이라든지 문서 자동 분류 등의 작업에 맞게 언어모델을 추가로 학습하거나 미세조정하는 과정이 필요하다. 이번 문장 자동 완성 실험에서는 이러한 조정 과정을 전혀 거치지 않고 날 것의 상태에서 KoGPT2가 어떤 결과를 출력하는지를 살펴보았다. 붉은 글씨는 입력이고 파란 글씨는 KoGPT2의 출력이다. input = '까마귀 날자' 까마귀 날자 앵무새처럼 그냥 입력을 뱉어냈다. 그래서 ‘배’까지 힌트를 줘봤다. input = '까마귀 날자 배' 까마귀 날자 배 꼽아 잉? 그렇다고 실망하기에는 아직 이르다. 다음은 성공사례다. input = '뛰는 놈 위에' 뛰는 놈 위에 나는 놈이 있다. input = '돌다리도 두드려 보고' 돌다리도 두드려 보고 건너라. input = '가랑비에 옷 젖는 줄' 가랑비에 옷 젖는 줄도 모르고 input = '가지 많은 나무에 바람 잘 날' 가지 많은 나무에 바람 잘 날 없고 input = '고래 싸움에 새우 등' 고래 싸움에 새우 등 터지는 격전지로 변해가고 있다. input = '구슬이 서 말이라도' 구슬이 서 말이라도 꿰어야 보배다. input = '빈대 잡으려고' 빈대 잡으려고 초가삼간 태우는 격이다. ‘모르고’, ‘없고’, ‘격전지로’, ‘격이다’ 등 마무리가 좀 어색한 결과도 있었으나 대체로 기대했던 출력이 나왔다. 물론 기대를 저버린 경우도 많았다. 예를 들어, input = '낮말은 새가 듣고 밤말은' 낮말은 새가 듣고 밤말은 새가 듣는다. input = '공든 탑이' 공든 탑이 무너지듯 무너져 내렸다. input = '낫 놓고 기억자도' 낫 놓고 기억자도 안 나 input = '뱁새가 황새를 따라가면' 뱁새가 황새를 따라가면, 황새는 황새의 뒤를 따라간다. 공든 탑이 무너져 내렸다는 부분에서는 웃음이 나왔다. ‘낫 놓고 기억자도 안 난다’는 결과는 아마 ‘기억자’를 ‘기억’으로 유추했기 때문으로 생각된다. 이건 어떨까. input = '한석봉이의 어머니는 이렇게 말했다. 나는 떡을 썰테니 너는' 한석봉이의 어머니는 이렇게 말했다. 나는 떡을 썰테니 너는 떡을 썰어 먹어라. 어머니의 사랑이 느껴진다. 농담이다. 이번에는 요즘 회자되고 있는 서울시장 출마 선언을 한 유명인들의 이름을 넣어서 자동 완성을 시도해 봤다. input = '안철수는' 안철수는 "국민들이 원하면 또 만날 수 있다"고 말했다. input = '나경원은' 나경원은 “내가 잘 할 수 있는 게 뭘까 고민했다. input = '오세훈은' 오세훈은 “오세훈은 서울시장으로서 자격이 없다”고 말했다. input = '박영선은' 박영선은 “내가 이 일을 할 수 있는 것은 내가 이 일을 할 수 있는 유일한 사람이기 때문”이라며 “내가 이 일을 할 수 있는 것은 내가 이 일을 할 수 있는 유일한 사람이기 때문”이라고 말했다. input = '우상호는' 우상호는 "내가 이 정도까지 할 줄 몰랐다. 코멘트는 생략하겠다. 유명한 노래의 가사를 집어넣으면 가사를 완성해줄까? input = '별빛이 흐르는 다리를 건너' 별빛이 흐르는 다리를 건너자, 그 다리에서 한 남자가 천천히 걸어가고 있었다. input = '난 알아요 이 밤이 흐르고 흐르면' 난 알아요 이 밤이 흐르고 흐르면 내가 당신에게 할 수 있는 모든 것을 다 할 수 있을 것 같애요 전자는 윤수일의 ‘아파트’이고 후자는 서태지와 아이들의 ‘난 알아요’이다. 이 두 노래를 모르는 사람이라면 위와 같은 문장을 완성할 수도 있겠다. 노래를 아는 사람이라면 살짝 실망스러운 결과다. 그럼 애국가는 어떨까? input = '동해물과 백두산이' input = '동해물과 백두산이 마르고 닳도록' input = '동해물과 백두산이 마르고 닳도록 하느님이 보우하사' X 위와 같이 세 번에 걸쳐서 애국가 1절을 쪼개서 넣어 봤으나, 계속 계산만 하고 출력이 되지 않았다. 그래서 한국어 위키백과(Wikipedia)에 애국가가 없나 해서 검색해 봤더니 ‘대한민국의 국가’라는 페이지가 확실히 있었다. 위키백과 속 애국가 가사를 확인한 결과 ‘동해물과’가 아니라 ‘동해 물과’로 띄어쓰기를 해야 했다. 그래서 실험을 다시 했다. input = '동해 물과 백두산이' 동해 물과 백두산이 만나는 지점에 위치한 이 곳은 동해의 물길과 백두산의 물이 만나는 지점이다. input = '동해 물과 백두산이 마르고 닳도록' 동해 물과 백두산이 마르고 닳도록 사랑한 그 사람. 띄어쓰기 하나에도 민감하게 반응하는 언어모델이라는 것을 확인할 수 있었다. 더하기는 가능할까? input = '일 더하기 일은 이이고, 사 더하기 사는' 일 더하기 일은 이이고, 사 더하기 사는 이이고, 일 더하기 일은 이이고, 일 더하기 사는 이이고, 일 더하기 사는 이이다. input = '1 더하기 1은 2이고, 4 더하기 4는' 1 더하기 1은 2이고, 4 더하기 4는 5이다. input = '1 더하기 1은 2이고, 2 더하기 2는' 1 더하기 1은 2이고, 2 더하기 2는 3이다. input = '일 더하기 일은 이이고, 이 더하기 이는' X 마지막 경우는 아예 출력이 안 됐다. 최첨단 언어모델인 GPT-3의 한국어 모델은 아마 이번 실험 결과보다는 훨씬 더 좋은 결과를 내겠지만, 언어모델의 근간이 되는 기술이 같다는 점에서 군데군데 이상한 결과가 나오지 않을까 조심스레 예상해본다. 척하면 착이 되려면 아직 넘어야 할 산이 많다. 조희련(인공지능인문학 HK+사업단 HK교수) [1] https://en.wikipedia.org/wiki/GPT-3 [2] https://en.wikipedia.org/wiki/GPT-2 [3] https://github.com/openai/gpt-2 [4] https://github.com/SKT-AI/KoGPT2
|