본문바로가기


지난호





|

PHYSICS PLAZA

크로스로드

컴퓨터가 인간의 언어를 이해하게 하기: 자연 언어 처리와 언어 모델

작성자 : 윤진혁 ㅣ 등록일 : 2022-09-19 ㅣ 조회수 : 1,079

저자약력

윤진혁 교수는 한국과학기술원 이학박사(2016)로서 네이버 데이터 사이언티스트, 한국과학기술정보연구원 선임연구원을 거쳐 현재 숭실대학교 AI 융합학부 교수로 재직 중이다.

현실 세계에는 다양한 형태의 데이터가 존재한다. 다양한 색상과 형태를 가진 시각적 데이터는 시간 흐름의 유무에 따라서 영상과 사진으로 나뉜다. 다양한 소리를 다루는 음성 데이터도 존재한다. 그리고 사람들은 언어를 통해 정보를 교환하고 생각을 나눈다. 이러한 데이터를 컴퓨터로 가져오면 어떻게 될까? 다양한 데이터 형태가 존재하지만, 컴퓨터는 기본적으로 0과 1의 이진수만 이해할 수 있다. 결국 컴퓨터가 사람이 다루는 데이터를 이해하게 하기 위해서는 데이터의 특성을 고려한 다양한 방법을 도입해야 한다. 그중 사람의 언어를 이해하게 하는 것을 자연 언어 처리(Natural Language Processing, NLP)라고 부른다. 이러한 자연 언어 처리에는 다양한 문제들이 있다. 예를 들어 문장 구조에서 각 단어의 동사, 명사, 주어, 서술어, 목적어 같은 품사를 찾아주는 part-of-speech tagging, 비정형 텍스트에서 어떤 개체가 언급되었을 때 이를 인명, 단체, 장소, 시간 표현 등 미리 정의된 분류로 구분하여 정보 추출을 하는 개체명 인식(Named Entity Recognition) 등을 들 수 있다. 하지만 이러한 문제를 풀기 전에 가장 기본적으로는 컴퓨터가 언어의 구조를 이해할 수 있게 해야만 한다. 그리고 시각이나 음성 같은 다른 종류의 데이터에 비해 자연어 데이터는 컴퓨터가 다루기 까다롭다. 이 글에서는 복잡한 기술적인 내용은 최대한 덜어내고, 컴퓨터가 언어를 이해하는 방법인 언어 모델(Language Model)이 어떤 형태로 발전해 왔는지에 대해 간략하게 살펴보고자 한다.

캡션

시각 데이터를 먼저 살펴보자. 컴퓨터에서 그림은 기본적으로 픽셀이라고 불리는 점 단위로 표현이 가능하다. 만약 색을 무시한다면 각 픽셀은 점의 밝기를 값으로 가지는 정수나 실수로 표현이 가능한데, 그림의 모든 부분에는 픽셀이 빈 곳 없이 채워져 있으므로 행렬 형태로 표현하기가 편리하다. 점의 가로와 세로 위치를 각각 행렬의 행과 열에 맞추면 된다. 하지만 언어 자료는 이와 다르다. 우리는 경험적으로 어떤 단어는 매우 많이 사용하지만, 어떤 단어는 극히 적게 사용된다는 것을 알고 있다. 이를 수학적으로 나타낸 법칙을 지프의 법칙(Zipf’s law)이라고 한다. 이 법칙은 가장 많이 쓰이는 단어부터 가장 적게 쓰이는 단어까지 순서대로 정렬하면, \(\small k\)번째 단어의 사용량은 첫 번째 단어 사용량의 1/\(\small k\)가 된다는 것이다. 사실은 1/\(\small k\)가 아니라 1/\(\small k^a\) 형태로 지수(exponent)가 달라지는데, 이는 0.8~1.3 정도까지 언어마다 다르다는 것이 알려져 있다.1) 이러한 성질을 “희소성”이라고 부른다. 각 단어마다 고유한 숫자로 된 인덱스에 연결한다고 생각해 보자. 편의를 위해서 각 인덱스는 단어의 빈도 순위와 동일하게 주어진다고 하면 1이 나오는 횟수는 100이 나오는 횟수보다 100배가 될 것이고, 10,000이 나오는 횟수보다는 10,000배가 될 것이다. 그리고 대부분의 단어는 거의 나타나지 않는데 이를 “희소성(sparsity)”이라고 부른다. 그리고 이런 식으로 정수의 인덱스를 주게 된다면 큰 인덱스는 거의 나타나지 않고 쓸모없는 경우가 많다. 그래서 컴퓨터에서 언어를 다루려면 다른 방법들이 필요해진다.

