으하하 논문 한 번 읽기 쉽지 않군요...!!!! 정확하게 모르는 개념들이 너무 많아서 하나 읽고 찾아보고 하나 읽고 공부하고 하는 중입니다.. 크킄.. 저런.>~!! slow but steady~ 를 지향하며.. 오늘도 한 걸 음 ~ 나아가요~
Pre-trained Language Model(사전 학습된 언어 모델)은 대량의 텍스트 데이터를 이용해 미리 학습된 모델을 의미한다. 이 모델은 언어의 규칙, 문맥, 단어의 의미 등을 학습하여 기본적인 언어 이해 능력을 갖추고 있다. 이후 특정 작업, 예를 들면 감정 분석, 기계 번역, 질문 답변 등에 맞춰 fine-tuning을 통해 해당 문제를 풀기 위한 더 specific한 모델이 된다.
BERT나 GPT 같은 모델들이 모두 pre-trained language model이다. 예를 들어 GPT는 인터넷에 있는 대규모 텍스트 데이터를 읽고 언어의 문법과 패턴을 학습한 뒤 사용자가 원하는 텍스트를 생성하거나 질문에 답하는 작업을 수행한다. 다만 사용자의 답변으로 fine tuning되지는 않는다.특정 회사의 고객 서비스 데이터에 맞게 fine-tuning이 될 수 있다. 이번에 Siri에 적용될 때 아마 fine tuning 과정을 거쳤지 않았을까 싶다. 크킄 지피티는 모르는 척했다 ㅋ.. 정보가 없댄다 ~
Abstract
BERT는 Bidirectional Encoder Representations from Transformers의 약자로 구글의 Devlin이 제안한 자연어 처리 모델이다. ELMo, GPT와 같은 최근의 언어 표현 모델들과 다르게 BERT는 정답이 없는 데이터(unlabeled text)로부터 deep 양방향 표현을 미리 학습하도록 설계되었다. 즉, 입력된 텍스트를 양방향으로 처리하여 양측의 정보 모두를 사용해 문맥을 이해한다는 뜻이다. GPT나 ELMo는 텍스트를 왼쪽에서 오른쪽으로만 순차적으로 처리한다. 반면, BERT는 양방향으로 문맥을 학습하기 때문에 왼쪽과 오른쪽 문맥을 모두 고려한 풍부한 표현 생성이 가능하다. 따라서 사전 학습된 BERT 모델은 추가적으로 하나의 출력층만 추가하면 질문 답변이나 언어 추론과 같은 다양한 작업에 대한 모델을 만들 수 있다. 기존의 복잡한 아키텍처 변경 없이 다양한 NLP(Natural Language Processing)에 적용할 수 있다는 장점이 있다.
왼쪽에서 오른쪽으로만 처리하는 방법의 문제점
ex) John forgot his keys because he was late. 이라는 문장이 있을 때 he가 John인지 다른 사람인지 의미가 모호할 수 있다. 문장이 더 길어져서 다른 대명사들이 등장한다면 문맥을 파악하는 데 어려움이 있을 수 있다.
앞 뒤가 밀접하게 연관되어 있는 문장일 경우 후반부의 정보가 앞부분에 미치는 영향을 즉시 반영하기 어렵다. 또한 왼쪽에서 오른쪽으로만 처리하는 모델은 현재 단어를 이해하기 위해 이전 단어들의 정보를 순차겆긍로 처리하고 저장해야한다. 이로 인해 병렬 처리가 어려워지고 긴 문장이나 복잡한 문맥에서는 효율성이 떨어지는 경향이 있다.
한 단어가 여러 가지 의미를 가질 수 있을 때 전체 문맥을 파악하기 어려운 경우가 발생할 수 있다. 특히 단어가 문장 후반부에서 의미가 확정될 때 이전 정보만을 보고서는 정확한 의미를 파악할 수 없다.
Introduction
Pre-trained Language Model은 추론, paraphrasing 등 여러 자연어 처리 작업에서 효과적인 것으로 입증되었다. 이러한 pre-trained language model을 특정 작업에 맞게 적용하는 방법에는 크게 두 가지로 나뉜다.
1. feature-based Approach
PLM의 결과인 pre-trained representations를 가져와서 특정 작업에 맞는 별도의 모델이나 아키텍처에서 특징으로 활용하는 방식이다.
Ex) ELMo (feature-based Approach로 특정 작업에 적용되는 PLM)
사전 학습 단계에서 두 개의 단방향 LSTM을 사용하여 문맥에 따른 단어 임베딩을 생성한다. (하나는 forward, 다른 하나는 backward 이를 결합하여 양방향 문맥 정보를 포함한 단어 임베딩을 생성한다.) 동일한 단어라도 문장에서의 위치와 주변 단어들에 따라 다른 의미를 반영한 벡터를 제공하기 때문에 동음이의어에 대한 처리가 가능하다. 이를 감정 분석, 문장 분류 등 특정 작업에 사용한다.
2. fine-tuning Approach
PLM 전체를 가져와 새로운 작업에 맞는 최소한의 추가 파라미터만 도입한다. 그리고 PLM의 모든 parameter를 학습 데이터에 맞게 조금씩 업데이트하면서 특정 작업에 최적화 시킨다.
Ex) Generative Pre-trained Transformer(OpenAI GPT) (Fine-tuning Approach로 특정 작업에 적용되는 PLM)
사전 학습 단계에서 문장을 왼쪽에서 오른쪽으로 순차적으로 일반적인 언어 표현을 학습한다. 이후 fine-tuning 단계를 통해 번역, 대화 생성 등 특정 작업에 맞춰 조정된다.
Feature-based 접근법: PLM의 결과를 활용하지만 PLM 자체는 수정하지 않음.
Fine-tuning 접근법: PLM 전체를 가져와 새로운 작업에 맞게 추가 학습함.
두 방법 모두 사전 학습 단계에서는 일반적인 언어 표현을 학습하는 것을 목표로 한다. 또한 단방향 언어 모델로 한 쪽으로만 텍스트를 읽는다는 공통점이 있다.
논문에서는 단방향 모델이 위의 접근법, 특히 fine-tuning appoarch의 성능을 저하시킨다고 말하고 있다. 단방향 모델로 인해 사전 학습에서 사용할 수 있는 모델 아키텍처에 제한이 생긴다는 점을 지적하는 것이다. OpenAI의 GPT의 경우 왼쪽에서 오른쪽으로 이동하도록 구성이 되어있어서 현재 토큰이 이전 토큰만 참조할 수 있다는 단점이 있다. 따라서 질문에 대한 답을 도출하는 것과 같은 양방향에서의 맥락을 이해하는 것이 중요한 task에서는 좋지 않은 결과를 도출할 수 있다.
따라서 해당 논문에서는 이러한 한계를 극복할 수 있는 새로운 architecture인 BERT를 제안한다. BERT는 Masked Language Model (MLM)을 사용해서 성능을 향상시킨다. MLM은 랜덤하게 입력 토큰의 일부를 마스킹시키고 문맥을 기반으로 마스킹된 토큰들의 원래 값을 정확하게 예측하는 architecture을 말한다. 이는 기존 단방향 언어 모델과 다르게 양방향의 문맥이 모두 학습 가능한 deep bidirectional Transformer의 사전 학습이 가능하다. 또한 MLM과 더불어 next sentence prediction(NSP)를 통해 text-pair representation도 pre-train한다고 말한다.
Related Work
pre-training language representation에는 긴 역사가 있기 때문에 가장 많이 사용되는 몇 가지 만을 다루었다.
일단은 BERT부터 공부하기 위해 Pre-training language representation을 얻기 위한 관련된 세 가지 방법들은 생략하고 시간이 남으면 공부하도록 하겠다..>!...
1. Unsupervised Feature-based Approaches
2. Unsupervised Fine-tuning Approaches
3. Transfer Learning from Supervised Data
3 BERT
BERT를 학습시키는 과정은 총 두 단계로 pre-training과 fine-tuning이 있다. Pre-training 단계에서는 model이 unlabeled data로 학습되며 fine-tuning 단계에서는 앞서 학습 결과로 얻어진 parameter를 가지고 labeled data를 이용하여 요구하는 downstream task에 대한 parameter를 학습하게 된다. 따라서 실제 task에서 사용되는 모델은 초기에는 동일한 parameter를 가지고 시작되지만 fine-tuning 과정을 거치면서 서로 다른 모델을 가지게 된다.

