비즈니스 문제를 해결하고 예측하는 데이터 사이언티스트가 되고 싶다면?
#인공지능 

GLUE: 벤치마크를 통해 BERT 이해하기

GLUE 벤치마크는 "강건하고 범용적인 자연어 이해 시스템의 개발" 이라는 목표로 만들어진 데이터셋입니다. GLUE는 자연어 처리 모델을 훈련시키고 그 성능을 평가 및 비교 분석하기 위한 데이터셋들로 구성되어 있습니다.

2024-07-10 | 신유진

“GLUE 에서 State-of-the-art 를 달성했다던데.. GLUE 가 뭐지?” 했던 분들을 위한 글

들어가며

이번 글에서는 BERT 과 같은 전이 학습을 기반으로 한 자연어 처리 모델들의 성능을 평가하는데 사용되는 GLUE 벤치마크에 대해 알아보겠습니다. GLUE (General Language Understanding Evaluation) 벤치마크는 “강건하고 범용적인 자연어 이해 시스템의 개발” 이라는 목표로 만들어진 데이터셋입니다. GLUE는 자연어 처리 모델을 훈련시키고 그 성능을 평가 및 비교 분석하기 위한 데이터셋들로 구성되어 있습니다. 또한, 다양하고 해결하기 어려운 9개의 태스크 데이터셋으로 이루어져 있습니다. GLUE는 모델들의 자연어 이해 능력을 평가하기 위해 고안되었으며, 이제는 BERT와 같은 전이학습 모델들을 평가하는 데 필수적인 벤치마크로 자리 잡았습니다.

자연어 처리 태스크들이 내 일과 무슨 상관이 있을까요?

대부분의 자연어 처리 태스크는 모델의 특정 언어 이해 능력을 평가하는 데 사용될 수 있습니다. 예를 들어:

  • Named Entity Recognition: 문장 내 특정 단어가 고유 명사, 기관명 혹은 엔티티인지 식별하는 것입니다.
  • Textual Entailment: 두 문장이 주어졌을 때, 첫 번째 문장이 두 번째 문장을 수반하는지 혹은 위배되는지 판단하는 것입니다.
  • Coreference Resolution: 문장 내 대명사 “it”이 존재하고 해당 대명사가 지칭할 수 있는 명사가 많을 때, “it”이 지칭하는 정확한 대상을 찾는 것입니다.

대부분의 경우, 여러분은 BERT를 이용한 특정 태스크 해결에만 관심이 있을 것입니다. 예를 들면, 고객 리뷰에 대한 감정을 예측하는 것과 같은 태스크 말이죠. 이 경우, 모델이 Coreference Resolution에서 어떤 성능을 보이는지에 대해서는 전혀 관심을 가지지 않을 것입니다.

그러나 모든 자연어 처리 태스크는 언어적 측면에서 서로 연결되어 있다는 점을 이해하는 것이 중요합니다. 예를 들어, 감정 분석에만 관심이 있더라도 문장 내 대명사가 가리키는 바를 잘 아는 모델, 즉 Coreference Resolution을 잘 해결하는 모델은 모호한 명사들에 대해서도 효과적인 판단을 내릴 수 있습니다. 이러한 이유로, BERT와 같은 전이학습 모델들이 GLUE 벤치마크에서 다양한 자연어 처리 태스크에서 좋은 성능을 보인다면, 이는 해당 모델들이 여러분이 수행하려는 “특정” 태스크에도 효과적으로 적용될 수 있음을 의미합니다.

GLUE 가 만들어진 배경

과거의 자연어 처리 모델들은 대개 하나의 특정 문제를 해결하기 위해 설계되었고, 그에 맞게 end-to-end 로 훈련되어 있었습니다. 이로 인해 해당 문제에는 뛰어난 성능을 보이지만, 다른 문제나 데이터셋에 대해서는 효과적인 성능을 발휘하지 못했습니다.

그림1: 특정 문제에 특화된 구조

따라서 해당 문제를 잘 푸는지 확인하는 것은 상대적으로 쉬운 일이었습니다. 예를 들어 “NER 모델이 NER을 잘 해결하고 있나요?”와 같은 질문에만 답하면 됐었습니다.

