논문 링크: [1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unla
arxiv.org
한 줄 정리
- 양방향(Bidirectional) 학습
- 기존 모델은 Left-to-Right 또는 Right-to-Left만 고려
- BERT는 양방향(Bidirectional)으로 문맥을 동시에 활용하여 더 깊은 이해 가능
- Masked Language Model (MLM)
- 일부 단어를 [MASK]로 가리고 이를 맞추는 방식으로 학습
- 단어 양쪽의 문맥을 모두 고려할 수 있어 문장의 의미를 더 잘 이해함
- Next Sentence Prediction (NSP)
- 문장 A 다음에 문장 B가 실제로 이어지는 문장인지 예측
- 문장 간의 관계를 학습하여 QA, NLI(자연어 추론) 같은 태스크에서 강력한 성능 발휘
- WordPiece Tokenizer 사용
- OOV(Out-Of-Vocabulary) 문제 해결 & 단어 사전 크기 감소
- 사전 학습(Pre-training) 후 미세 조정(Fine-tuning)
- 한 번 사전 학습된 모델을 다양한 NLP 태스크(감정 분석, 번역, 개체명 인식 등)에 적용 가능
- Fine-tuning만으로 높은 성능을 달성
- 다양한 NLP task에서 최고 성능 기록
Abstract
본 논문에서는 BERT(Bidirectional Encoder Representations from Transformers)를 소개한다. BERT는 언어 모델이며 기존의 언어 모델과 달리 텍스트에서 양방향 표현을 사전 학습하도록 설계되었다. 즉, 모든 레이어에서 앞 뒤 문맥을 파악할 수 있게 된 것이다. 이러한 특성 덕분에 사전 학습된 BERT 모델은 추가적인 Output layer 하나만 추가해 파인튜닝할 수 있으며 이를 통해 QA task 및 Language inference task 와 같은 다양한 Task에서 SOTA를 달성하는 모델을 생성할 수 있다.
BERT는 NLP 의 11개 Task에서 SOTA를 달성해 광범위한 NLP task에서 활용할 수 있는 강력한 사전 학습 모델임을 입증했다.
💡 GPT와 BERT의 차이점
BERT | GPT |
Bidirectional LM (좌우 문맥 동시 참고) | Left to Right LM (Unidirectional: 단방향) |
Fine-tuning을 하기 위해서 만들어짐 | Fine-tuning이 필요 없게 만들어짐 |
자연어 이해(NLU, Natural Language Understanding) 작업에 적합 문장의 의미를 정확히 이해하고 분석하는 것이 강점 |
자연어 생성(NLG, Natural Language Generation) 작업에 적합 주어진 문맥을 바탕으로 자연스러운 문장을 생성하는 것이 강점 |
1. Introduction
Language model pre-training은 다양한 NLP task의 성능을 향상시키는 데에 효과적인 것으로 밝혀졌다. NLP task에는 Language inference, Paraphrasing, 토큰 수준의 task (개체명 인식(Named Entity Recognition, NER), Question Answering (QA)) 이 포함된다.
BERT는 기존의 단방향의 한계를 지적하며 양방향 모델을 제시한다. 그렇다면 기존의 한계는 무엇이었을까?
사전 학습된 언어 표현을 Downstream task 에 적용하는 기존 방법에는 두 가지 전략이 있다.
① Feature-based 방식: ELMo와 같이 사전 학습된 표현을 추가적인 Feature로 활용해 특정 Task에 맞춘 모델을 구축하는 방식
② Fine-tuning 방식: GPT처럼 사전 학습된 모든 파라미터를 하위 Task에 맞게 Fine-tuning 하는 방식
이 두 가지 접근법은 모두 사전 학습 시 단방향(Unidirectional) 언어 모델을 사용하여 일반적인 언어 표현을 학습하는 방식을 따른다. 하지만 이러한 기존의 기술은 사전 학습된 표현의 성능을 제한하고 이는 특히 ② Fine-tuning 방식에서 한계가 두드러진다고 한다. 왜 단방향 방식의 언어 모델이 성능을 제한하게 될까? 우리가 단방향 방식의 언어모델을 생각해보면 GPT의 경우 왼쪽에서 오른쪽으로 학습하는 구조를 사용해 각 토큰이 이전 토큰만을 참고할 수 밖에 없게 된다. 이는 양쪽을 다 볼 수 있다고 생각했을 때는 제한적이라고 생각이 든다. 특히 QA task와 같은 토큰 수준의 Task에서는 양방향 문맥을 반영할 수 없어 성능이 저하될 가능성이 크다.
본 논문에서는 이러한 문제를 해결하기 위해 BERT(Bidirectional Encoder Representations from Transformers)를 제안한다. BERT는 기존 단방향 학습 방식의 한계를 극복하기 위해 Masked Language Model(MLM) 기법을 활용해 사전 학습을 수행한다.
MLM은 위 첨부한 사진과 같이 입력 문장에서 일부 단어를 랜덤하게 가리고(masking), 이를 문맥을 이용해 예측하는 방식이다. 가려진 단어를 예측할 때 문장의 앞 뒤 모든 단어를 동시에 참고한다. 기존의 Left-to-right 방식과 달리 MLM을 사용하면 문장의 양쪽 방향을 동시에 고려해 더 깊은 양방향 표현을 학습할 수 있다.
또한 Next Sentence Prediction(NSP)을 추가해 문장 간 관계를 학습하도록 설계되었다.
💡 Next Sentence Prediction(NSP)
Next Sentence Prediction(NSP)은 두 개의 문장이 실제 연속된 문장인지 아닌지를 맞히는 Task로 이 과정에서 문장 간 관계를 학습해 BERT가 문맥 이해 능력을 더욱 향상시킬 수 있다.


BERT는 학습할 때, 두 개의 문장을 입력으로 받고 다음 문장인지(positive) 아닌지(negative) 맞히는 방식으로 학습한다. 50%의 확률로 두 문장은 실제로 연속된 문장이며 50%는 랜덤한 문장을 가져와 비연속적인 문장을 만든다. BERT는 논리적으로 연결된 문장인지 아닌지를 예측하도록 학습되는 것이다.
BERT의 기여점은 다음과 같다.
① 양방향 사전 학습의 중요성을 입증했다.
Masked Language Model을 활용해 깊은 양방향 표현을 학습하는 BERT는 기존 모델들에 비해 좋은 성능을 가져왔다.
② BERT는 다양한 NLP task에서 복잡한 모델 설계를 줄일 수 있음을 보여주었다.
기존에는 Task 별로 복잡한 모델 설꼐가 필요했지만 BERT는 Fine-tuning 만으로 최첨단 성능을 달성해 특정 Task에 맞춘 아키텍처 설계의 필요성을 줄일 수 있게 되었다.
③ 11개의 NLP task에서 새로운 최첨단 성능을 기록했다.
2. Related Work
2.1 Unsupervised Feature-based Approaches
단어의 의미를 활용 가능한 표현으로 학습하는 연구는 비신경망 방식, 신경망 방식을 포함해 활발히 진행되어 왔다. 사전 학습된 단어 임베딩 (Pre-trained Word Embedding) 은 NLP에서 중요한 요소이며 이 임베딩을 처음부터 학습시키는 방식보다 사전 학습시키면 성능이 더 뛰어나다는 것을 기존의 연구들을 통해 알 수 있었다.
단어 임베딩 벡터를 사전 학습하기 위해 Left-to-Right 언어 모델 학습, 주어진 좌우 문맥에서 올바른 단어를 구별하는 방식 등의 방법이 사용되었다. 이러한 접근법은 단어 수준에서 확장되어 Sentence Embedding, Paragraph Embedding으로 발전되었다. 특히나 문장 표현을 학습하기 위해서는 Ranking Candidate Next Sentences (문맥을 기반으로 다음 문장을 선택하는 방법), Generating Next Sentence Words Given the Previous Sentence (이전 문장을 보고 다음 문장을 생성하는 방법), Denoising Autoencoder (문장에 일부 노이즈를 추가한 후 이를 원래 문장으로 복원시키는 방법) 등을 사용했다.
위와 같은 기존의 모델들은 단어 자체의 의미를 하나의 고정된 벡터로 학습했다. 즉, eye의 뜻을 가지는 눈과 snow의 뜻을 가지는 눈을 같은 하나의 고정된 벡터로 나타내는 것이다. 물론 문장 임베딩, 문단 임베딩이 나오면서 문맥을 고려할 수는 있게 되었지만 각 단어가 하나의 고정된 벡터를 갖는다는 한계는 극복하지 못했다.
하지만 ELMo(Embeddings from Language Models) 의 경우, 문맥을 반영하는 단어 임베딩을 도입해 이러한 한계를 극복했다. ELMo의 핵심 개념은 양방향(Bidirectional) 언어 모델을 활용하여 단어의 의미를 문맥에 따라 동적으로 학습한다는 것이다. ELMo는 왼쪽에서 오른쪽으로 학습한 언어 모델과 오른쪽에서 왼쪽으로 학습한 언어 모델을 결합해 최종 단어 임베딩을 생성하기 때문에 같은 단어라도 문맥에 따라 서로 다른 벡터 표현을 가질 수 있게 된다. 단어를 문장 내 위치와 맥락에 따라 다르게 표현할 수 있기 때문에 성능이 크게 향상되었고, 이러한 문맥 단어 임베딩을 Question Answering, Sentiment Analysis (감정 분석), NER ( Named Entity Recognition: 개체명 인식) 등 Task-Specific Models (작업 별 모델) 에 적용했다.
또한 기존 연구들 중 Feature-based 접근법으로 LSTM을 사용해 왼쪽과 오른쪽 문맥을 사용해 단일 단어를 예측하는 모델도 있었고 빈칸 채우기 문제가 텍스트 생성 모델의 Robustness를 향상시키는 데 유용함을 보인 연구도 있었다.
2.2 Unsupervised Fine-tuning Approaches
Fine-tuning 접근법은 위에서 설명한 Feature-based 접근법과 마찬가지로 초기 연구들은 비지도 학습을 통해 단어 임베딩만 사전 학습하는 방식이었다. 이후에는 문장 또는 문서 수준의 인코더(Sentence/Document Encoders)를 사전 학습하고 이를 Downstream task 에 Fine-tuning하는 방식이 연구되었다. 이러한 접근법의 장점은 새로운 Task를 위해 학습해야 하는 파라미터 수가 줄어든다는 점이다. 즉, 사전 학습된 모델을 활용하면 새로운 작업을 수행할 때 추가적으로 학습해야 하는 부분이 적어진다는 뜻이다.
Feature-based 기반의 기존 방식의 경우 NLP 모델을 학습할 때 각 Task(예: 감성 분석, 개체명 인식 등)에 맞춰 모델을 처음부터 학습해야 한다. 즉, Task마다 별도의 모델을 설계하고 학습해야 하기 때문에 파라미터를 새로 학습시켜야 하고 데이터가 많아야 하며 학습 비용이 늘어나게 된다. 반면 Fine-tuning 방식은 사전 학습(Pre-training)된 모델을 가져와서 새로운 작업에 맞게 일부만 미세 조정(Fine-tuning)하는 방식으로 전체 모델을 처음부터 학습할 필요 없이 특정 Task에 필요한 작은 부분만 학습하면 된다.
이 장점( = 사전 학습(Pre-training) 후 Fine-tuning하는 방식의 효율성) 덕분에 GPT는 GLUE 벤치마크의 문장 수준 Task에서 기존 최고 성능을 달성했다. GPT의 사전 학습에는 Left-to-Right Language Modeling이 사용되었다.
💡 GLUE 벤치마크
GLUE(General Language Understanding Evaluation)는 자연어 처리(NLP) 모델이 얼마나 다양한 문장 이해(Task)를 잘 수행하는지를 평가하는 표준 벤치마크이다.
💡 GPT는 Fine-tuning이 필요 없게 만들어졌다면서..?
GPT의 초기 버전(GPT-1)은 Fine-tuning을 통해 최고 성능을 기록했지만, 이후 버전(GPT-2, GPT-3, GPT-4)은 Fine-tuning 없이도 성능을 낼 수 있도록 발전했다. 하지만 특정 도메인에서는 여전히 Fine-tuning이 사용될 수 있다고 할 수 있다.
사실상 GPT의 전체적인 컨셉으로 봤을 때에는 Fine-tuning이 필요 없게 만들어졌다고 봐야 하기 때문에 이 말도 맞고, 초기의 GPT-1에서는 Fine-tuning을 통해 최고 성능을 달성했기 때문에 위 말도 맞다.
- GPT-1 (2018) → Fine-tuning 기반 (Pre-training + Fine-tuning 구조 사용)
- GPT-2 (2019) → Fine-tuning보다 Zero-shot Learning 강조 → 이 시점부터 GPT는 Fine-tuning이 필요하지 않게 됨
- GPT-3, GPT-4 (2020~) → Few-shot Learning 및 Zero-shot Learning
2.3 Transfer Learning from Supervised Data
대규모 데이터셋을 활용한 지도 학습(Supervised Learning) 기반의 전이 학습(Transfer Learning) 기법도 연구되어 왔다. 대표적으로 Natural Language Inference (NLI), Machine Translation task에서 대규모 학습된 모델이 좋은 성능을 보였따다.
3. BERT
BERT의 학습 프레임워크는 Pre-training과 Fine-tuning 두 단계로 구성된다. ① Pre-training 단계에서 모델은 레이블이 없는 데이터에서 다양한 사전 학습 Task를 수행하며 훈련된다. ② Fine-tuning 단계에서 BERT 모델은 먼저 Pre-training된 파라미터로 초기화되며 이후 Downstream task의 레이블이 있는 데이터로 모든 파라미터를 Fine-tuning한다. 이렇게 하면 각 Downstream task마다 별도의 Fine-tuning된 모델이 생성된다.
BERT의 독특한 특징은 여러 Task에서 Pre-training과 Downstream task의 모델 구조가 동일한 모델 구조를 유지한다는 점이다. 이러한 특징을 통해 별도의 복잡한 Task별 모델을 새로 만들 필요 없이 하나의 모델로 여러 Task를 수행할 수 있다는 것을 알 수 있다.
Model Architecture
BERT의 모델 아키텍처는 Transformer Encoder 구조를 기반으로 한다. Transformer 의 Encoder만 사용하기 때문에 문장 이해에 특화된 모델이라 텍스트 생성이나 번역 등 순차적인 출력 생성 Task에 제한적이다.
BERT 모델의 모델 크기는 두 가지 크기로 제공된다.
① BERTBASE
- Transformer 블록 개수: L = 12
- Hidden Size (각 레이어에서 사용되는 벡터의 차원): H = 768
- Self-attention 헤드 개수: A = 12
- 총 파라미터 수 = 110M
💡 Hidden Size
각 레이어에서 사용되는 벡터의 차원이다. Transformer 모델에서는 각 단어(Token)마다 고유한 벡터 표현(Vector Representation)이 할당된다. 이때 이 벡터의 크기를 Hidden Size라고 한다.
Hidden Size가 크면 더 많은 정보를 담을 수 있지만 계산량도 많아진다. 예를 들어 Hidden Size 가 768인 모델은 'apple' 이라는 단어의 벡터 표현을 768개의 숫자로 표현해 모델이 단어의 의미를 인코딩하는 것이다.
② BERTLARGE
- Transformer 블록 개수: L = 24
- Hidden Size (각 레이어에서 사용되는 벡터의 차원): H = 1024
- Self-attention 헤드 개수: A = 16
- 총 파라미터 수 = 340M
여기서 BERTBASE는 GPT와 크기를 비교하기 위해 동일한 모델 크기로 설정되었다고 한다.
Input / Output Representations
BERT는 다양한 Downstream task를 처리할 수 있도록 입력을 하나의 통합된 토큰 시퀀스로 변환한다. 하나의 입력 토큰 시퀀스는 단일 문장(Single Sentence)이 될 수도 있고 두 개의 문장(Sentence Pair, 예: 질문-답변)이 될 수도 있다.
여기서 말하는 문장 (Sentence)과 시퀀스 (Sequence)는 다르며 Sentence가 우리가 생각하는 것과 다를 수 있다고 이야기한다.
본 논문에서 말하는 Sentence는 반드시 문법적으로 완전한 문장을 의미하지는 않는다. 즉, BERT에서 말하는 Sentence는 단순히 연속된 텍스트(span of contiguous text)일 수 있고 때문에 완전한 문장이 아니고 문장 일부만 포함할 수 있다. 예를 들어 뉴스 기사에서 한 문단의 일부를 잘라서 사용하더라도 BERT에서는 이를 하나의 Sentence로 취급할 수 있는 것이다. 그렇다면 Sequence는 무엇일까? Sequence는 BERT의 입력으로 들어가는 전체 텍스트를 말한다. 이 Sequence는 단일 문장이 될 수도 있고 두 개의 문장을 합친 것일 수도 있다. 이때 만약 두 개의 문장이 하나의 입력 Sequence로 합쳐지면 문장을 구분하기 위해 특수 토큰 '[SEP]' 을 사용해 문장을 구분한다. BERT는 WordPiece embeddings (토큰화 기법) 을 사용하며 30,000개로 구성된 어휘를 사용한다.
💡 Sequence는 어떤 Downstream task에 사용될 것인가에 따라 달라진다.
예를 들어보자. 단일 문장을 입력으로 받아 감정 분석을 진행하는 Sentence Classification의 경우는 단일 문장이 입력될 것이다. 하지만 Language inference나 문장 유사도 예측과 같이 Sentence Pair Classification의 경우 두 개의 문장 간 관계를 예측해야 하기 때문에 두 문장이 하나의 입력 시퀀스로 결합되며 문장을 구분하기 위해 [SEP] 토큰이 사용된다. Question Answering task의 경우 질문과 문서 (답변의 근거가 되는 Text) 를 하나의 시퀀스로 결합하며 [CLS] 토큰을 통해 전체 의미를 파악하고 정답이 될 수 있는 부분을 찾아낸다.
즉, Sequence의 구조는 해당 Downstream Task에 따라 다르게 구성되며 BERT는 이를 일관된 입력 형식으로 변환하여 다양한 작업을 처리할 수 있도록 설계되었다.
여기서 잠깐 WordPiece는 무엇일까?
BERT는 WordPiece embeddings (토큰화 기법) 을 사용하며 30,000개로 구성된 어휘를 사용한다.
BERT에서 사용하는 Tokenizer는 WordPiece 임베딩 방식이라는 이야기인데 여기서 WordPiece embedding이 무엇일까?
WordPiece Embedding은 단어를 더 작은 부분(Subword)으로 분해하여 토큰화하는 방식이다. BERT는 WordPiece Tokenizer를 사용하여 입력 문장을 처리하며 이는 희귀 단어(OOV, Out-Of-Vocabulary)를 효과적으로 다룰 수 있도록 도와준다.
기존의 단어 기반(Word-based) 토큰화 문제점은 각 단어를 개별적인 토큰으로 취급해 임베딩 벡터를 생성했다. 이러한 기존 방식에서는 큰 문제점이 존재했다.
① 새로운 단어(OOV, Out-Of-Vocabulary) 문제
모델이 학습한 단어가 아닌 새로운 단어가 들어온다면 처리할 수 없다는 문제가 발생한다.
② 단어 수가 너무 많아지는 문제
모든 단어를 개별적으로 저장하면 매우 큰 단어 사전(Vocabulary)이 필요하게 된다. 언어마다 단어 수가 다 다르고 다국어 지원이 어렵게 된다.
③ 의미적으로 비슷한 단어가 각각 다른 벡터를 갖게 되는 문제
우리는 "playing", "plays", "played" 가 같은 의미를 가지는 단어라는 것을 안다. 하지만 기존 방식에서는 전혀 다른 단어로 처리가 된다.
WordPiece Embedding은 단어를 더 작은 단위 (Subword)로 쪼개서 표현하는 기법으로 이 문제들을 해결한다. 즉, 희귀 단어를 더 작은 의미 단위로 나누고 이를 조합해서 단어를 표현하는 방식인 것이다.
설명을 위해 예를 들어보자. 만약 'unhappiness'를 WordPiece Tokenizer로 변환하면?
- 기존 방식 (Word-based Tokenization): "unhappiness" → ["unhappiness"]
- WordPiece 방식 (Subword-based Tokenization): "unhappiness" → ["un", "##happi", "##ness"]
- 나뉘어지는 방식은 모델이 사용하는 단어 사전(Vocabulary)에 따라 달라질 수 있다.
- "##" 표시는 이 부분이 독립된 단어가 아니라 앞의 단어와 이어진다는 뜻이다.
이처럼 단어 하나를 작은 부분들로 나눠서 학습해 새로운 단어를 만났을 때 쪼개서 기존 단어의 조합으로 학습이 가능하게 되고 OOV 문제가 해결된다.
WordPiece의 주요 특징 및 장점은 이러하다.
① OOV(Out-of-Vocabulary) 문제 해결
완전히 새로운 단어라도 기존 단어의 조합으로 표현이 가능하게 된다.
② 단어 사전(Vocabulary) 크기 감소
기존 Word-based 방식보다 훨씬 적은 단어 수로도 다양한 표현을 학습할 수 있다.
③ 의미적으로 유사한 단어를 더 효과적으로 학습
"playing", "played", "plays" → "play" + 접미사 형태로 나뉘므로 비슷한 표현을 공유할 수 있다.
④ 다국어 처리(Multilingual NLP)에 유리
영어뿐만 아니라 한글, 일본어, 중국어 같은 언어에서도 효과적으로 사용 가능하다.
다시 BERT 토큰 이야기로 돌아와서...
특수 토큰의 경우, 두 문장을 구분하는 [SEP] (Separator Token) 토큰과 모든 입력 시퀀스의 첫 번째 토큰인 [CLS] (Classification Token) 토큰이 있다. Classification에서는 이 토큰의 최종 히든 상태를 전체 시퀀스의 집합적 Representation으로 사용한다.
BERT는 두 개의 문장이 함께 입력될 경우 이를 명확히 구분해야 하기 때문에 특수 토큰 [SEP] 을 사용해 문장을 구분하는 것 외에 한 가지 방법을 더 사용한다. 바로 각 토큰에 Segment Embedding을 추가하는 것이다. 각 토큰에 대해 문장 A에 속하는지, 문장 B에 속하는지를 나타내는 추가적인 임베딩 값을 적용해 BERT가 두 문장이 서로 다른 문장임을 인식할 수 있도록 설계되었다.
각 입력 토큰의 표현은 세 가지 임베딩 (Token Embedding, Segment Embedding, Position Embedding) 의 합으로 구성된다.
① Token Embedding: 각 토큰데 해당하는 WordPiece 임베딩
② Segment Embedding: 해당 토큰이 문장 A 또는 문장 B에 속하는지 구분하는 임베딩
③ Position Embedding : 토큰의 위치 정보를 인코딩하는 임베딩
이 세 가지 정보를 합쳐서 최종 입력 벡터를 생성한다.
3.1 Pre-training BERT
Task #1: Masked LM
우리는 직관적으로 한 방향으로만 학습한 언어 모델보다 깊은 양방향 모델이 더 강력할 것이라고 생각할 수 있다. 하지만 위에서 계속 언급했던 것과 같이 기존의 조건부 LM은 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽으로만 학습할 수 있다. 왜일까? 왜냐하면 양방향으로 학습을 하면 모델이 자기 자신을 볼 수 있기 때문이다. 즉, 모델이 다층 컨텍스트에서 너무 쉽게 목표 단어를 예측할 수 있게 된다.
때문에 깊은 양방향 표현 (Deep bidirectional representation)을 학습하기 위해 BERT는 입력 토큰의 일정 비율을 랜덤하게 마스킹하고 그 마스킹된 토큰을 예측하도록 학습하는 방법을 사용한다. 이 방법을 사용하면 모델이 양방향으로 학습을 하더라도 모르는 게 생기고 이를 예측하려 하기 때문에 See itself 할 수 없다. (논문에선 'see itself'라고 표현한다.)
이 과정을 Masked LM (MLM) 이라 부르며 기존 문헌에서는 Cloze Task라고도 한다.
이 경우 마스킹된 토큰에 해당하는 최종 히든 벡터는 표준 LM과 마찬가지로 어휘 전체를 대상으로 하는 Softmax에 입력된다. 이게 무슨 말이냐면 BERT가 마스킹된 단어를 예측하기 위해 해당 단어의 최종 히든 벡터를 사용해 Softmax 함수를 통해 정답 단어를 예측한다는 뜻이다. 여기서 최종 히든 벡터는 마스킹된 단어의 문맥 정보를 담고 있는 벡터를 의미하고 BERT가 학습한 단어 표현이 된다.
본 논문에서는 각 시퀀스의 WordPiece 토큰 중 15%를 랜덤하게 마스킹한다. Denoising Autoencoder와는 달리 BERT는 전체 입력을 복원하는 것이 아니라 마스킹된 단어만 예측하는 방식을 사용한다. Denoising Autoencoder는 입력 데이터에 일부 손상을 가한 후 원래 데이터를 복원하는 방식으로 학습한다. 하지만 BERT는 문장 전체를 복원하지 않고 일부 마스킹된 단어만 예측하는 방식이라는 의미이다.
이 방식으로 양방향 사전 학습된 모델을 얻을 수 있지만 한 가지 단점이 존재한다. [MASK] 토큰이 Fine-tuning 과정에서는 나타나지 않기 때문에 사전 학습과 Fine-tuning 간의 불일치(Mismatch)가 발생할 수 있다는 것이다. 이게 무슨 의미일까? 바로 BERT가 사전 학습을 할 때에는 MLM 방식을 사용하기 때문에 [MASK] 토큰이 등장하는 문장으로 사전 학습을 진행하는데 Fine-tuning(실제 활용 시)에서는 문장에 [MASK] 토큰이 등장하지 않는다는 것이다. 따라서 모델이 학습한 방식과 실제 사용 방식이 달라진다.
이를 해결하기 위해 본 논문에서는 항상 마스킹된 단어를 [MASK] 토큰으로 대체하지 않는다. 훈련 데이터를 생성할 때 예측할 토큰 위치의 15%를 랜덤하게 선택하는데 i번째 토큰이 선택되었을 경우 다음 세 가지 방법 중 하나의 방식으로 변경한다.
① 80% 확률로 [MASK] 토큰으로 대체
② 10% 확률로 랜덤한 다른 단어로 대체
③ 10% 확률로 변경 없이 원래 단어 유지
이렇게 하면 Fine-tuning 단계에서 모델이 더 일반적인 표현을 학습할 수 있게 도움을 준다. 즉, BERT는 100% [MASK] 대체가 아니라, 일부 단어를 원래 단어나 랜덤 단어로 바꿔서 학습함으로써 Fine-tuning 단계에서도 자연스럽게 동작할 수 있도록 모델이 학습될 수 있게 한다.
이후 T_i 벡터를 사용해 원래 단어를 예측하며 이 과정에서 Cross Entropy Loss로 학습한다. T_i 벡터란 BERT의 마지막 레이어에서 각 토큰에 대해 계산된 최종 히든 벡터를 의미한다. 즉, BERT는 문맥을 고려해 각 단어를 벡터로 변환하는데 이 벡터가 T_i 벡터이며 이 벡터를 기반으로 마스킹된 단어를 예측한다. T_i 벡터를 Softmax를 거치게 해 단어를 예측한다. 이 과정에서 Cross Entropy Loss를 활용해 정답과 예측값의 차이를 최소화하도록 학습한다.
Task #2: Next Sentence Prediction (NSP)
QA (Question Answering) 및 NLI (Natural Language Inference, 자연어 추론) 와 같은 Downstream task는 두 개의 문장 간 관계를 이해하는 능력을 필요로 한다. 그러나 일반적인 LM 학습 방식으로는 이러한 관계를 직접적으로 학습하기 어렵다.
💡 왜 일반적인 LM 학습 방식으로는 두 개의 문장 간 관계를 직접적으로 학습하기 어려울까?
일반적인 LM은 주어진 문장에서 "다음 단어" 또는 "마스킹된 단어"를 예측하도록 학습되었다. 때문에 개별 문장의 언어적 구조는 잘 학습하지만 두 문장 사이의 관계는 학습하기 어려운 것이다. 왜냐하면 각각의 문장을 독립적으로 이해하는 데엔 뛰어나지만 "문장 A와 문장 B가 논리적으로 연결되는가?"와 같은 관계성을 직접적으로 학습하지 않기 때문이다.
BERT는 두 문장이 실제로 이어지는 문장인지 예측하는 Task인 NSP를 추가해 문장 간 의미적 관계를 직접적으로 학습할 수 있게 했다.
이를 해결하기 위해 본 논문은 단일 언어 데이터로부터 쉽게 생성할 수 있는 이진 분류형 다음 문장 예측(Next Sentence Prediction, NSP) Task를 사전 학습 과정에 포함하였다.
구체적으로 사전 학습 예제에서 문장 A와 문장 B를 선택할 때 ...
- 50% 확률로 문장 B가 실제로 문장 A 다음에 등장하는 문장 (IsNext로 레이블 지정)
- 50% 확률로 문장 B가 문장 A와 무관한 랜덤 문장 (NotNext로 레이블 지정)
이렇게 지정한 후 레이블을 예측하는 것이다!
그림 1에서 볼 수 있듯이 C 벡터는 NSP(Next Sentence Prediction) task를 수행하는 데 사용된다. 이 방식이 단순하지만 밑 5.1 부분을 읽으면 NSP task를 포함한 사전 학습이 QA 및 NLI task에서 매우 유용하다는 것이 입증된 것을 알 수 있다.
Pre-training data
BERT의 사전 학습 과정은 기존 LM의 사전 학습 연구들을 주로 따른다. 사전 학습 코퍼스로는 BooksCorpus (800M 단어)와 영어 위키피디아 (2,500M 단어)를 사용했다.
위키피디아에서는 텍스트 문단(Text Passage)만 추출하고 리스트, 표, 헤더 등은 제외했다고 한다. 이렇게 사용한 이유는 다음과 같다. 길고 연속적인 시퀀스(Long Contiguous Sequences)를 추출하기 위해 문장이 뒤섞여 있는 데이터 대신 문서 단위(Document-Level Corpus)를 사용하는 것이 중요하기 때문이다.
3.2 Fine-tuning BERT
Fine-tuning은 간단하게 구현되었다. Transformer의 Self-Attention 메커니즘 덕분에 BERT는 단일 텍스트 또는 텍스트 쌍을 포함하는 다양한 Downstream task를 모델링할 수 있으며 이를 위해 적절한 입력과 출력을 교체하는 방식이 사용된다. 이게 무슨 말이냐면 Self-Attention 덕분에 다양한 Task를 처리할 수 있게 되고 간단하게 Fine-tuning이 가능해졌다는 이야기이다. Transformer의 Self-Attention은 입력 문장 내 단어들뿐만 아니라 문장 간의 관계도 자연스럽게 학습할 수 있도록 도와준다. 즉, BERT는 기본적으로 문장을 이해하는 모델이기 때문에 단일 문장 또는 문장 여러 개를 처리하는 다양한 Task에서 쉽게 활용이 가능하다. BERT의 Fine-tuning은 사전 학습된 모델을 그대로 가져와서 특정 Task에 맞는 입출력만 바꿔주면 되는 간단한 과정이 되는 것이다. BERT를 사용하면 Task마다 모델 구조를 새롭게 만들 필요 없이 입출력 형식만 바꾸면 Fine-tuning이 가능하다는 점이 중점적으로 이해해야 할 부분인 것 같다.
기존의 모델들은 문장 쌍(Text Pairs)을 처리할 때 두 개의 문장을 각각 따로 인코딩한 후 나중에 비교하는 방식인 Cross-Attention을 사용했다. 이 방식은 두 개의 문장이 서로 영향을 주지 않은 상태에서 독립적으로 인코딩되기 때문에 (= 문장 B를 인코딩할 때 문장 A의 정보가 반영되지 않기 때문에) 이후 Cross-Attention을 적용해 문장 간 관계를 따로 학습해야 한다. BERT는 이를 해결하기 위해 두 개의 문장을 하나의 입력으로 통합한 후 Self-Attention을 사용하여 자연스럽게 두 문장의 관계를 학습하도록 설계되었다. 이렇게 하면 Cross-Attention을 따로 적용하지 않아도 Self-Attention 과정에서 두 문장의 관계가 자연스럽게 학습된다. Self-Attention은 문장 내 모든 토큰을 서로 참조하면서 관계를 학습하기 때문에 문장 B를 인코딩할 때 문장 A의 정보가 반영되는 것이다.
각 Task에서 본 논문에서는 단순히 해당 Task에 적합한 입출력을 BERT에 연결하고 전체 파라미터를 End-to-End 방식으로 Fine-tuning한다.
위에서 언급한 바와 같이 특정 Task에 따라 입력 문장은 다르게 처리되며 출력 방식도 Task의 유형 (토큰 수준 vs 문장 수준) 에 따라 달라진다.
💡 위 그림 4를 보면 BERT의 Fine-tuning이 다양한 Downstream task에 어떻게 적용되는지 알 수 있다.
⒜ Sentence Pair Classification Tasks (문장 쌍 분류 Task )
- 입력: 두 개의 문장(문장 1 & 문장 2)을 [SEP] 토큰을 이용해 하나의 시퀀스로 결합
- 출력: [CLS] 토큰의 벡터를 활용하여 두 문장의 관계를 예측 (예: 같은 의미인지, 추론 관계인지 등)
- [CLS] 토큰이 문장 전체를 대표하는 역할 수행
⒝ Single Sentence Classification Tasks (단일 문장 분류 Task )
- 입력: 하나의 문장만 입력
- 출력: [CLS] 토큰의 벡터를 활용하여 문장 분류 수행 (예: 감성 분석에서 긍정/부정 예측)
⒞ Question Answering Tasks (질문 응답 Task )
- 입력: 질문(Question)과 문서(Paragraph)를 [SEP] 토큰을 이용해 하나의 시퀀스로 결합
- 출력: 특정 토큰을 정답 범위로 예측하도록 학습 (출력층에서는 문서 내에서 정답이 시작(Start)하는 위치와 끝나는(End) 위치를 예측)
⒟ Single Sentence Tagging Tasks (단일 문장 태깅 Task - 개체명 인식, NER)
- 입력: 하나의 문장을 입력
- 출력: 각 단어(Token)에 대해 개체명 태깅을 수행 (예: 개체명 인식(NER), 품사 태깅(POS tagging) 등에서 활용)
- 각 단어(Token)별로 태그를 할당
입력 측면에서 보면 사전 학습에서 사용된 문장 A와 문장 B는 다음과 같은 Task에 대응된다.
- 문장 유사도 분석(Paraphrasing)에서의 문장 쌍 비교
- 자연어 추론(Entailment Task)에서의 가설-전제(Hypothesis-Premise) 쌍 비교
- 질문-응답(Question Answering)에서의 질문-문서(Question-Passage) 쌍 관계
- 텍스트 분류 또는 시퀀스 태깅(Task)에서는 단일 문장으로 처리됨
출력 측면에서는 다음과 같다.
- 토큰 수준 Task
- 시퀀스 태깅(Sequence Tagging)이나 질문 응답(QA), 개체명 인식(NER, Named Entity Recognition)
- 개별 단어 (토큰)에 대한 예측이 필요함
- 각 단어의 최종 히든 벡터 (T_i) 를 출력층에 연결해 예측 수행
- 문장 분류: [CLS] 토큰의 최종 히든 벡터가 출력층으로 전달됨
- 감성 분석 (Sentiment Analysis) , 문장 유사도, 자연어 추론 (NLI)
- 문장 전체에 대한 예측이 필요함
- [CLS] 토큰의 최종 히든 벡터를 출력층에 연결해 예측 수행
이렇게 BERT는 Fine-tuning 과정에서 입력 데이터의 형식과 출력 방식만 변경하면 다양한 Task에 적용할 수 있도록 설계된 것을 알 수 있다.
Fine-tuning.은 사전 학습보다 상대적으로 비용이 적게 들며 본 논문에서 제시된 모든 실험 결과는 단일 Cloud TPU에서 최대 1시간 이내에 재현 가능하며 GPU에서도 몇 시간 내로 수행 가능하다고 한다.
4. Experiments
4.1 GLUE
General Language Understanding Evaluation (GLUE) 벤치마크는 다양한 자연어 이해(NLU) 태스크로 이루어진 데이터셋이다. GLUE에서 Fine-tuning을 수행하기 위해 단일 문장 또는 문장 쌍을 입력 시퀀스로 변환하며 첫 번째 입력 토큰([CLS])에 해당하는 최종 히든 벡터 C를 전체 문장의 집합적 표현으로 사용했다고 한다. Fine-tuning 시 새롭게 추가되는 유일한 파라미터는 분류 레이어의 가중치 W (크기: K x H, K = 레이블 개수) 이다. 손실함수는 표준 분류 손실함수인 log(softmax(CW^T)) 를 사용해 학습을 진행했다. 모든 GLUE task에서 치 크기 32를 사용하고 3 에포크(epoch) 동안 Fine-tuning을 수행했다.
표 1에 나온 결과를 보면 BERTBASE와 BERTLARGE는 모든 Task에서 이전 최고 성능(state-of-the-art) 모델을 큰 차이로 능가한 것을 볼 수 있다. 특히, BERTBASE와 GPT는 모델 아키텍처 면에서 거의 동일하지만 Attention Masking 방식에서 차이가 있음을 주목할 필요가 있다. 또한 BERTLARGE가 BERTBASE보다 모든 Task에서 현저히 더 좋은 성능을 보이며 특히 훈련 데이터가 적은 Task에서 더욱 뛰어난 성능을 발휘한다는 것을 알 수 있다.
4.2 SQuAD v1.1
Stanford Question Answering Dataset (SQuAD v1.1)은 총 100,000개의 질문/답변 쌍으로 구성된 데이터셋으로, 크라우드소싱을 통해 수집된 데이터셋이라고 한다. 위키피디아 문서 내에서 질문에 대한 정답을 포함하는 문단이 주어지며 모델은 해당 문단에서 정답이 되는 텍스트(span)를 예측해야 한다.
위에서 설명한 바와 같이 QA task에서는 질문(Question)과 문서(Passage)를 하나의 시퀀스로 합쳐서 입력한다. Fine-tuning 과정에서 추가적인 두 개의 벡터(시작 벡터 S, 종료 벡터 E)가 새롭게 추가되며 각 단어(Token)가 정답의 시작(Start) 또는 끝(End)이 될 확률을 계산하는 방식으로 학습한다.
정답 예측 방식을 좀 더 자세히 살펴보자. 단어 i가 정답의 시작 위치(i)가 될 확률 P_i는 해당 토큰의 히든 벡터 T_i와 Start vector S의 내적(Dot Product)을 구한 후 문단 전체의 모든 단어에 대해 Softmax를 적용해 확률을 계산한다.
정답의 종료 위치 (j) 도 같은 방식으로 End vector E를 사용해 계산한다.
최종적으로 모델은 시작 위치(i)와 종료 위치(j) 를 찾고 가장 높은 점수를 가진 span을 정답으로 선택한다.
모델의 학습 목표는 정답이 있는 시작 위치와 종료 위치를 최대한 정확하게 예측하도록 학습하는 것이며 이를 위해 올바른 시작/종료 위치의 Log-likelihood 합을 손실 함수로 사용한다.
Fine-Tuning에서 학습률 (Learning Rate)은 5e-5, 배치 크기 (Batch Size)는 32, 에포크 수 (Epochs)는 3으로 설정되었으며 결과는 다음 표 2에 나와있다. BERT 단일 모델도 기존 앙상블 모델을 능가하며 TriviaQA 데이터 없이도 최고 성능을 기록한 것을 볼 수 있다.
4.3 SQuAD v2.0
SQuAD v2.0에서의 Task는 SQuAD v1.1의 문제 정의를 확장해서 제공된 문단에 정답이 존재하지 않을 가능성을 추가한 것이다. 이는 실제 상황에서 더 현실적인 문제를 해결할 수 있도록 만들어진 데이터셋이라고 한다.
기존 SQuAD v1.1의 방식은 정답이 문단에 존재한다고 가정하고 문단에서 시작 위치와 종료 위치를 예측하는 방식이지만 SQuAD v2.0은 정답이 없는 경우 모델이 [CLS] 토큰을 선택하도록 학습해 [CLS] 토큰 위치도 정답의 한 선택지가 되도록 설정했다.
정답이 있을 경우 (Non-null Answer) 정답이 될 가능성이 가장 높은 토큰 span(i, j)을 찾는다.
만약 정답이 없을 경우 (No Answer) [CLS] 토큰의 점수를 비교하여 정답 없음을 판별한다.
최종적으로 예측은 다음과 같은 밑에 있는 식을 따른다.
이때 τ는 Dev set에서 최적화된 임계값이다. 만약 위 조건식을 만족할 경우 정답이 있는 것으로 판단하고 그렇지 않을 경우 정답이 없다고 판단하고 [CLS] 토큰을 선택한다.
Fine-Tuning에서 학습률 (Learning Rate)은 5e-5, 배치 크기 (Batch Size)는 48, 에포크 수 (Epochs)는 2로 설정되었으며 결과는 다음 표 3에 나와있다. 기존 최고 성능 시스템 대비 F1 score가 5.1 향상된 것을 통해 BERT가 정답이 없는 질문(No Answer)을 효과적으로 처리할 수 있도록 학습되었음을 확인할 수 있다.
4.4 SWAG
Situations With Adversarial Generations (SWAG) 데이터셋은 113,000개의 문장 쌍 예측 예제로 구성되어 있으며 일상적인 상식적 추론(Common Sense Inference)을 평가하는 Task이다. 주어진 문장이 주어졌을 때 가능한 4개의 문장 후보 중 가장 타당한 문장을 선택하는 것이다.
BERT에서 Fine-tuning 방식은 먼저 각 예제에 대해 4개의 입력 시퀀스를 생성하고 각 시퀀스는 주어진 문장(Sentence A)과 한 개의 문장 후보(Sentence B)를 연결해 구성하였다. 즉, Sentence A + Candidate Sentence B(총 4개) 형태로 입력된다. 출력 및 예측 단계에서는 특정 Task 전용 파라미터를 추가하지 않았으며 그 대신 [CLS] 토큰의 벡터(C)를 활용하여 각 문장 후보의 점수를 계산했다. 각 각 문장 후보에 대해 [CLS] 벡터와 특정 벡터의 내적(Dot Product)을 계산하여 점수를 부여하고 그 점수를 Softmax 함수로 정규화해 가장 가능성이 높은 문장을 예측한다.
Fine-Tuning에서 학습률 (Learning Rate)은 2e-5, 배치 크기 (Batch Size)는 16, 에포크 수 (Epochs)는 3로 설정되었으며 결과는 다음 표 4에 나와있다. ESIM + ELMo 모델 대비 +27.1% 향상되었으며 GPT 대비 +8.3% 향상된 것을 볼 수 있다.
5. Ablation Studies
5.1 Effect of Pre-training Tasks
본 논문에서는 BERT의 깊은 양방향성(Deep Bidirectionality)이 얼마나 중요한지 입증하기 위해 동일한 사전 학습 데이터, Fine-tuning 방식, 하이퍼 파라미터를 사용해 두 가지 다른 사전 학습 목표를 비교 평가한다.
- No NSP: Masked LM (MLM) 만을 사용하고 Next Sentence Prediction (NSP) task 를 포함하지 않은 양방향 모델
- LTR & No NSP: 표준 Left-to-Right (LTR) 언어 모델을 사용하며 MLM을 사용하지 않은 모델
- 즉, 이 모델은 입력 문장의 왼쪽 컨텍스트만을 사용해 학습된다.
- Fine-tuning 시에도 왼쪽 컨텍스트 제약 (LTR-only constraint) 을 유지해야 한다.
- GPT와 비교할 수 있으나 BERT의 사전 학습 데이터, 입력 표현 방식, Fine-tuning 방식을 적용한 모델
NSP task 제거의 영향
표 5에서 보면 No NSP 모델이 QNLI, MNLI, SQuAD v1.1에서 성능이 크게 저하된 것을 볼 수 있다.
LTR(왼쪽-오른쪽) 모델과 양방향 모델 비교
LTR 모델(LTR & No NSP)은 모든 Task에서 MLM 모델보다 성능이 낮았으며 특히 MRPC 및 SQuAD에서 큰 성능 저하가 발생했다. SQuAD task에서 LTR 모델의 성능 저하는 직관적으로 이해 가능하다. 왜냐하면 SQuAD task는 정답이 문장 내 어디에 위치하는지 예측하는 Task인데, 토큰 예측을 수행할 때 LTR은 오른쪽 컨텍스트를 활용할 수 없기 때문에 정확한 예측이 어려워지기 때문이다.
LTR 모델의 한계를 극복하고자 임의로 초기화된 BiLSTM을 추가하여 성능 향상을 시도해서 성능을 개선시켰으나 여전히 사전 학습된 양방향 모델 보다는 성능이 훨씬 낮은 것을 볼 수 있으며 BiLSTM을 추가하면 GLUE 태스크에서는 오히려 성능이 저하되었다.
또한 본 논문에서는 ELMo 스타일의 접근법(Left-to-Right + Right-to-Left 모델 결합)이 가능한지 고려했다고 한다. 하지만 이 방법에는 여러 가지 단점들이 존재했다.
① 단일 양방향 모델보다 2배 더 많은 연산 비용이 필요하다.
② 질문 응답(QA)과 같은 Task에서 비직관적이다. RTL(Right-to-Left) 모델은 질문을 보고 정답을 찾는 것이 아니라 정답을 먼저 보고 거꾸로 예측하는 방식이 되기 때문이다.
③ 깊은 양방향 모델(BERT)보다 성능이 낮다.
이러한 실험들을 통해 BERT의 사전 학습에서 양방향 표현 학습 (Bidirectionality)과 NSP task는 매우 중요한 역할을 하며 기존의 LTR 모델 (GPT) 보다 훨씬 더 강력한 성능을 제공한다는 것을 알 수 있다.
5.2 Effect of Model Size
위에서 BERTBASE와 BERTLARGE를 소개했었다. 둘의 차이는 모델의 크기인데 모델의 크기는 Fine-tuning task의 정확도에 어떤 영향을 미칠까?
본 논문에서는 BERT 모델을 여러 가지 크기로 훈련했으며 레이어 수(Layers), 히든 유닛(Hidden Units), 어텐션 헤드(Attention Heads) 수를 변경했다. 하지만 기본적인 하이퍼파라미터와 학습 절차는 동일하게 유지했다.
표 6에서는 GLUE task에서 모델 크기에 따른 성능 변화를 보여준다. 모델의 크기가 커질수록 모든 Task에서 정확도가 꾸준히 향상된다.
BERTLARGE는 기존 Transformer 모델보다 훨씬 크며 340M 파라미터를 가지고 있고, 여전히 성능 향상이 지속된다고 한다. 기존 연구에서는 모델 크기를 늘려도 성능 향상이 어느 정도는 제한적이었지만 BERT의 Fine-tuning 접근 방식에서는 작은 데이터셋에서도 큰 모델이 효과적으로 활용될 수 있음을 입증했다.Fine-tuning을 통해 더 크고 표현력이 높은 사전 학습된 모델을 활용하면, 다운스트림 태스크가 작은 경우에도 성능 개선이 가능함을 증명했기 때문이다.
5.3 Feature-based Approach with BERT
이전까지 제시된 모든 BERT의 결과는 Fine-tuning 방식을 사용했다. Fine-tuning 방식에서는 사전 학습된 모델에 간단한 분류 레이어(classification layer)를 추가한 후, 모든 파라미터를 Downstream task에 맞춰 공동으로 학습(fine-tune)한다.
그렇다면 Feature-based 접근법은 무엇일까? Feature-based 접근법은 사전 학습된 BERT 모델의 툴력을 고정된 피처로 추출해 다른 모델의 입력으로 사용하는 방식이다. 즉, BERT의 모든 가중치를 고정(Freeze)하고 미리 생성된 임베딩(Embedding)만 활용하여 추가적인 학습을 진행하는 방법인 것이다.
💡 Feature-based 접근법 VS Fine-tuning 접근법
접근 방식 | 설명 | 파라미터 업데이트 | 연산 비용 |
Fine-tuning | 사전 학습된 BERT 모델을 다운스트림 태스크에 맞게 추가 학습 | O, 모든 가중치 업데이트 | 매우 높음 |
Feature-based | 사전 학습된 BERT의 출력을 Feature로 추출하여 활용 | X, BERT 가중치 고정 | 상대적으로 낮음 |
Feature-based 접근법도 장점을 가지고 있다.
① 다양한 모델 구조를 사용할 수 있다.
특정 Task에서는 Transformer 구조 외에 별도의 Task-specific 모델 아키텍처가 필요할 수도 있다. 때문에 Transformer Encoder 구조로 쉽게 표현할 수 없는 Task들이 존재하게 된다. 예를 들어 시퀀스 태깅(NER, POS 태깅) 같은 Task에서는 BiLSTM + CRF 같은 구조가 더 적합할 수 있다. 즉, Feature-based 접근법을 사용하면 BERT를 다양한 Task-specific 모델과 쉽게 결합할 수 있게 된다. (CRF는 뒤쪽에서 설명하겠다.)
② 연산 비용이 절감된다.
사전 학습된 Feature를 미리 계산해두면 이후 다양한 실험을 훨씬 저렴한 연산 비용으로 수행 가능하다. Fine-tuning은 매번 BERT 전체를 학습해야 하지만 Feature-based 방식은 한 번만 계산하면 되기 때문이다.
💡 Feature-based 접근법이 특히 효과적인 경우
① 데이터가 적을 때
Fine-tuning은 모든 가중치를 업데이트해야 하므로 적은 데이터에서는 과적합(Overfitting) 가능성 높다. 하지만 Feature-based 방식은 BERT의 사전 학습된 정보만 활용하므로 적은 데이터에서도 안정적인 성능을 기대할 수 있다.
② 계산 비용이 중요한 경우
Fine-tuning은 모든 BERT 파라미터를 업데이트하므로 GPU/TPU 자원이 많이 필요하게 된다. 하지만 Feature-based 접근법은 한 번 Feature를 추출하면 추가적인 연산이 거의 필요 없다. 따라서 컴퓨팅 자원이 제한적인 경우 더 유리하다.
③ 특정 Task에 최적화된 모델이 필요한 경우
예를 들어, NER 태스크에서 BERT를 직접 Fine-tuning하면 좋은 성능을 내지만 CRF를 추가하면 더 나은 성능을 기대할 수 있다. 이런 경우 Feature-based 방식으로 BERT의 출력을 추출하고 이를 BiLSTM + CRF 모델에서 활용하는 것이 가능하다.
실제로 NER task에 Feature-based 접근법을 적용해보았다.
CoNLL-2003 Named Entity Recognition (NER) task에서는 단어별로 개체명 (Named Entity)을 태깅하는 Task를 수행한다. BERT는 문장을 단어 단위로 나누는 것이 아니라, WordPiece라는 작은 단위로 토큰화(Tokenization)함을 위 언급에서 알 수 있었다. NER(개체명 인식)은 단어가 어떤 문맥에서 사용되는지가 중요하기 때문에 문맥 정보를 최대로 활용할 수 있도록 문서 전체의 컨텍스트를 포함해 입력을 구성한다. 즉, 문장을 단독으로 처리하는 것이 아니라 문서 전체를 참고하도록 구성해서 더 정확한 개체명 예측이 가능하게 한다는 의미이다. 또한 여기서 표준적인 NER 태깅 방식을 사용하고 출력 레이어에 CRF를 추가하지 않았다고 한다. 이는 무슨 말이냐면 NER task는 단어(토큰)마다 개체명을 할당하는 Task로 사람이름 시작 부분에 'B-PER', 띄어쓰기를 통해 사람 이름이 이어지면 'I-PER', 조직 이름 시간 부분에 'B-ORG' ... 등과 같은 방식으로 수행된다. 이런 표준적인 NER 태깅 방식을 사용했다고 이해하면 될 것 같다. 또한 출력 레이어 부분에 CRF(Conditional Random Field) 를 사용할 수도 있지만 BERT에서는 CRF 없이도 충분한 성능을 내기 때문에 CRF를 추가하지 않았다는 의미이다.
💡 CRF(Conditional Random Field)
CRF는 연속된 데이터(시퀀스)에서 각 요소의 관계를 고려하여 태그를 예측하는 기법으로 단어 간 관계를 더 잘 학습할 수 있도록 도와준다.
만약 NER에서 개별 단어에 태그를 붙인다고 생각했을 때 개별 단어만을 보고 태그를 예측하면 문맥을 고려하기 어려워진다. 때문에 CRF를 활용하면 이전 단어의 태그를 참고해 더 일관성 있는 예측을 하도록 도와준다. CRF는 태그 간의 관계를 고려해 "이전 태그가 B-PER (사람 이름 시작) 이면 다음 태그는 I-PER (사람 이름 지속) 일 가능성이 높다"와 같은 규칙을 학습한다.
또한 첫 번째 서브토큰(sub-token)의 표현을 활용하여 토큰 수준 분류기(token-level classifier) 입력으로 사용했다고 한다. 이 부분이 잘 이해가 가지 않아 더 찾아보았다. WordPiece 모델을 사용하면 하나의 단어가 여러 개의 서브토큰으로 쪼개질 수 있다. 예를 들어 'unhappiness'와 같은 경우는 'un', '##happy', '##ness'로 분리된다. 이럴 때 모든 서브토큰을 다 사용할 필요 없이 첫 번째 서브토큰의 표현만 활용해서 그 단어의 개체명을 예측하는 것이다. "un"(첫 번째 서브토큰)의 표현을 기반으로 "unhappiness" 전체를 처리한다고 이해하면 될 것 같다.
Feature-based 접근법 실험 방법은 다음과 같다. BERT의 파라미터를 전혀 Fine-tuning 하지 않고 미리 계산된 표현(Feature)을 사용했으며 BERT의 여러 레이어에서 활성화 값(activation)을 추출하여 활용했다. 이 추출된 문맥적 임베딩(Contextual Embedding)을 BiLSTM 모델의 입력으로 사용한다.
표7에서 나타난 실험 결과를 보면 BERTLARGE는 기존 최신(state-of-the-art) 모델들과 경쟁력 있는 성능을 보임을 알 수 있다. 가장 좋은 성능을 보인 방법은 사전 학습된 Transformer의 상위 4개 히든 레이어(hidden layers)에서 토큰 표현을 결합한 방식으로 전체 모델을 Fine-tuning한 것보다 F1 score가 단 0.3 낮은 성능을 기록했다. 즉 마지막에서 4번째까지의 Hidden vectoe를 가중합한 게 95.9, 마지막 4개의 Hidden vector를 Concat한 게 96.1을 달성한 것을 볼 수 있다. 이를 통해 Fine-tuning을 하지 않고도 BERT의 사전 학습된 표현을 활용하는 것만으로 매우 높은 성능을 달성할 수 있음을 알 수 있다.
6. Conclusion
기존 연구에서는 단방향(왼쪽 → 오른쪽) 언어 모델을 활용한 전이 학습이 자연어 이해(NLU)에서 효과적이라고 밝혀졌다. 특히 이는 데이터가 부족한 상황(low-resource)에서도 도움이 된다. 하지만 본 논문은 이 아이디어를 더 확장해서 양방향 (Deep Bidirectional) 모델에서도 동일한 전이 학습 효과를 얻을 수 있도록 했다. 결과적으로 BERT 모델은 하나의 사전 학습된 모델로도 여러 NLP task에서 뛰어난 성능을 발휘할 수 있음을 알 수 있다.