- Pre-trained Architecture
이 단계에서는 Masked Language Model(MLM)과 Next Sentence Prediction(NSP)이라는 두 가지 학습 목표를 사용해 일반적인 언어 패턴과 문맥 정보를 학습한다. 해당 과정을 통해 생성된 모델은 언어에 대한 일반적인 이해 능력을 얻는다.
- Fine-tuned Architecture
해당 단계에서는 특정 작업에 맞게 모델이 미세 조정된다. 질문 응답(SQuAD), 문장 분류(MNLI), 개체명 인식(NER) 같은 특정 작업에 맞춰 조정된다. 이 과정에서도 모델의 기본 구조는 유지된다. 다만, 특정 작업에 필요한 출력 레이어만 추가하거나 조정될 뿐이다.
기존의 NLP 모델들은 작업별로 별도의 구조를 설계하거나 학습해야했다. 질문 응답용 모델, 문장 분류용 모델 등 각각의 요구사항에 맞춰 구조를 따로 설계해야 했던 것이다. 그러나 BERT는 다양한 NLP 작업을 처리할 수 있도록 설계된 하나의 통합된 구조를 사용해 추가 학습만 수행하면 되도록 설계되었다. 이로 인해 fine-tuning 과정이 훨씬 단순하고 효율적이다.
조금 더 자세하게 BERT architecture에 대해 알아보도록 하자.
Model Architecture
BERT의 architecture는 multi-layer bidirectional transformer encoder로 구성되어있다. 기존의 transformer는 encoder-decoder 구조로 구성되어 encoder에서는 입력 문장을 이해하고 문맥 표현을 생성하고 decoder에서는 생성된 표현을 바탕으로 번역, 생성 등 원하는 출력을 만드는 구조였다. 반면, BERT는 encoder만을 사용하여 문맥을 이해하고 문장을 더 잘 표현하도록 구성하였다. 양방향 Transformer encoder를 여러 층 쌓을 것이다.
해당 논문에서는 두 가지의 모델을 제시한다.
BERT-BASE는 L = 12, H = 768, A = 12, Total Parameters = 100M(1.1억 개)의 parameter를 가진 모델이다.
BERT-LARGE는 L = 24, H = 1024, A = 16, Total Parameters = 340M(3.4억 개)의 parameter를 가진 모델이다.
여기서 L은 Transformer Encoder Layer의 개수를 의미하고 H는 각 layer에서 사용하는 임베팅 벡터의 차원(길이), A는 self-attention head의 개수이다.
(Self-Attention Head는 self-attention 메커니즘의 병렬 처리 단위이고 Self-Attention은 문장의 각 단어가 다른 단어들과의 관계(문맥)를 학습하는 과정이다. 여러 개의 attention head를 사용하면 모델이 다양한 관점에서 단어 간 관계를 학습할 수 있다.예를 들어 하나의 head는 문장의 문법적 구조를, 다른 head는 문장의 의미적 관계를 학습하며 이렇게 여러 개의 attention head를 병렬 처리하면 모델의 학습 능력이 강화된다.)
BERT-BASE는 OpenAI의 GPT와 비교를 목적으로 동일한 크기로 제작되었다. BERT는 현재 토큰의 좌우 문맥을 모두 파악할 수 있는 bidirectional self-attention을 사용하는 반면, GPT는 모든 토큰이 왼쪽 토큰들만을 파악하여 attention을 계산하는 constrained self-attention이 사용된다. (BERT가 더 좋다고 계속 강조 중..)
Input/Output Representations
BERT를 다양한 task에 활용하기 위해 단일 문장과 문장 쌍(<Question, Answer>)을 하나의 token sequence로 처리할 수 있도록 하였다. 또한 WordPiece 토큰화 방식을 사용하여 입력 텍스트를 처리한다. 이는 단어를 더 작은 단위로 나누는 토큰화 방법으로 BERT에서는 30,000개의 토큰으로 구성된 vocabulary를 사용한다. (예를 들어 unbelievable -> 'un', '##believ', '##able' (환율이 1463원으로 오늘 또 올해 최고치를 찍어버린게 언빌리버블...))
여기서 문장은 실제 문장을 의미한다기 보다는 단지 연속적인 텍스트를 나타낸다. 그리고 sequence는 BERT로 입력되는 전체 토큰 시퀀스를 의미한다.
BERT는 총 3가지의 Embedding vector를 합쳐서 input으로 사용한다.
먼저 모든 sequence의 시작 부분의 [CLS] 토큰을 추가한다. 해당 토큰에 classifier(feed-forward network와 softmax함수 이용)를 붙이면 분류를 할 수 있어서 classification task에서 사용된다.
또한 문장 간 경계를 표시하기 위해 [SEP] 토큰을 사용한다. 모든 문장의 끝에 해당 토큰을 붙이기 때문에 단일 문장은 [CLS] 문장 [SEP], 문장 쌍은 [CLS] 문장 A [SEP] 문장 B [SEP]로 나타낸다. 따라서 Figure 1을 보면 문장의 마지막에 [SEP]가 추가된 것을 확인할 수 있다.
따라서 BERT는 각 단어의 임베딩 벡터인 token embedding, 문장과 문장을 구분하기 위해 추가되는 segment embedding, 각 토큰이 시퀀스 내에서 몇 번째 위치에 있는지를 나타내는 position embedding, 이 세 가지를 더해 최종적으로 입력 벡터를 만든다.
(다만 이러한 다양한 입력을 받아야되기 때문에 기존의 방법론 대비 활용하기 어려운 요인이 있다.)