그러나 최근에는 많은 연구자들이 전이학습(Transfer Learning)과 관련된 연구를 시작하며, 이로 인해 자연어 처리 분야에서도 전이학습의 중요성이 부각되었습니다. 전이학습 모델들은 특정 문제를 해결하는 데에만 집중하는 End-to-end 방식으로 훈련된 Single task 모델들과는 다르게, 더 깊고 복잡한 모델을 사용하여 자연어의 일반적인 이해능력을 학습합니다. 즉, 전이학습 모델들은 사전학습을 통해 언어에 대한 넓고 깊은 이해력을 얻을 수 있습니다. 이 사전학습을 통해 얻어진 이해력은 해당 모델이 특정 문제를 해결하기 위해 Fine-Tuning 할 때 큰 도움이 됩니다. Fine-Tuning 과정은 다음과 같습니다:

  1. 기존 모델에서 사전학습에 사용된 입력층과 출력층을  제거합니다.
  2. 해결하고자 하는 특정 문제에 맞는 입력층과 출력층을 새롭게 교체합니다.
  3. 이후 n번의 epoch 동안 변형된 모델을 재학습(Fine-Tuning) 시킵니다. 이 과정에서 사전학습 모델에서 학습한 중간 파라미터는 자연어를 잘 ‘이해’ 하는데 있어 중요한 역할을 합니다. 또, 우리가 해결하려는 구체적인 문제에 맞게 조정됩니다.

그림 2. 초기 사전학습 구조, 학습된 언어 이해 모델, Fine-tuning 구조

 

위 과정은 전이학습의 핵심 아이디어를 제시합니다. 새로운 방식으로 학습된 전이학습 모델들이 등장할 때마다, 중요한 질문이 자연스레 떠오르게 되었습니다. 바로 새로운 모델이 이전 모델들보다 더 나은 성능을 보이는지를 어떻게 평가할 수 있는가 하는 것입니다. 이 질문에 대한 단순한 태스크 결과만으로는 충분하지 않았습니다. 우리는 모델이 일반적인 언어 이해 능력과 함께 Fine-Tuning을 통해 특정 태스크에서 얼마나 우수한 성능을 발휘할 수 있는지를 평가하고자 했기 때문입니다.

GLUE 의 탄생과 활용 사례

뉴욕대학교 연구진은 이러한 질문에 대답하기 위해 GLUE 데이터셋을 개발했습니다. GLUE는 한 모델을 여러 태스크에 대해 훈련하고 평가할 수 있습니다. 이제 연구자들은 본인들이 개발한 새로운 모델을 GLUE 데이터셋으로 훈련시키고, GLUE의 9개 태스크 각각에 대해 점수를 매겨 최종 성능 점수를 계산할 수 있습니다. GLUE의 모든 태스크를 성공적으로 해결할 수 있다면, 모델이 어떤 구조를 가지고 있거나 내부적으로 어떤 연산을 수행하더라도 문제가 되지 않습니다.

그림3. GLUE Score 계산

GLUE 벤치마크는 도입 이후 자연어 처리 분야에 빠르게 자리를 잡았고, 이제 새로이 등장하는 전이학습 모델들의 대부분은 GLUE 벤치마크에 대한 성능 지표를 연구 결과로 함께 공개하고 있습니다. GLUE 벤치마크 덕분에 자연어 처리 연구자 및 엔지니어들은 전이학습 모델의 성능을 단 몇 개의 숫자를 통해 비교할 수 있게 되었습니다!

Translator’s note: As of September 2019, the number of tasks within GLUE has increased to 11.

GLUE 벤치마크 내 태스크들

뉴욕대학교 연구자들은 다양한 자연어 처리 문제를 해결하기 위한 GLUE 벤치마크를 설계했으며, 이를 위해 기존의 다양한 데이터셋을 참고하여 태스크들을 구성했습니다. 아래 표는 GLUE의 각 태스크에 대한 간단한 정보를 제공하고 있으며, 더 자세한 내용은 해당 링크를 통해 확인하실 수 있습니다

그림 4. GLUE내 Task의 요약표

 