컴퓨터가 언어를 이해하는 방법을 알기 위해서는 먼저 가능도(Likelihood)라는 개념을 알아야 한다. 통계 과목을 수강했다면 여러 번 들어봤을 수도 있다. 가능도는 어떤 새로운 데이터가 주어졌을 때, 주어진 확률 분포 혹은 기존의 데이터와 얼마나 잘 맞아떨어지는지를 판별하는 지표이다. 이를 자연어 문제로 가져오면 우리가 어떤 문장을 보았을 때, 이 문장이 우리가 생각하는 언어의 조건과 얼마나 잘 맞아떨어지는지를 평가하는 지표라고 생각할 수 있다. 언어 모델은 기본적으로 기준이 되는 지점을 인간이 구축한 자연어로 두고, 어떤 문장이 주어졌을 때 이 문장의 가능도를 확률로 계산하는 모델을 의미한다. 

가장 대표적이고 오래된 언어 모델은 “확률론적 언어 모형”이 있다. 이 모델에서는 문장을 단어들이 이어진 연속된 신호와 같이 본다. 그리고 앞의 단어들을 알 수 있다면 바로 뒤의 단어들을 확률적으로 계산할 수 있다. 이러한 확률이 낮은 경우 이 문장은 가능도가 낮다고 생각한다. 예를 들면 “내 이름은 홍길동입니다”라는 문장에서 “내 이름은”이라는 두 단어가 나왔으므로 그다음에는 사람의 이름이 나올 확률이 높다는 것을 예측할 수 있다. 이러한 것을 단어가 아닌 연속된 단어의 묶음을 동시에 다루게 되면 n-gram 언어모델이라고 하는데, n-gram은 연속된 단어 n개를 묶어놓은 문장의 부분집합을 의미한다. 단어의 구분은 보통 공백문자를 사용한다. 문제는 이러한 확률론적 모델과 n-gram 모델 모두 학습하기 위해 쓰지 않은 단어나 단어의 조합이 나온다면 문장이 존재할 확률이 0으로 나타난다는 것이다. 예를 들어서 성춘향이나 이몽룡이라는 이름이 한 번도 언급되지 않았다면, “내 이름은 성춘향” 같은 문장의 확률은 0으로 수렴한다. 거기에다 앞에서 이야기했던 “희소성”의 개념까지 생각한다면, 많은 경우의 단어들은 학습할 때 거의 사용되지 않을 수 있다. 이러한 상황을 일반화 능력이 떨어진다고 말한다(lack of generalization ability). 이런 문제가 발생하는 이유는 모든 단어를 각각 독립적이고 무관하다 보기 때문이다. 거기에다 n-gram에서 n이 커질수록, 그러니까 더 긴 단위를 생각할수록, 저장해야만 하는 경우의 수가 많아지며 정확도가 낮아진다. 현실적으로 n이 5나 6보다 큰 경우를 생각하는 경우는 드물다. “동작구 사당동 주민은 신생아의 출생 신고를 하기 위하여 <무엇>을 방문해야 한다”는 문장이 있다고 생각하고 <무엇>을 예측해 보자. 여기서 <무엇>에 가장 가까운 단어는 “사당동 주민센터”일 가능성이 높다. 하지만 n-gram 모델에서 n이 6보다 작다면, “사당동 주민센터”, “방배동 주민센터”, 심지어는 서울 밖의 “노은동 주민센터”까지 모두 비슷한 확률로 나올 수 있으며 제대로 된 예측이 되지 않을 것이다. 