3.1 Pre-training BERT
BERT는 ELMo와 GPT와 달리 전통적인 left-to-right 혹은 right-to-left language model을 통해 pre-train하지 않는다. 대신 2개의 unsupervised task, MLM(Masked Language Mdoel)과 NSP(next sentence prediction)를 통해 BERT를 pre-training 한다.
Task #1: Masked LM
상식적으로 생각해보면 양방향이 성능이 더 좋은데 기존의 LM의 경우 단방향으로만 학습을 진행할 수 있다. Bidirectional 하게 처리하면 간접적으로 예측하려는 단어를 참조하게 되기 때문에 예측의 의미가 없어진다. 따라서 BERT에서는 MLM을 도입하여 해당 문제를 해결하였다. MLM이란 input tokens의 일정 비율을 마스킹하고 마스킹 된 token을 예측하는 과정이다. 각각의 sequence에 존재하는 WordPiece token들 중에서 15%를 random하게 making한다. 다만 이러한 방법은 pre-train하는 과정에서는 매우 효과적일 수 있지만 fine-tuning을 수행할 때 문제가 된다. fine-tuning 과정에서는 [MASK] 토큰이 사용도지 않고 입력 문장 그대로를 사용하기 때문이다. 이 문제를 완화하기 위해서 전체 15%를 모두 [MASK]로 치환하지 않고 15% 중 80%는 [MASK]로 치환하고, 10%는 랜덤한 토큰으로 치환하고 나머지 10%는 기존의 토큰을 그대로 사용한다. 그 후 15%의 random하게 masking된 token들에 대해서 기존의 토큰을 예측하도록 학습된다.
예시를 보자.
My dog is hairy
15% token을 random하게 masking한다.
My dog is [MASK]
이 15%의 token중 10%는 임의의 token으로 치환한다.
My dog is apple
또한 또 다른 10%는 원본과 같이 그래도 사용한다.
My dog is hairy