전이학습 모델들이 인간과 비교해봤을 때 문제 해결에서 어느 정도 성능을 보이고 있을까요?

GLUE 팀은 리더보드에 Human Baselines을 함께 기록해두었습니다. 이는 실제로 인간이 테스트 데이터셋에서 얻었던 점수입니다. 몇몇 모델들은 이미 이 베이스라인 점수를 넘어서는 성능을 보여주기도 했습니다.

 

그림 5. GLUE 리더보드: 빨간 네모는 Human Baselines

GLUE 데이터셋은 어떻게 구할 수 있나요?

GLUE 데이터셋을 다운로드하고 사용하는 방법은 자세히 설명된 스크립트가 있습니다.
또한 노트북 자료에 TensorFlow Datasets (tfds) 를 사용하여 GLUE 데이터셋을 확인하고 필요한 부분만 선택적으로 다운로드하는 방법에 대한 설명도 포함되어 있습니다.

 

GLUE 데이터셋을 사용하여 모델을 테스트하는 방법

초기 BERT 설계는 두 문장을 입력으로 받을 수 있도록 되어 있습니다. 따라서 GLUE 데이터셋을 훈련할 때 입력 구조를 변경할 필요가 없습니다. 예를 들어, QQP 태스크를 수행하기 위해 두 질문을 입력으로 사용할 수 있습니다. 또는, CoLA 태스크를 수행할 때는 하나의 문장만 입력으로 사용할 수 있습니다. 또한 QNLI 태스크를 수행하기 위해 질문과 문단을 각각의 문장 입력으로 사용할 수도 있습니다.

하지만 각 태스크를 수행하기 위해서는 사전 훈련 시 사용된 분류층을 제거하고, GLUE 태스크를 수행하기 위한 새로운 레이어로 변경해야 합니다. 일반적으로 이 변경된 레이어는 이진 분류 계층입니다. 예를 들어, hidden_layer_size가 768 small-BERT로 이진 분류를 수행하려면 분류층의 차원은 [768, 2]가 되어야 합니다. 여기서 [CLS] 토큰이 분류층의 입력으로 사용되어 문장 분류 태스크를 수행할 수 있게 됩니다.

이제 이러한 변경을 통해 BERT를 Fine-Tuning 하여 분류 작업에 적용할 수 있습니다. 아래 예시를 통해 위 과정을 다시 한 번 정리해 보겠습니다!

그림 6. GLUE 태스크에 훈련과 평가를 적용하기 위한 Fine-Tuning 구조

Hugging Face가 제공하는 transformers 라이브러리를 사용한다면, 우리는 코드를 간편하게 작성할 수 있습니다.

# BERT는 입력 문장 내 존재하는 각각의  토큰을 768 차원으로 확장해 출력 
outputs = model(input_ids,
                attention_mask=attention_mask,
                token_type_ids=token_type_ids,
                position_ids=position_ids, 
                head_mask=head_mask)

# 분류 문제를 풀기 위해서는 [CLS] 토큰이 사용됨
pooled_output = outputs[1]

# 훈련을 위한 Dropout 계층 생성
dropout = nn.Dropout(hidden_dropout_prob)

# BERT의 최종 출력 값과 새로이 생성할 분류 계층 사이에 Dropout 적용
pooled_output = dropout(pooled_output)

# 분류 계층 생성
classifier = nn.Linear(hidden_size, num_labels)

# pooled output([CLS] 토큰)을 분류 계층에 전파 
logits = classifier(pooled_output)

 

마치며

이번 글에는 언어모델의 성능을 평가하는 벤치마크 데이터셋인 GLUE 에 대해 살펴봤습니다. 평가 지표인 BLEU와 헷갈리지 않게 유의합시다!

Reference 

GLUE: 벤치마크를 통해 BERT 이해하기 – Programador | Huffon Blog

본 글은 Chris McCormick과 Nick Ryan이 공동으로 작성한 GLUE Explained: Understanding BERT Through Benchmarks를 저자의 허락을 받아 한국어로 옮긴 글입니다. 잦은 의역이 있으니 원문을 살려서 읽고자 하신 분들은 링크를 참조해주세요.