위의 문제를 해결하려면 어떻게 해야 할까? 한국인은 흔히 세 글자로 된 단어가 이름일 가능성을 인지하고 있다. 그리고 사당동이라는 정보가 문장의 많이 앞에 나오더라도 한 문장에 등장한다면 정보를 참고하는 것이 더 이해하기 쉽다는 것도 알고 있다. 단어를 모두 독립적이지 않게 생각하고, 단어를 서로 연관성을 가질 수 있게 표현하면 어떨까? 이름들은 따로 모아서 공유하면 어떨까? 우리는 두 벡터가 주어진다면 두 벡터 사이의 유사도를 계산하는 다양한 방법이 있다는 것을 이미 알고 있다. 모든 단어를 제한된 길이의 벡터로 표현할 수 있다면 단어들의 유사도를 쉽게 계산할 수 있다. 이런 생각에서 word2vec과 같이 단어를 벡터로 표현하는 모델이 탄생했고, 이렇게 벡터 공간에 단어를 위치시키는 과정을 임베딩(embedding)이라고 부른다. 여기에 더해서 다음 단어를 예측할 때 앞의 단어들을 모두 기억하게 한다면 더 성능이 좋아질 수도 있을 것이다. 이 아이디어에서는 Recurrent Neural Networks (RNN)과 Long Short-Term Memory(LSTM) 등의 모델이 탄생했다.2) RNN은 은닉 상태(hidden state)라는 것을 가지고 있어서 현재의 입력뿐 아니라 과거의 입력에 관한 정보를 같이 가지고 있다. 이때 주로 word2vec 등으로 임베딩을 한 벡터들을 입력받고, 결과 벡터를 출력하는 형태로 되어있다. 그리고 이때 출력한 결과 벡터는 다시 은닉 상태가 되어서 다음 단어의 예측에 사용된다. 확률론적으로 어떤 문장의 확률은 결합 확률 분포(joint probability)를 통해서 연쇄 법칙으로 분해할 수가 있다. 예를 들어서 앞의 “나의 이름은 홍길동입니다”라는 문장이 있다면 이 문장의 확률은 아래와 같이 쓸 수 있다.

\(P(\)나의 이름은 홍길동입니다\() = P(\)홍길동입니다\(\,|\,\)나의 이름은\() * P(\)이름은\(\,|\)나의\() * P(\)나의\()\)

여기서 P(B|A)는 A라는 단어가 나타났을 때 그 뒤에 B가 나타날 확률을 의미한다. RNN은 이러한 방식으로 각 단어의 확률을 파악하고, 이전 단어들에 대한 확률값을 기억하는 긴 기억(hidden state)을 유지하면서 다음 단어의 확률을 계산한다. 하지만 RNN도 완벽하지는 않다. 일반적으로 RNN은 모델 크기에 따라서 몇천 개에서 몇십만 개 내외의 단어만 사용하고 그 바깥의 잘 안 쓰이는 단어들은 보통 “모름”으로 처리하곤 한다. 다시 말해 문장의 앞 단어들을 통해서 그 뒤의 단어를 제한된 단어 집단에서 고르는 일종의 분류 문제가 된다. 하지만 인간이 사용하는 단어나 개념의 수는 훨씬 많다. 예를 들어 위키재단에서 운영하는 오픈 사전인 Wiktionary의 경우, 영문 단어의 수가 현재 700만 개 정도 등록되어 있다.3) 사전에 등재되지 않은 단어와 신조어까지 고려한다면 그 수는 더 늘어날 것이다. 하지만 RNN은 구조적 한계로 일정 숫자 이상의 단어를 사용하기 어렵다. 또한 RNN에서는 글에 나온 순서대로 단어를 입력한다. 그래서 입력된 지 오래된 앞쪽 단어의 영향이 점점 줄어든다. 이는 모델 크기를 키우면 어느 정도 해결되지만, 모델 크기가 늘어나는 양에 비례해서 효율이 올라가지 않는다. 물리적 메모리와 컴퓨터의 성능에는 한계가 존재하므로 모델을 무작정 키울 수도 없고, 오히려 키워도 성능이 떨어지는 시점도 온다. 거기에 문장 앞의 모든 정보를 가지고 있고, 다음 단어를 예측하려면 순서대로 앞 단어부터 읽어야 하므로 여러 컴퓨터에서 동시에 처리하게 하기 어려워 병렬화가 어렵다. 즉 모델을 키우는 데에 한계가 존재하고 대형 모델을 만드는 것이 불가능하다.