Task #2: Next Sentence Prediction(NSP)
많은 NLP의 downstream task는 두 문장 사이의 관계를 이해하는 것이 중요하다. 이는 모델링으로는 알아낼 수 없는데 BERT모델은 이를 학습하기 위해서 Next Sentence Prediction(NSP)를 사용한다. 두 개의 문장을 제공하고 해당 문장들이 서로 이어지는 문장인지 분류하는 훈련을 거치는 것이다. 먼저 pre-training example에서 문장 A, B를 선택한다. 해당 문장 쌍의 50%는 문장 A 다음에 B가 오는 것을 유지한 후 IsNext라고 labeling 하고 나머지 50%는 문장 B를 무작위로 다른 문장으로 치환해서 NotNext로 labeling한다. 이후 [CLS] token의 final hidden vector C를 이용하여 next sentence prediction을 수행한다.
예시를 보자.
She cooked pasta
It was delicious
위와 같은 두 문장이 있다. 이를 그대로 유지하면 IsNext로 labeling하고
She cooked pasta
He was reading
위와 같이 랜덤하게 치환되면 NotNext로 labeling한다.
이후 다시 BERT의 input 형태로 변환한다.
[CLS], she, cooked pasta, [SEP], it, was, delicious. [SEP]
이후 해당 token들에 대해 token embedding, segment embedding, position embedding을 더하여 input을 만들어준다. [CLS] token의 final hidden vector C가 문장 전체의 의미를 압축해서 담기 때문에 이를 feed-forward network에 넣은 뒤 softmax를 취해 isNext와 NotNext에 대한 확률 값을 계산한다.
Token Embedding: 각 단어(WordPiece 토큰)에 대한 고유한 임베딩 벡터
ex) She, cooked, pasta, it 등의 단어를 숫자 벡터로 변환
Segment Embedding: 문장 A와 문장 B를 구분하기 위한 정보
ex) [CLS], "She", "cooked", "pasta", [SEP] → Segment A (0)
"It", "was", "delicious", [SEP] → Segment B (1)
Position Embedding: 각 토큰의 위치를 나타내는 정보(단어 순서를 이해하기 위해 필요)
ex) "She" → 1번째 위치, "cooked" → 2번째 위치, ...
위의 세 임베딩을 더한 값이 BERT의 최종 Input으로 사용된다.
[CLS] token
BERT 입력의 맨 앞에 항상 추가되는 특수 토큰이다. 문장 전체의 대표 역할을 하도록 설계되었다.
BERT는 transformer 기반 모델로 입력으로 받은 모든 토큰이 서로 정보를 교환하며 최종 출력(hidden state)을 생성한다. 그리고 이 토큰은 입력에 포함된 모든 토큰의 정보를 종합적으로 수집하도록 설계되었다.
Pre-traning data
해당 연구에서는 사전 학습을 위해 800M개의 단어로 구성된 BookCorpus dataset과 2500개의 단어로 구성된 English Wikipedia dataset에서 text passage만 사용했다. 또한 긴 문맥을 학습하기 위해 Billion WOrd Benchmark와 같이 섞인 문장으로 구성된 데이터는 사용하지 않았다.(긴 문맥을 파악하기 위해서는 문서 단위의 corpus를 사용하는 것이 문장 단위의 corpus를 사용하는 것보다 훨씬 유리하다.)
3.2 Fine-tuning BERT
pre-training과 마찬가지로 단일 문장과 문장 쌍(<Question, Answer>)을 하나의 token sequence로 처리할 수 있도록 하였다. 이렇게 만들어진 BERT의 input을 통해 task에 알맞은 입력과 출력을 모델에 입력으로 제공해서 parameter를 각각의 downstream task에 맞게 end-to-end로 fine-tune한다.
이때 downstream task에 따라 BERT는 task-specific input을 받아 fine-tuning을 진행한다. 또한 output역시 downstream task에 따라 달라진다.

