Natural Language Processing Theory : 사전 학습 언어 모델(Pre-trained Language Model)
언어 모델(Language Model)
언어 모델(Language Model)은 문장이 얼마나 자연스러운지를 확률로 나타내는 모델입니다. “나는 학교에 간다”는 높은 확률을, “학교에 나는 간다는”은 낮은 확률을 받아야 합니다. 문장 전체의 확률은 직접 구하기 어렵지만, 확률의 연쇄 법칙을 사용하면 앞의 토큰들이 주어졌을 때 다음 토큰의 확률을 차례로 곱한 것으로 나눌 수 있습니다.
즉, 언어 모델을 만든다는 것은 다음 토큰을 예측하는 모델을 만드는 것과 같습니다. 순환 신경망과 트랜스포머의 디코더는 앞의 토큰을 보고 다음 토큰의 확률 분포를 출력하므로, 그 자체로 언어 모델입니다.
언어 모델의 성능은 보통 퍼플렉서티(Perplexity)로 측정합니다. 정답 토큰에 부여한 확률의 로그를 평균해 지수로 되돌린 값입니다.
퍼플렉서티는 모델이 다음 토큰을 고를 때 평균적으로 몇 개의 후보 사이에서 헷갈리는지로 해석할 수 있습니다. 매 시점 정답에 0.01의 확률을 준다면 퍼플렉서티는 100이 되며, 이는 100개의 후보 중 하나를 무작위로 고르는 것과 같은 수준입니다. 정답에 0.5를 준다면 퍼플렉서티는 2로, 두 후보 사이에서만 고민하는 셈입니다. 낮을수록 좋은 모델입니다.
언어 모델이 특별한 이유는 정답 레이블이 필요 없다는 점입니다. 감성 분석을 학습하려면 사람이 리뷰마다 긍정과 부정을 표시해야 하지만, 다음 토큰 예측은 문장 자체가 정답입니다. 인터넷의 모든 글, 책, 뉴스가 그대로 학습 데이터가 됩니다. 이처럼 데이터에서 정답을 스스로 만들어 학습하는 방식을 자기 지도 학습(Self-supervised Learning)이라 합니다.
사전 학습과 미세 조정
컴퓨터 비전에서는 이미 2010년대 초반부터, ImageNet처럼 큰 데이터셋으로 학습한 모델을 가져와 작은 데이터셋의 과제에 맞게 다시 학습시키는 방법이 널리 쓰였습니다. 큰 데이터로 배운 선, 질감, 형태 같은 일반적인 특징이 다른 과제에도 그대로 쓸모 있기 때문입니다. 한 과제에서 배운 지식을 다른 과제로 옮기는 이 방법을 전이 학습(Transfer Learning)이라 합니다.
자연어 처리에서도 Word2Vec 같은 사전 학습된 단어 임베딩을 가져와 쓰는 일은 흔했습니다. 그러나 이는 모델의 첫 층만 옮겨 오는 것이었고, 문장을 이해하는 나머지 층은 과제마다 처음부터 학습해야 했습니다. 2018년을 기점으로, 언어 모델로 모델 전체를 미리 학습한 뒤 과제에 맞게 조금만 고쳐 쓰는 방식이 자리 잡았습니다.
사전 학습(Pre-training): 레이블이 없는 대량의 텍스트로 언어 모델 과제를 학습합니다. 문법, 단어의 의미, 문맥에 따른 쓰임, 세상에 대한 상식까지 텍스트에 담긴 일반적인 언어 지식을 습득하는 단계입니다. 많은 데이터와 계산이 필요하지만 한 번만 하면 됩니다.미세 조정(Fine-tuning): 사전 학습된 모델 위에 과제에 맞는 작은 출력 층을 얹고, 레이블이 있는 소량의 데이터로 모델 전체를 조금 더 학습합니다. 이미 언어를 이해하는 모델에서 출발하므로 적은 데이터와 짧은 시간으로도 높은 성능을 얻습니다.
이 방식이 자리 잡으면서 자연어 처리의 작업 방식이 크게 바뀌었습니다. 이전에는 과제마다 모델 구조를 새로 설계했지만, 이제는 하나의 사전 학습 모델을 여러 과제에 재사용하는 것이 표준이 되었습니다. 사전 학습 모델이 여러 과제의 공통 기반이 된다는 뜻에서 기반 모델(Foundation Model)이라는 이름도 생겨났습니다.
ELMo
2018년 앨런 인공지능 연구소(AllenAI)가 발표한 ELMo(Embeddings from Language Models)는 단어 임베딩에서 다룬 정적 임베딩의 한계를 정면으로 겨냥했습니다. Word2Vec은 “배”라는 단어에 항상 같은 벡터를 주지만, ELMo는 문장에 따라 다른 벡터를 줍니다.
ELMo는 두 방향의 LSTM 언어 모델로 구성됩니다. 하나는 왼쪽에서 오른쪽으로 읽으며 다음 단어를, 다른 하나는 오른쪽에서 왼쪽으로 읽으며 이전 단어를 예측합니다. 대량의 텍스트로 이 두 언어 모델을 학습한 뒤, 각 단어 위치에서 두 방향의 은닉 상태를 층별로 가중합해 그 단어의 표현으로 사용합니다. “배를 타고 강을 건넜다”와 “배가 아파 병원에 갔다”의 “배”는 서로 다른 문맥을 거쳤으므로 서로 다른 벡터가 됩니다.
ELMo는 질의응답, 개체명 인식, 감성 분석 등 여섯 개 과제에서 당시 최고 성능을 갱신했습니다. 다만 ELMo의 벡터는 기존 과제별 모델의 입력으로 덧붙여 쓰는 방식이었고, 모델 전체를 미세 조정하는 방식은 아니었습니다. 또한 두 방향의 언어 모델이 따로 학습되어 마지막에 이어 붙여질 뿐, 한 층 안에서 양쪽 문맥을 동시에 보지는 못했습니다.
GPT
같은 해 OpenAI는 트랜스포머의 디코더만 사용한 언어 모델 GPT(Generative Pre-trained Transformer)를 발표했습니다. 인코더와 인코더-디코더 어텐션을 제거하고, 마스크드 셀프 어텐션을 사용하는 디코더 블록 12개를 쌓은 구조입니다.
GPT의 사전 학습은 가장 기본적인 언어 모델 과제, 즉 앞의 토큰을 보고 다음 토큰을 예측하는 것입니다. 각 위치는 자신보다 앞의 토큰만 볼 수 있으므로, 이를 인과적 언어 모델(Causal Language Model)이라 합니다. 약 7,000권의 미출간 도서로 이루어진 BooksCorpus로 사전 학습했으며, 매개변수는 약 1억 1,700만 개였습니다.
미세 조정할 때는 과제의 입력을 하나의 토큰 나열로 바꾸어 넣습니다. 두 문장의 관계를 판단하는 과제라면 두 문장 사이에 구분 토큰을 넣어 이어 붙이고, 마지막 토큰의 출력 벡터에 분류 층을 얹습니다. 과제마다 모델 구조를 바꾸지 않고 입력 형식만 바꾸어 대응한 것입니다. GPT는 실험한 12개 과제 중 9개에서 당시 최고 성능을 기록했습니다.
GPT의 가장 큰 장점은 사전 학습 과제와 문장 생성이 같은 일이라는 점입니다. 다음 토큰을 예측하도록 학습했으므로, 예측한 토큰을 다시 입력에 붙이는 과정을 반복하면 그대로 문장이 생성됩니다. 이 성질은 다음 강좌에서 다룰 대규모 언어 모델로 이어집니다. 반면 각 위치가 왼쪽 문맥만 볼 수 있다는 점은, 문장 전체를 보고 이해해야 하는 과제에서는 약점이 됩니다.
BERT
2018년 말 구글이 발표한 BERT(Bidirectional Encoder Representations from Transformers)는 GPT와 반대로 트랜스포머의 인코더만 사용합니다. 인코더의 셀프 어텐션에는 마스크가 없으므로, 모든 위치가 문장의 왼쪽과 오른쪽을 동시에 볼 수 있습니다.
그런데 양방향으로 보는 모델은 다음 토큰 예측으로 학습할 수 없습니다. 예측해야 할 다음 토큰이 이미 입력에 보이기 때문입니다. BERT는 이 문제를 빈칸 채우기 문제로 바꾸어 해결했습니다.
마스크드 언어 모델(Masked Language Model, MLM): 입력 토큰의 15%를 무작위로 골라 가린 뒤, 양쪽 문맥을 보고 원래 토큰을 맞히도록 학습합니다. “나는 [MASK]에 가서 책을 빌렸다”에서 [MASK]에 들어갈 “도서관”을 예측하려면 앞의 “나는”과 뒤의 “책을 빌렸다”를 모두 보아야 합니다.다음 문장 예측(Next Sentence Prediction, NSP): 두 문장을 이어 붙여 넣고, 두 번째 문장이 실제로 첫 번째 문장 바로 다음에 오는 문장인지 맞히도록 학습합니다. 절반은 실제 다음 문장을, 절반은 무작위 문장을 넣습니다.
마스크드 언어 모델에는 한 가지 문제가 있습니다. 사전 학습 때는 입력에 [MASK] 토큰이 등장하지만, 미세 조정과 실제 사용 때는 이 토큰이 나타나지 않습니다. 이 불일치를 줄이기 위해 BERT는 고른 15%의 토큰 중 80%만 [MASK]로 바꾸고, 10%는 무작위 토큰으로 바꾸며, 나머지 10%는 그대로 둡니다. 모델은 어떤 토큰이 바뀌었는지 알 수 없으므로, [MASK]가 아닌 토큰에 대해서도 항상 문맥에 맞는지 확인하는 표현을 만들게 됩니다.
BERT는 입력의 맨 앞에 [CLS] 토큰을, 문장 사이와 끝에 [SEP] 토큰을 넣습니다. [CLS] 위치의 출력 벡터는 셀프 어텐션을 통해 문장 전체의 정보를 모으므로, 문장 분류 과제에서는 이 벡터 위에 분류 층 하나만 얹으면 됩니다. 문장 안의 각 단어에 태그를 붙이는 과제라면 각 위치의 출력 벡터를, 문서에서 답이 있는 구간을 찾는 질의응답이라면 각 위치가 답의 시작과 끝일 확률을 계산합니다.
BERT는 BooksCorpus와 영어 위키백과로 사전 학습했으며, 12층의 BERT-Base(약 1억 1,000만 개)와 24층의 BERT-Large(약 3억 4,000만 개) 두 가지 크기로 공개되었습니다. 문장 이해 능력을 평가하는 GLUE 벤치마크와 질의응답 데이터셋 SQuAD를 비롯한 11개 과제에서 최고 성능을 큰 폭으로 갱신하며, 사전 학습과 미세 조정을 자연어 처리의 표준으로 만들었습니다.
- Tip : 2019년 페이스북의
RoBERTa는 BERT를 다시 실험해, 다음 문장 예측은 오히려 없어도 되며 더 많은 데이터로 더 오래 학습하고 마스크 위치를 매번 새로 고르는 것이 더 중요하다는 것을 보였습니다. 사전 학습 모델의 성능이 구조만큼이나 데이터와 학습량에 좌우된다는 점을 보여 준 결과입니다.
T5
2019년 구글의 T5(Text-to-Text Transfer Transformer)는 트랜스포머의 인코더와 디코더를 모두 사용합니다. T5의 핵심은 구조보다 문제 설정에 있습니다. 분류, 번역, 요약, 질의응답 등 모든 과제를 텍스트를 입력받아 텍스트를 출력하는 형식으로 통일했습니다.
| 과제 | 입력 텍스트 | 출력 텍스트 |
|---|---|---|
| 번역 | translate English to German: That is good. | Das ist gut. |
| 감성 분류 | sst2 sentence: This movie is wonderful. | positive |
| 요약 | summarize: (긴 기사 본문) | (요약문) |
| 문장 유사도 | stsb sentence1: … sentence2: … | 3.8 |
분류 과제도 레이블을 “positive”라는 단어로, 유사도 점수도 “3.8”이라는 문자열로 출력합니다. 과제마다 출력 층을 따로 만들 필요 없이 하나의 모델, 하나의 손실 함수, 하나의 디코딩 방식으로 모든 과제를 처리할 수 있습니다. 입력 앞에 붙은 “translate English to German:” 같은 문구가 모델에게 어떤 과제인지 알려 주는데, 이는 다음 강좌에서 다룰 프롬프트의 원형이라 할 수 있습니다.
T5는 사전 학습 과제로 연속된 토큰 구간을 가리고 복원하는 스팬 손상(Span Corruption)을 사용했습니다. 원문 “나는 어제 도서관에서 책을 빌렸다”에서 두 구간을 가리면, 인코더 입력은 “나는 <X> 책을 <Y>“가 되고 디코더는 “<X> 어제 도서관에서 <Y> 빌렸다”를 생성하도록 학습합니다. 가려진 부분만 생성하면 되므로 BERT처럼 빈칸을 채우면서도 디코더로 문장을 생성하는 능력을 함께 기릅니다.
T5 연구진은 웹에서 수집한 텍스트를 걸러 만든 약 750GB의 C4(Colossal Clean Crawled Corpus) 데이터셋으로, 최대 110억 개의 매개변수를 가진 모델까지 학습했습니다. 또한 구조, 사전 학습 과제, 데이터셋의 크기와 품질을 하나씩 바꾸어 가며 체계적으로 비교해, 이후의 연구에 많은 기준점을 제공했습니다.
세 가지 구조
트랜스포머에서 갈라져 나온 사전 학습 모델은 크게 세 가지 구조로 나눌 수 있습니다.
| 구조 | 대표 모델 | 사전 학습 과제 | 어텐션이 보는 범위 | 잘하는 과제 |
|---|---|---|---|---|
| 인코더 전용(Encoder-only) | BERT, RoBERTa | 마스크드 언어 모델 | 문장 전체(양방향) | 분류, 개체명 인식, 추출형 질의응답 |
| 디코더 전용(Decoder-only) | GPT 계열 | 다음 토큰 예측 | 왼쪽 문맥만(단방향) | 문장 생성, 대화 |
| 인코더-디코더(Encoder-Decoder) | T5, BART | 구간 복원 | 인코더는 양방향, 디코더는 단방향 | 번역, 요약 |
2018년부터 몇 년간은 문장 이해 과제에서 BERT 계열이, 생성 과제에서 GPT 계열과 인코더-디코더 모델이 강세를 보였습니다. 그러나 모델의 크기가 커지면서 흐름이 바뀌었습니다. 디코더 전용 모델은 구조가 가장 단순하고, 모든 토큰이 다음 토큰 예측의 학습 신호가 되어 데이터를 가장 효율적으로 사용하며, 분류 과제도 생성으로 바꾸어 풀 수 있습니다. 오늘날 대부분의 대규모 언어 모델이 디코더 전용 구조를 택한 이유입니다.
- Tip : 한국어처럼 영어와 특성이 다른 언어는 영어 위주로 학습한 모델로는 성능이 충분하지 않은 경우가 많습니다. 토큰화에서 다룬 것처럼 어휘 사전이 영어 중심이면 한국어 문장이 지나치게 잘게 쪼개지기 때문입니다. 그래서 한국어 말뭉치와 한국어에 맞춘 토크나이저로 사전 학습한 모델들이 따로 개발되었고, 한국어 이해 능력을 평가하는
KLUE같은 벤치마크도 만들어졌습니다.
사전 학습 언어 모델 정리
사전 학습 언어 모델은 레이블 없는 텍스트에서 언어 자체를 먼저 배우고, 과제는 나중에 조금만 배운다는 발상으로 자연어 처리의 방식을 바꾸었습니다. 과제별 데이터가 적어도 높은 성능을 낼 수 있게 되었고, 하나의 모델이 여러 과제의 공통 기반이 되었습니다.
| 모델 | 발표 | 구조 | 사전 학습 과제 | 의의 |
|---|---|---|---|---|
| ELMo | 2018 | 양방향 LSTM | 정방향 · 역방향 언어 모델 | 문맥에 따라 달라지는 단어 표현 |
| GPT | 2018 | 트랜스포머 디코더 | 다음 토큰 예측 | 모델 전체의 사전 학습과 미세 조정 |
| BERT | 2018 | 트랜스포머 인코더 | 마스크드 언어 모델, 다음 문장 예측 | 양방향 문맥, 이해 과제의 표준 |
| T5 | 2019 | 인코더-디코더 | 스팬 손상 | 모든 과제를 텍스트-투-텍스트로 통일 |
사전 학습 모델의 성능은 모델이 클수록, 데이터가 많을수록 꾸준히 좋아졌습니다. 연구자들은 곧 이런 질문을 던지게 됩니다. 모델을 수백 배 더 키우면 어떤 일이 일어날까? 미세 조정 없이도 과제를 풀 수 있을까? 다음 강좌에서는 이 질문에서 출발한 대규모 언어 모델을 다룹니다.
- Writer by : 윤대희
댓글 남기기