이를 해결하기 위해 나온 것이 Attention mechanism이다.4) Attention은 기본적으로 문장을 한 개의 벡터로 만들어서 입력으로 다시 사용하는 RNN과 다르게, 모든 단어에서 나온 은닉 상태를 각각 따로 기억하고 있다. 그리고 단순히 앞의 단어들부터 더해가는 것이 아니라 새로 등장한 단어들을 보고 앞의 단어 중 “더 많이 참조해야 할” 단어(혹은 hidden state)를 먼저 찾아내고, 이를 가중치 합으로 더해서 언어 모델의 새로운 입력값으로 사용하게 된다. 즉, 주목해야 할 곳과 아닌 곳을 구분한다는 뜻에서 이를 attention이라고 부른다. Attention은 앞에서 말한 각 단어의 은닉 상태와 “어떤 위치를 참조해야 하는지”를 결정하는 가중치(weight)를 동시에 학습하게 된다. 그리고 이 가중치를 학습함을 통해서 수학적으로는 어떤 벡터에 가중치를 곱해 더하는 것과 유사한 방식으로 중요한 단어를 더 많이 참조하게 한다. 원래는 이러한 attention과 RNN을 결합하여 가중치 합으로 구해진 은닉 상태를 RNN의 입력으로 사용하는 형태로 사용되어 왔다. 이는 attention만으로는 단어의 순서를 파악할 수 없어서, 순서정보를 활용하는 RNN과 결합하는 형태로 보조하여 사용했던 것이다. 하지만 2017년 Google이 Transformer라는 새로운 개념을 제시하여 새로운 방향성이 열리게 된다. Transformer는 최근 몇 년간 등장한 BERT5)나 GPT6)7)8) 계통의 언어 모델의 기반 구조이다. 기존의 attention+RNN 기반의 모델에서 RNN을 제거하고, 순수하게 attention만 남기는 것으로 구성되어 있는데 단어가 주어지면 그에 해당하는 attention 구조만으로 단어의 임베딩을 참조하게 된다. 또한 attention이 순서를 모르는 점을 고려하여 단어의 순서 정보를 같이 학습해 주는데 이를 positional embedding이라고 한다. 이를 표현하기 위해 단어가 전체 문장에서 어느 정도 위치에 존재하는지를 신호의 위상(phase)과 같이 생각한다. 수학적으로는 주로 삼각함수의 합을 사용하는데, 푸리에변환 등을 사용하여서도 구성할 수 있다. 

원래 Attention mechanism은 RNN의 은닉 상태를 softmax layer를 통해 한 개 벡터로 합친다. Transformer는 이러한 방식을 버리고 query, key, value 등 여러 가지 벡터를 만들어서 이를 feed-forward network에 입력하여 벡터를 찾는다. RNN을 버리면 어떤 이점이 있을까? RNN은 앞 단어의 정보를 순차적으로 알아야 하므로 순차적인 처리를 하는 것이 기본이라 병렬적인 분산학습이 어렵다. 하지만 transformer는 이러한 구조에서 다양한 장점을 가진다. 각 위치에서 문장을 한 번에 참조하기 때문에 문장의 임의 위치부터 학습하는 것이 가능하고, 분산하여 다른 노드에서 학습한 이후에 모델을 다시 합치는 방식으로 큰 모델을 학습할 수도 있다. BERT는 이러한 모델의 시조새 같은 존재이며, 그 이후 등장한 GPT-1,2,3은 기본적으로 모델의 형태는 유사하지만 모델의 크기와 학습에 쓴 데이터의 양이 점점 커져 왔다. GPT-3의 경우 약 1750억 개 파라미터이며, 2021년에는 Nvidia와 MS가 손을 잡고 5300억개 파라미터의 Megatron-turing이라는 모델을 개발했다.[9] 여기서 파라미터라는 것은 신경망에서 벡터들을 계산할 때 주어지는 가중치들이 몇 개나 되는지를 말하는데, 많을수록 더 많은 노드로 입력 벡터를 쪼개 계산한 후 다시 한 벡터로 합치는 과정을 거치게 된다. 즉 훨씬 더 큰 메모리와 계산 성능이 필요하다.