1. Sentence Pair Classification Tasks
두 문장이 서로 관련이 있는지 아니면 상반되는지 판단한다.
입력: [CLS] Sentence 1 [SEP] Sentence 2 [SEP]
[CLS]는 두 문장을 종합적으로 표현하는 벡터를 만든다.
마지막 레이어의 [CLS] 토큰의 hidden state(C)를 사용하여 문장 관계를 분류한다.
2. Single Sentence Classification Tasks
감정 분석, 문법 오류 판단
입력: [CLS] Sentence [SEP]
[CLS]는 입력 문장의 전체적인 의미를 표현한다.
[CLS] 토큰의 hidden state(C)를 사용하여 문장을 분류한다.
3. Question Answering Tasks
질문과 문서를 입력받아 문서 내에서 정답의 시작과 끝 위치를 예측
입력: [CLS] Question [SEP] Passage [SEP]
마지막 레이어에서 각 토큰의 hidden state를 분석해서 각 토큰이 정답의 시작인지 끝인지 예측한다.
4. Single Sentence Tagging Tasks
입력 문장 속에서 특정 단어가 '사람', '장소', '조직' 등의 개체명인지 태깅
입력: [CLS] Sentence [SEP]
마지막 레이어에서 각 토큰의 hidden state를 사용한다.
BERT에서 fine-tuning은 [CLS] 토큰의 hidden state를 사용해 Sentence-Level tasks(문장 관계 예측, 감정 분석)는 문장 또는 문장 쌍의 의미를 판단하는 과정이고 token-level task(질문 정답 위치 예측, 개체명 인식)는 개별 단어의 의미를 분석하는 과정이다.
Experiments
논문에서는 11개의 NLP task에 대해 BERT-fine tuning test를 진행하였다.
SQuAD v1.1
SQuAD(Stanford Question Answering Dataset) dataset은 question과 answer를 담고 있는 passage를 제공하며, 이를 통해 passage 속에 있는 answer를 예측하는 Question Answering task를 진행한다.

