전 텍스트마이닝을 다룹니다. 텍스트의 패턴 또는 관계를 추출하여 가치와 정보를 찾아내는 작업이죠. 기본적으로 자연어처리나 통계, 딥러닝에 대한 지식이 필요합니다. 궁금하면 끝까지 파고 들어가는 성격까지 있으면 베스트입니다. 이론의 발전속도가 워낙 빨라 공부의 끈을 붙잡고 있어야 하는데 그렇다고 비중을 많이 가져가면 활용과 구현에선 멀어지는 기묘한 영역입니다. 앞으로 풀어낼 얘기에서 언어모델 언급이 많을 텐데 최소한의 설명은 드려야 할거 같더군요. 도구 얘기를 하는 김에 준비했습니다.
인간의 언어엔 고유의 규칙이 있고 체계에 따른 구조가 있습니다. 하나의 고도화된 시스템인데 이 언어 시스템을 기계가 구현해 내려면 그에 맞는 논리박스가 필요합니다. 누군가 던지는 말과 글이 인풋이면, 듣는 사람의 언어 시스템이 작동하면서 생성되는 반응이 아웃풋이 되는 함수식의 형태가 되겠죠. 자연스러운 반응이 나오려면 언어 시스템이 잘 반영된 함수가 나와야 합니다. 얼마나 정교한 함수식을 구축하느냐. 이게 자연어 처리의 핵심입니다.
기계의 눈높이에 맞추는 게 언어모델의 시작
기계의 눈높이에 맞추는 작업이 필요합니다. 걔는 숫자만 알아듣거든요. 인간이 사용하는 언어도 숫자로 변환시켜야 줘야 합니다. 처음엔 간단하게 표시를 했습니다. 수많은 0과 한 개의 고윳값 1의 값으로 구별(One-hot encoding)했습니다. 그런데 세상엔 단어가 정말 많습니다. 0을 무한히 적을 수가 없기에 적은 숫자로도 단어를 표현하는 방식을 고안해 냅니다. 워드임베딩(Word embedding)이 그렇게 등장합니다. 천리길도 한 걸음부터 라고 초거대 언어모델도 이렇게 단어를 숫자로 표현하는 작업부터 시작했습니다.
워드임베딩을 간단히 말씀드리면 끼리끼리입니다. ‘비슷한 의미를 가진 단어는 비슷한 위치에 존재하고, 비슷한 문맥에 등장한다’는 분포가설(Distributional hypothesis), 밀집표현(Dense representation)에 기반한 이론입니다. 주변 단어와의 관계에서 특정 단어를 정의 내리고, 이를 숫자(임베딩 벡터)로 표현할 수 있다는 얘긴데 이 과정에서 숫자는 단어 간 유사성 및 문맥을 일정 부분 가져가게 됩니다. 기계에 문맥을 인지시킬 수 있는 방법이 생기다니! 중대한 진전이었죠. 최근에는 임베딩 벡터화 하는 과정에 딥러닝을 활용하면서 유사성과 문맥을 조금 더 반영할 수 있게 되었습니다.
언어모델은 단어 배열에 확률을 할당하고 추정합니다. 임베딩 벡터로 문맥이 어느 정도 인지되기에 가능한 그림입니다. 아래 두 문장 중에 더 자연스럽고 그럴듯한 문장을 골라볼까요.
1. 아빠는 생크림 케이크를 한 입 먹고 즐거워했다
2. 아빠는 리얼초코 케이크를 한 포크 떠서 마시고 즐거워했다
일상의 의사소통에서 활용할 수 있는 문장은 첫 번째죠. 좋은 언어모델이라면 첫 번째 문장에 더 높은 확률을 부여할 겁니다. 언어모델의 성능이 좋다는 말은 학습을 통해 파악된 문법이나 문맥의 기준에서 자연스러운 단어배열에 높은 확률을, 그렇지 못한 배열엔 낮은 확률을 부여하는 능력이 좋다는 의미입니다. 추정함수의 정확도가 높아지니 배열의 결과물도 그럴듯해집니다.
언어모델에도 딥러닝이 접목되기 시작합니다. 학습 데이터를 주면 딥러닝 모듈이 스스로 분석하여 분류하고 규칙성을 찾아냅니다. 학습을 통해서 말뭉치의 규칙을 발견하고 나면, 입력되는 새로운 데이터 역시 발견한 규칙성을 적용하여 예측값을 찾아냅니다. 다층 인공신경망을 거치며 최적의 매개변수를 찾아내고 정교한 추정이 가능해지면서 모델의 처리량과 속도, 함수의 정확도 모두 비약적으로 높아졌습니다. 제가 처음 사용했던 모델(Word2Vec)의 분류정확도가 70% 초반대였는데 지금은 90%를 넘기는 모델이 다수 등장했습니다. 진화속도가 눈부십니다.
제가 주로 사용하는 언어모델은 BERT입니다. BERT 역시 얼마나 자연스럽게 배열이 되었는가를 추정한 딥러닝 모델입니다. 구조가 다소 복잡하지만 정교하고 가볍다는 장점이 있습니다. 요즘이야 GPT-4o과 같은 생성형 초거대 언어모델이 각광을 받고 있지만 비용 대비 성능, 그리고 감성분석에선 아직 쓸만한 모델입니다.
BERT의 학습은 두 단계로 구성됩니다. 기본모델에 영어면 영어, 한글이면 한글처럼 하나의 언어에 익숙하게 만듭니다. 단어 사이의 관계를 포함하여 문장의 의미를 파악할 수 있도록 하는 선행학습(Pre-Training) 과정인데 사람으로 치면 모국어를 배워가는 과정입니다. 이 단계에서 사용하는 학습재료는 Wikipedia 같이 지극히 일반적인 내용으로 단어와 단어, 문장과 문장 간의 관계파악에 초점을 맞춥니다. 철저히 해당 언어에 익숙해지는 것을 목표로 합니다.
특정 언어에 익숙해졌으면 특정 주제에 익숙하게 만듭니다. 연구자가 원하는 특정주제, 혹은 목적에 맞게 조정하는 과정(Tunning)입니다. 사람으로 치면 전공을 지정해 주는 셈인데 특정 주제에 대해서 정확도를 높이는 과정입니다. 앞서 선행학습 단계에서 사용한 학습재료와 달리 특정 주제의 텍스트를 사용합니다. 선행학습 단계에서부터 특정 주제의 텍스트를 학습재료로 사용하는 것이 더 나은 정확도를 담보할 가능성이 있지만 막대한 양의 학습용 텍스트와 그걸 연산·처리할 수 있는 고사양의 인프라가 필요합니다. 물론 돈과 시간만 있으면 뭐든 가능하겠지만 현실에선 둘 다 부족하죠. 여러 가지 요인을 감안해야 합니다.
언어모델 얘기가 길었군요. 제 분야고 사용하는 도구에 대한 얘기다 보니 잠시 신이 났나 봅니다. 생성형 언어모델은 또 할 얘기가 많죠. 기회가 있다면 언제 한 번 따로 다루도록 하겠습니다.
손에 맞으면서 실력까지 올려줄 수 있는 도구가 있을까
제가 언어모델을 쓰는 이유는 두 가지입니다. 하나는 문장의 분류나 연산과정에 제 사견이 개입할 여지가 없다는 점입니다. 분류 결과나 세부수치 자체로 객관성을 갖는 만큼 시시비비에 휘말릴 여지가 적습니다. 두 번째는 작업효율입니다. 인력으로 수십~수백만 문장을 분류하려면 달포는 꼬박 걸리겠지만 언어모델은 한나절이면 족합니다. 아마 제가 했다면 더 오래 걸릴지도 모를 일이지요. 여기에 들어가는 비용까지 생각해 보면 저에게 BERT는 잘 맞는 조각입니다.
언어모델로 계산된 세부수치는 미리 구성해 둔 알고리즘을 거치면서 현상을 설명할 수 있는 숫자로 가공됩니다. 알고리즘은 여러 수식으로 짜두는데 처리량이 1만 줄 안쪽이면 엑셀, 넘어가면 R이나 파이썬 같은 도구들을 씁니다. 관련된 이론이나 사례, 트렌드를 찾고 여러 각도에서 접붙일 땐 생성형 검색엔진을 사용하고, 현상에 제기되는 문제에 대한 답을 찾고 전달, 공유하려면 디자인 작업이 필요하니 파워포인트를 사용합니다. 최근엔 레오나르도 AI 같은 이미지 생성도구의 도움도 받고 있지요. 여기까지가 제 일의 과정입니다. 평소 도구를 많이 쓰지 않는다 생각했는데 아니네요. 정정합니다. 다양하게 정말 많이 씁니다.
혹시 눈치채신 분이 있을지 모르겠지만 제가 주로 사용하는 도구는 하나같이 '최신의, 최강의' 도구가 아닙니다. BERT도 그렇고 엑셀, 파워포인트도 그렇죠. 되려 요즘 기준으로 보면 낡은 도구들입니다. 생성형 검색엔진처럼 더 나은 도구가 나타난다면 그걸 쓰는 게 맞겠지만 아직까진 갈아탈 필요성을 못 느끼고 있습니다. 지금 도구들로도 제 의도를 구현하는데 무리가 없거든요. 말 그대로 손에 익은 '최적의'도구인 셈입니다.
'최적'이라는 표현엔 '익숙하다'란 의미 외에 한 가지 의미가 더 내포되어 있습니다. 바로 실력향상의 경험입니다. 내 앞에 떨어진 모든 업무의 목표는 문제해결입니다. 선택여부와 관계없습니다. 주어진 문제를 더 빠르고 편안하게 풀어낼 수 있다면 그만큼 실력이 있다는 의미입니다. 문제해결에 도움 되는 방향으로 누적된 경험이 곧 실력이란 걸 감안하면 도구의 선택과 활용 역시 같은 인식에서 고려되어야 합니다. '자주 발생하는 일의 패턴을 자동화할 수 있을까, 일의 흐름을 해치지 않는 선에서 프로세스를 줄일 수 있을까, 현상을 새롭게 바라볼 수 있는 방법은 없을까'와 같은 물음을 던져보시기 바랍니다. 던진 물음에 흥미로운 답변을 줄 수 있는 도구라면 우리의 실력을 확실히 올려주지 않을까요. 저는 그렇게 생각합니다.
새롭고 강력한 도구가 마냥 옳은 건 아니더라고요. 여러분의 도구는 어떤가요.