이러한 초대형 모델을 학습하기 위해서는 한 대의 컴퓨터로는 한없이 오랜 시간이 걸릴 것이다. 그래서 여러 대의 컴퓨터 혹은 노드로 분산학습을 시행하게 된다. 하지만 이런 분산 학습은 전체 컴퓨터의 성능에 비해서 모델을 다시 합치고 동기화하는 과정 등에서 속도에 손해가 발생하고, 이론상 최대 학습 속도에 비해 20~30% 정도밖에 되지 않는 낮은 효율을 보인다. 모델은 점점 커지고 있으므로 이러한 모델을 한 번 학습할 때 필요한 계산 요구량도 점점 커지는데, 이러한 낮은 효율성은 비용이나 환경 등에 큰 문제가 될 수 있다. 가장 최근의 결과로 2022년 Google의 Palm은 40~50% 정도의 높은 효율을 달성했지만, 여전히 유휴 이론 계산량에는 못 미치는 결과를 보인다.[10] 매년 모델이 수십 배에서 수백 배로 커지고 있는 현재의 경향성이 계속 유지될 수 있을까? 아니면 attention과 transformer를 대체할 새로운 방법론이 등장해서 언어 모델을 완전히 바꾸게 될까? 인간이 만드는 인공지능에서 인간이 창조하는 정보를 이해하는 것은 매우 중요하고, 인간은 역사 시대 이후로 대부분의 정보를 문서로 저장하고 있으므로 언어 모델의 발전은 인공지능의 발전에서 매우 중요한 역할을 한다. 지금까지 언어 모델의 성능이 많이 높아졌지만, 아직도 개선해야 할 부분들은 존재한다. 어떤 형태로 새로운 모델이 등장하고 어떤 형태로 발전할지 예측하고 실제로 그 과정에 참여하는 것도 즐거운 경험이 될 것이라 생각한다.


*아태이론물리센터의 <크로스로드>지와의 상호 협약에 따라 크로스로드에 게재되는 원고를 본 칼럼에 게재합니다. 본 원고의 저작권은 아태이론물리센터와 원저작자에게 있습니다.
*‘과학과 미래 그리고 인류’를 목표로 한 <크로스로드>는 과학 특집, 과학 에세이, 과학 유머, 과학 소설, 과학 만화 등 다양한 장르의 과학 글을 통해 미래의 과학적 비전을 보여주고자 아시아 태평양 이론물리센터(Asia Pacific Center for Theoretical Physics)에서 창간한 과학 웹 저널입니다.
http://crossroads.apctp.org/
*아시아태평양이론물리센터는 정부의 과학기술진흥기금 및 복권기금 지원으로 사회적 가치 제고에 힘쓰고 있습니다.
각주
1)Ali Mehri and Maryam Jamaati, Physics Letters A 381(31), 2470 (2017).
2)Yong Yu et al., Neural Compututation 31(7), 1235 (2019).
3)https://www.wiktionary.org/.
4)Ashish Vaswani et al., “Attention is all you need,” Advances in neural information processing systems 30 (2017).
5)Jacob Devlin et al., “Bert: Pre-training of deep bidirectional transformers for language understanding”, (arXiv preprint) arXiv:1810.04805 (2018).
6)Alec Radford et al., “Improving language understanding by generative pre-training” (2018).
7)Alec Radford et al., “Language models are unsupervised multitask learners,” OpenAI blog 1.8 (2019): 9.
8)Tom Brown et al., Advances in neural information processing systems 33, 1877 (2020).
9)Mohammad Shoeybi et al., “Megatron-lm: Training multi-billion parameter language models using model parallelism,” (arXiv preprint) arXiv:1909.08053 (2019).
10)https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html.
물리대회물리대회
사이언스타임즈사이언스타임즈


페이지 맨 위로 이동