question과 passage를 single packed sequence로 나타낸다. QA Task를 위해서는 passage에서 answer에 해당되는 부분의 start vector S와 end vector E를 이용해 passage 내의 token이 answer의 시작과 끝 token이 될 확률을 구해야한다. 구체적으로 식을 통해 알아보자.
먼저 passage내의 토큰이 answer의 시작이 될 확률을 구해보자. 각각의 token $T_i$와 start vector $S$의 내적을 계산한다.
$P_i = \frac{e^{S\cdot R_i}}{\sum_{j}^{}e^{S\cdot R_j}$
해당 식에서 시작 token이 될 확률이 가장 높은 token의 index를 선택해서 시작 index를 계산한다.
마찬가지로 끝이 될 확률을 구해서 끝 index를 계산한다.
$P_i = \frac{e^{E\cdot R_i}}{\sum_{j}^{}e^{E\cdot R_j}$
이렇게 얻어진 시작 index를 $i$, 끝 index를 $j$라고 할 때 $+

BERT가 데이터셋에서 SOTA를 달성했음을 확인할 수 있다.
다른 예들은 생략하도록 하겠다. 결과적으로 BERT는 fine-tuning approach와 feature-based approach 모두 효과적이다.
'Paper Review' 카테고리의 다른 글
| [Paper Review] Dense Passage Retrieval for Open-Domain Question Answering (0) | 2025.01.10 |
|---|---|
| [논문 리뷰] DeBERTa: Decoding-enhanced BERT with Disentangled Attention (3) | 2025.01.03 |
| BERT의 구조 이해하기 (4) | 2024.12.26 |
| RNN, LSTM, GRU 부터 Transformer까지 (1) | 2024.12.24 |
| Multi Agent Reinforcement Learning (1) | 2024.12.24 |