논문 : BERT : Pre-training of Deep Bidirectional Transformers for Language Understanding
저자 : Google AI Language (Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova)
논문 선정 이유
본 논문은 왼쪽과 오른쪽 문맥을 모두 고려하는 양방향의 인코더를 가진 사전학습 모형, BERT를 제시합니다. 질의응답, 자연어추론 등 다양한 NLP task를 성공적으로 수행할 수 있도록 하는 사전학습 모델로써 널리 사용되고 있고, 저번 포스트로 소개드렸던 Transformer를 인코더로 사용하는 아키텍쳐를 가지고 있어, Transformer를 이어 임베딩 모형을 공부하고자 해당 논문을 선택했습니다.
Introduction
pre-training(사전학습) 언어 모델은 많은 NLP task(sentence-level task, token-level task)에서 효과적인 것으로 나타났습니다. 사전학습된 언어 표현은 2가지 방법으로 적용됩니다.
•
feature-based : 사전학습된 representation을 추가 feature로 포함시킨 task-specific 구조 (ex. ELMo)
•
fine-tuning : 최소한의 task-specific 파라미터를 사용하고, 사전학습된 파라미터를 fine-tuning하여 하위 task에 대해 학습합니다. (ex. OpenAI GPT)
두 방법은 사전학습하는 동안 같은 목적함수를 사용합니다. 일반적인 language representaion을 학습하기 위해 단방향 언어 모델을 사용합니다. 단방향 언어 모델은 사전학습에 사용될 수 있는 아키텍쳐의 선택을 제한하기 때문에 한계가 있습니다. 예를 들어 OpenAI GPT는 left-to-right 구조로 모든 토큰은 self-attention layer에서 오직 이전의 토큰(previous token)만 접근할 수 있다는 한계가 있습니다. 이러한 한계는 sentence level task에 차선책이고 QA와 같이 양방향의 문맥을 이해해야하는 token-level task에 기반하는 사전학습을 적용할 때 치명적입니다.
본 논문은 양뱡향의 인코더를 가진 BERT를 제시하면서 사전학습에 기반하는 접근법을 개선합니다. BERT는 MLM(masked language model)를 사용해 성능을 개선했습니다. MLM은 랜덤하게 입력의 토큰을 mask하고, mask된 단어의 문맥만을 기반으로 mask된 단어의 원래의 vocabulary id를 예측하는 것이 목적입니다. left-to-right 구조와 다르게 masked 언어 모델 인 MLM은 왼쪽과 오른쪽 문맥을 융합해 나타낼수 있습니다. 또한 text-pair representaion을 결합적으로 사전학습하는 NSP(next sentence prdiction)을 사용합니다.
이 모델을 통해 언어 모델에서 양방향 사전모델의 중요성을 보여줬습니다. 또한 사전학습은 heavily-engineered task 아키텍쳐의 필요성을 감소시켰습니다.
Related Work
사전학습(pre-training)의 가장 많이 사용되는 접근방법을 소개합니다.
(1) Unsupervised Feature-based Approaches
사전학습된 단어 임베딩은 NLP 시스템에 있어서 큰 성능 개선을 가능케 한 중요한 부분입니다. 단어 임베딩 벡터를 사전학습하기 위해, 또한 왼쪽과 오른쪽 context에서 correct를 incorrect 단어와 구별하기 위해 left-to-right 언어 모델이 사용되었습니다.
feature-based 방법의 대표적인 ELMo는 전통적인 단어 임베딩을 일반화해 새로운 차원으로 가져왔습니다. context-sensitive 특징을 left-to-right 그리고 right-to-left 언어모델에서 각각 독립적으로 추출하고 결합합니다. 따라서 얕은 양방향성을 지닌다고 할 수 있습니다. ELMo는 다양한 NLP task에서 SOTA를 달성할 수 있었습니다.
(2) Unsupervised Fine-tuning Approaches
feature-based와 같이 fine-tuning도 라벨링 되지 않은 텍스트에 대해서 단어 임베딩을 진행합니다. 최근에는 라벨링 되지 않은 텍스트에 대해 사전학습하고 지도학습 task에 fine-tuning을 진행하는데, 이러한 방식은 초기에 학습되어야할 파라미터가 거의 없다는 장점이 있습니다. 따라서 OpenAI GPT는 sentence level task에서 SOTA를 달성했습니다. 이러한 모델에는 Left-to-right 언어모델 즉, 단방향 구조와 auto-encoder이 사전학습에 사용되었습니다.
(3) Transfer Learning from Supervised Data
지도학습 task인 언어 추론(language inference), 기계번역에서도 효과적인 전이(transfer)를 보여주는 연구도 있었습니다. 또한 CV 연구도 큰 사전 학습 모델에 기반한 transfer learning이 중요하게 사용되고 있습니다.(ex. ImageNet)
Bert
Bert framework는 크게 pre-training(사전학습), fine-tuning(미세조정) 두 가지 단계로 나눠집니다. pre-training 동안 모델은 라벨링이 되지 않은 데이터로 학습을 진행합니다. fine-tuning 동안 BERT 모델은 사전학습된 parameter로 초기화된 후, 모든 parameter가 downstream task로부터 분류된 데이터를 사용하여 미세조정이 됩니다.
output layer를 빼면, pre-training과 fine-tuning은 동일한 아키텍쳐를 사용합니다. 동일한 사전학습된 파라미터는 다양한 다운스트림 task들에 대하여 파라미터를 초기화하는데 사용됩니다. fine-tuning 동안에는 모든 파라미터들이 미세 조정됩니다.[CLS]는 모든 입력 데이터의 앞단에 추가되는 특별한 token이고, [SEP]은 질문과 답변을 구분해주는 것처럼 특별한 분리 token입니다.
BERT의 다른 모델과 구분되는 특징은 여러 다른 task에 대해서도 통합된 모델구조를 갖는다는 점입니다. 사전학습된 모델 구조와 최종 다운스트림 구조에는 최소한의 차이만 존재할 뿐입니다.
Model Architecture
BERT의 모델구조는 Transformer를 기반으로 한 multi-layer bidirectional Transformer encoder입니다.
는 비교를 위해 OpenAI GPT와 같은 크기를 가지도록 하였습니다. 그러나 BERT Transformer는 양뱡향 self-attention을 사용하고 GPT Transformer는 모든 token이 왼쪽 문맥만 참조하도록 제한된 self-attention을 사용합니다.
Input/Output Representations
BERT가 다양한 다운스트림 task를 처리할 수 있도록, 입력 표현은 단일 문장인지, 문장들의 쌍(Q & A 등)인지 구분되어야 합니다. 여기서 “문장”이란 실제 언어학적 문장이 아닌 인접한 문자들의 연속으로 생각합니다. “Sequence”가 BERT의 입력 token sequence가 되는데, 이는 단일 문장이나 문장의 쌍이 될 수 있습니다. 해당 논문에서는 3만 개의 단어 수를 갖는 Wordpiece embedding을 사용합니다. 모든 sequence의 첫 번째 token은 [CLS]라는 특별한 분류 token입니다. 이 token과 연관된 최종 hidden state는 분류문제에서 sequence 표현을 총합하는 것으로 사용됩니다. 문장의 쌍은 한 개의 문장으로 합쳐지는데, 다음의 두 가지 방법으로 구분됩니다.
1.
[SEP]라는 특별한 token이 두 문장 사이에 들어간다.
2.
문장들의 모든 token에 해당 토큰이 문장 A에 속하는지 B에 속하는지에 대한 정보를 담은 embedding이 추가된다.
주어진 token에 대해 그 입력표현은 연관된 token, segment, position embedding의 합으로 구성됩니다.
Pre-training BERT
BERT를 사전학습시키기 위해 전통적인 LTR(Left-to-Right) 또는 RTL(Right-to-Left) 언어모델을 사용하지 않습니다. 대신, 다음의 두 가지 비지도 task를 사용하여 학습시킵니다.
Task #1: Masked LM
직관적으로, 깊은 양방향 모델은 LTR 모델 또는 얕은 양방향 모델보다 더 강력할 것입니다. 그러나, 전통적인 언어모델은 단방향만으로 쉽게 학습이 가능한데 반해, 양방향 조건은 각 단어가 간접적으로 그 단어 자체를 의미할 수 있으며, 모델은 자명하게 다층 문맥 안에서 목표 단어를 예측할 수 있기 때문입니다.
양방향 모델을 학습시키기 위해 입력 token을 무작위로 masking한 다음, 문맥을 통해 해당 단어를 예측하게 한다. 이 과정을 MLM(masked LM)라 부른다.
이 경우, mask token과 연관된 최종 은닉벡터는 표준 LM처럼 단어집합 내 출력 softmax로 넘어간다. Denoising auto-encoder과는 다르게 전체 입력이 아닌 masked word만을 예측한다.
이것이 양방향 사전학습 모델을 얻을 수 있도록 해주지만, [mask] token은 fine-tuning 단계에 나타나지 않기 때문에 pre-training 단계와 fine-tuning 단계 간 mismatch가 생긴다는 단점이 있다. 이를 완화하기 위해, 어떤 token을 항상 [mask]token으로 바꿔버리지 않는다. 구체적으로는,
•
학습데이터 생성자는, 전체 token 중 무작위로 15%를 선택한다.
•
선정된 위치의 token은
◦
80%의 확률로 [mask] token으로 치환되고,
◦
10%의 확률로 무작위 token으로 치환되고,
◦
10%의 확률로 그대로 남는다.
Task #2: Next Sentence Prediction(NSP)
QA(Question Answering)나 NLI(Natural Language Inference) 등의 많은 중요한 문제는 언어모델에는 직접적으로 포착되지 않는 두 문장 사이의 관계(relationship)를 이해하는 것에 기반한다. 문장 간 관계를 모델이 학습하도록, 아무 단일 언어 말뭉치에서 생성될 수 있는 이진화된 다음 문장 예측(binarized next sentence prediction)을 사전학습시켰다.
구체적으로, 학습 예제에서 문장 A와 B를 선택하는데,
•
학습 데이터의 50%는 A와 B가 이어지는 문장이고(IsNext로 분류됨)
•
학습 데이터의 50%는 B는 A와는 아무 관련 없는 무작위로 선택된 문장(NotNext로 분류됨)이다.
이 NSP task는 표현 학습에 긴밀히 연관되어 있지만, 이전 연구에서는 오직 문장 embedding만 downstream task로 이전(transfer)이 됐는데, BERT는 end-task 모델 parameter를 초기화하기 위해 모든 parameter를 이전시킨다.
Pre-training data
사전학습 과정은 언어모델 사전학습에서 이미 있던 것을 거의 따라간다. 사전학습 말뭉치로 BooksCorpus(800M 단어)와 English Wikipedia(2,500M 단어)를 사용했다. 위키피디아에 대해서는 문자 정보만을 추출했다.긴 연속적 seqeunce를 추출하기 위해서는, 순서가 섞인 문장들의 집합인 Billion Word Benchmark같은 것보다는 문서단위 말뭉치를 쓰는 것이 매우 중요하다.
Fine-tuning BERT
Downstream task에 BERT를 적용하는 것은 상대적으로 단순하다. 입력(한 문장 또는 두 문장)의 개수에 따라 (앞서 설명한 것처럼) 알맞게 하나의 sequence 로 생성해서 모델의 입력으로 제공한다. 두 문장이 입력으로 제공된 경우, 하나의 sequence로 생성하고, 두 문장 사이의 self-attention도 수행하게 된다.
Fine-tuning하는 방법은 task에 알맞는 입력과 출력을 모델에 입력으로 제공해서 파라미터들을 해당 task에 맞게 end-to-end로 업데이트한다. Token representation은 token level task(sequence tagging, question-answering 등) 의 입력으로 사용된다. [CLS] 토큰은 classification을 수행하기 위해 사용된다.
Pre-training과 비교했을 때, fine-tuning은 상대적으로 적은 비용으로 수행할 수 있다. 해당 논문에서 제공하는 결과들은 대부분 Gloud TPU에서 1시간, 또는 GPU에서 몇 시간 내에 처리가 가능하다. (동일한 pre-trained 모델에서 fine-tuning을 하는 시간만 고려했을 때)
Experiment
GLUE
GLUE benchmark는 다양한 자연어이해 문제들을 모아놓은 것이다. 모든 GLUE task에 대해 batch size 32, 3 epochs으로 실험한 결과는 다음과 같다.
•
각 task마다 Dev set에서 최적의 learning rate를 선택했다.
•
BERT_large는 작은 dataset에 대해 fine-tuning 학습이 불안정할 때가 있어서, 무작위 시작을 여러 번 하여 가장 좋은 것을 선택했다.
BERT_base만으로도 state-of-the-art 결과를 얻었으며, BERT_large는 그보다도 더 뛰어난 성능을 보여준다.
SQuAD v1.1
Stanford Question Answering Dataset은 10만여 개의 질답 쌍으로 구성되어 있다. 질문과 그에 대한 답을 포함하는 위키피디아 지문이 주어지면, 해당 지문에서 답이 되는 부분을 찾는 과제이다.
SQuAD v2.0
SQuAD v2.0은 (짧은) 답이 지문에 없는 경우를 포함시켜 더 확장한, 더 현실적인 task이다.
SWAG
Situations With Adversarial Generations dataset은 113k개의 배경상식을 평가하는 문장 쌍으로 되어 있다. 이어지는 문장으로 4개 중 가장 그럴듯하게 이어지는 문장을 고르는 과제이다.
Ablation Studies
: 모델이나 알고리즘의 “feature”들을 제거해 나가면서 그 행위가 성능에 얼마나 영향을 미치는지를 확인해보는 것
(1) Effect of Pre-training Tasks
와 정확하게 동일한 선행학습 데이터, 파인튜닝 기법, 하이퍼파라미터를 사용한 선행학습을 평가하여 BERT의 깊은 양방향성의 중요성을 설명해보려 합니다.
를 사용하여 선행학습하는데 ablation을 진행합니다.
•
No NSP : 다음 문장 예측 태스크를 진행하지 않고 훈련 진행
•
LTR & No NSP : OpenAI GPT처럼, 다음 문장 예측 없이 좌측에서 우측으로 진행되는LM을 이용하여 훈련 진행
•
+BiLSTM : 파인튜닝을 진행하는 동안 LTR + No NSP 모델의 상단에 초기화된 BiLSTM을 랜덤하게 추가하
NSP를 제거하니 QNLI, MNLI, SQuAD 1.1.의 성능에 상당한 저하가 발생합니다.
No NSP와 LTR & No NSP를 비교하여 양방향 표현을 이용한 훈련의 영향력을 평가하였을 때, LTR 모델의 경우 모든 태스크에 대하여 MLM 모델보다 성능이 좋지 않고, 특히 MRPC와 SQuAD에서는 크게 저하됩니다. SQuAD에 대해서, LTR 모델은 토큰 레벨의 hidden states가 우측 context를 가지고 있지 않기 때문에 토큰 예측 성능이 좋지 않습니다. 이를 강화하기 위해, 모델 상단에 초기화된 BiLSTM을 랜덤하게 추가하였습니다. 물론, 이것이 SQuAD의 결과를 향상시키긴 했지만, 선행학습된 양방향 모델보다는 여전히 결과가 매우 좋지 않습니다. 또한, GLUE 태스크에 대해서는 BiLSTM이 성능을 저하시키기도 합니다.
ELMo와 동일한 방식으로 LTR, RTL 모델들을 각각 훈련시킨 후, 두 모델을 결합시켜 각 토큰을 표현하는 방식이 가능할 것이라고 생각할 수 있습니다. 그러나, 다음과 같은 이유로 해당 방식은 훨씬 더 강력하지 않다고 할 수 있습니다.
1.
하나의 양방향 모델보다 두배의 비용이 발생합니다.
2.
QA 같은 태스크에 대해서, RTL모델의 경우 질문과 답변을 연결할 수 없어 다소 직관적이지 않습니다.
3.
깊은 양방향 모델의 경우 모든 레이어에서 좌우 context를 모두 사용할 수 있습니다.
(2) Effect of Model Size
모델의 사이즈가 파인 튜닝의 정확도에 끼치는 영향을 확인해 봅시다. 동일한 하이퍼파라미터를 사용하고 훈련 과정은 위에 언급된 것과 동일하게 진행하면서, layer, hidden unit, attention head 수를 다르게하여 훈련을 진행해 보았습니다.
BERT의 모델 사이즈에 대하여 ablation을 진행합니다.
#L : layer 수
#H : hidden unit 수
#A : attention head 개수
LM(ppl) : 주어진 학습 데이터에 대한 Masked LM perplexity(확률 분포 모델, 언어 모델이 분포를 얼마나 잘 예측했는지 측정하는 평가지표)
상단의 표에서는, 파인튜닝을 랜덤하게 5번 재시작했을 때 평균 Dev Set 정확도를 보고합니다. 3600개의 labeled training example를 가지고있는, 선행학습과는 실질적으로 다른 MRPC까지도 4개의 모든 데이터셋에 대하여 더 큰 모델일 수록 정확도가 크게 향상되는 것을 볼 수 있습니다.
예를 들어, 이전에 연구된 가장 큰 Transformer는 인코더를 포함하여 100M개의 파라미터(L=6, H=1024, A=16)를 가진 모델이고, 저자가 문헌에서 찾은 가장 큰 Tranformer는 235M개의 파라미터(L=64, H=512, A=2)를 가진 모델이다. 이와 대조적으로, 는 110M개의 파라미터를, 는 340M개의 파라미터를 포함합니다.
기계번역, 언어 모델링과 같은 대용량 태스크의 경우, 모델 사이즈를 키우는 것이 계속해서 성능을 향상시킨다는 것은 오래 전부터 알려져 있고, 이는 상단 표의 LM Perplexity를 보면 확인할 수 있습니다. 그러나, 모델이 충분한 선행학습을 진행했다는 전제 하에, 모델 사이즈를 극단적으로 확장시키는 것은 매우 작은 스케일의 태스크에 대해서도 큰 성능 향상을 이끌어 낸다는 것을 입증하는 첫 작업이라고 할 수 있습니다.
Peters 외 연구진은 선행학습된 bi-LM(양방향 언어 모델) 크기를 2개 층에서 4개 층으로 증가시켰을 때 다운스트림 태스크에 미치는 영향에 대해서 엇갈린 결과를 제시하였고, Melamud 외 연구진에 따르면 은닉층의 차원 수를 200에서 600으로 증가시키는 것은 도움이 되었지만, 1000 이상으로 늘리는 것은 추가적인 개선을 불러오지는 못 했다고 언급했습니다. 이 두가지 연구의 경우 feature 기반 접근을 진행하였습니다. 여기서 모델이 다운스트림 태스크에 대해 직접적으로 파인튜닝되어 있고, 랜덤하게 초기화된 극소의 추가 파라미터를 사용한다고 했을 때, 다운스트림 태스크가 매우 작다고 하더라도 태스크 특화 모델은 더 크고 더 표현력이 뛰어난 선행학습된 표현으로부터 이익을 얻을 수 있다고 가정합니다.
(3) Feature-based Approach with BERT
지금까지 제시된 모든 BERT의 결과들은 간단한 분류층이 선행학습된 모델에 추가되고, 모든 파라미터들이 다운스트림 태스크에 대해 공동으로 미세 조정되는 파인튜닝 기법을 사용했습니다. 그러나, 선행학습된 모델로부터 고정된 feature들이 추출되는 feature 기반 방식의 경우 다음과 같은 이점이 존재합니다.
1.
첫번째로 모든 태스크들이 Transformer 인코더 구조로 쉽게 표현되는 것은 아니기 때문에, 태스크 특화 모델 구조가 추가되어야 합니다.
2.
학습 데이터의 계산이 비싼 표현을 사전에 한번 계산하고, 해당 표현들 위에서 더 저렴한 모델로 많은 실험을 돌릴 수 있는 계산상의 큰 이익이 있습니다.
CoNLL-2003 개체명인식 태스크에 BERT를 적용하여 두가지 접근법을 비교해 보겠습니다. BERT의 입력으로, 우리는 대소문자가 구분되는 WordPiece 모델을 사용하고, 데이터에서 제공될 수 있는 최대의 문서 context를 포함합니다. 표준적인 관행에 따라, 해당 논문에서는 이를 태그 지정 태스크로 공식화하지만 출력에 CRF층을 사용하지는 않습니다. 첫번째 하위 토큰의 표현을 NER 라벨 셋을 통해 토큰 단위의 분류기의 입력으로 사용합니다.
파인튜닝 방식을 제거하기 위해, BERT의 어떠한 파라미터도 파인튜닝하지 않고 하나 이상의 층에서 활성화 함수를 추출하여 feature 기반 방식을 적용합니다. 이러한 문맥적인 임베딩은 분류층 이전에 랜덤하게 초기화된 768차원의 2개 BiLSTM 층의 입력으로 사용됩니다.
CoNLL-2003 개체명 인식 태스크의 결과입니다. 하이퍼파라미터의 경우 Dev set에서 사용되었던 것들을 채택하였습니다. Dev, Test 점수의 경우 해당 하이퍼파라미터를 사용하면서 랜덤하게 5번 재시작된 결과들을 평균 낸 결과입니다.
의 경우 SOTA 방식으로 경쟁력있는 결과를 보입니다. 가장 좋은 결과를 낸 방식의 경우, 선행학습된 Transformer의 상단 4개의 은닉층으로부터 토큰 표현을 결합시키는데, 이는 전체 모델을 파인튜닝하는것과 비교했을 때 0.3 F1밖에 차이가 나지 않습니다. 이를 통해 BERT는 파인튜닝이나 feature 기반 방식 모두에 대해서 효과적이라고 입증할 수 있습니다.
Conclusion
언어 모델의 transfer learning(= fine-tuning)을 통한 실질적인 향상은 풍부하고 비지도적인 선행학습이 언어를 이해하는 체계에 있어서 핵심 파트라고 할 수 있습니다. 특히, 이를 통해 자원이 적은 태스크에 대해서도 깊은 단방향 구조로부터 이득을 얻을 수 있게 합니다. 해당 논문은 위와 같은 연구 결과를 깊은 양방향 구조에 일반화하여 동일한 선행학습 모델이 광범위한 NLP 태스크를 성공적으로 처리할 수 있도록 하는 것입니다.
코드실습
Dacon 한국어 문장 관계 분류 경진대회
Dataset download
코드는 Kobert 모델 구현 및 적용과 데이터셋 간단한 EDA로 구성되어있습니다.
colab에서 gdirve 연결 후 파일 경로 수정만 해주면 코드 돌아갑니다.
Accuracy : 0.736
Reference
BERT : Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/pdf/1810.04805.pdf