learningAI
article thumbnail

SpanBERT는 연속된 텍스트를 예측함으로써 더 나은 representation이 가능해진 모델이다. BERT에서 파생된 모델이며, 기존의 pre-training이 단일 토큰을 마스킹했던 것과 다르게 해당 모델은 랜덤하게 선정된 연속적인 토큰(span)을 마스킹하는 것이 특징이고, 개별 토큰 표현에 의지하지 않으면서 maked span을 더 잘 예측 하기 위해 SBO(Span Boundary Objective)를 제안한다.

이로 인해 SpanBERT는 기존 BERT에 비해 span selection tasks(question answering, coreference resolution)에 대해 월등히 나은 성능을 보이게 된다. BERT-large와 모델 사이즈가 같은 SpanBERT 모델은 SQuAD 1.1/2.0에 대해 94.6/88.7%의 F1 성능을 보인다. 또한 GLUE 벤치마크를 비롯해 TACRED, OntoNotes에서 SOTA(state-of-the-art)를 달성하였다.

BERT 논문을 안 읽어보신 분들은 이전의 포스팅을 참고해주세요!

 

Introduction

단일 토큰을 마스킹하는 self-supervised training을 사용하는 BERT는 많은 tasks에서 성능 향상을 일으켰다. 하지만, 많은 NLP tasks가 연속된 두개 이상의 토큰에 대한 관계성의 추론을 다루는 것에 비해 BERT는 성능 면에서 비효율적이라고 할 수 있다. SpanBERT는 span-level의 마스킹을 통한 pre-training 기법을 활용하여 BERT를 개선했으며 특히 question answering과 같은 span selection tasks에서 좋은 성능을 보인다.

SpanBERT는 pre-training 과정을 통해 모델이 text span(연속된 토큰)에 대해 더 높은 이해 능력을 가질 수 있도록 고안되었다. BERT는 개별적인 토큰에 대한 마스킹을 통해 훈련되지만 SpanBERT는 span을 마스킹하여 예측하도록 학습되며, 마스킹된 span을 효율적으로 예측하기 위한 method로 SBO가 사용되었다.

SpanBERT는 기존의 논문에서 제시된 것보다 나은 성능을 지닌 BERT를 기반으로 구축되었다. 기존의 BERT의 NSP를 제거하고 단일 segment에 대한 학습으로 성능이 향상되었다.

 

Methods

앞서 서론에서 설명한 것처럼 SpanBERT의 주요 method는 총 3가지이다. Pre-training에서 span 마스킹을 위해 랜덤한 과정을 거치며, SBO를 통해 span을 예측한다. 그 다음, 단일 세그먼트의 입력을 사용함으로써 기존 BERT의 NSP를 제거했다.

 

Span Masking

Complete word로 구성된 입력 시퀀스 $X = (x_1, x_2, \cdots, x_n)$이 주어질 때, span $Y \subseteq X$ 는 입력 $X$의 15% 만큼 추출된다. 이때, span을 선택하는 과정은 다음과 같다.

 

그림 1. Geomentric distribution ($p = 0.2$, $l_{max} = 10$)

  1. 가장 처음으로 [그림 1]의 기하학적 분포에 따라서 span 길이를 결정한다. $p = 0.2$, $l_{max} = 10$로 설정됨에 따라 결정되는 span 길이의 평균은 $mean(l) = 3.8$이다.
  2. 마스킹할 span의 시작점을 랜덤하게 결정한다. 마스킹 span의 시작 지점은 항상 하나의 단어의 시작점이 되어야 한다.
  3. BERT와 동일하게 선택된 15%의 토큰에 대해서 80%의 토큰은 [MASK]로 대체하고, 10%는 랜덤한 토큰으로 대체하며 10%는 원래 토큰 그대로 유지한다.
  4. Span을 마스킹할 때, 각 토큰을 마스킹하는 것이 아니라 하나의 [MASK] 토큰으로 대체된다(ex. "the cat" -> [MASK]).

SBO

Span selection model은 일반적으로 span의 경계에 있는 토큰을 활용하여 고정된 크기의 representation을 생성한다. SpanBERT도 이러한 컨셉을 가지며, 이상적으로 span의 끝 부분은 span의 내용을 가능한 많이 내포하고 있다. 따라서 span의 경계에 위치한 토큰을 활용하여 span의 끝부터 예측하는 방식인 SBO(Span Boundary Objective)를 사용한다.

각 토큰이 encoder를 거쳐 계산된 출력을 $\textbf{x}_1, \cdots, \textbf{x}_n$이라고 하고, 마스킹된 span을 $(x_s, \cdots, x_e) \in Y$라고 하자. 이때, $(s, e)$는 span을 이루는 토큰의 시작과 끝 인덱스를 의미한다. 이때, SBO는 span의 경계에 위치한 토큰인 $\textbf{x}_{s-1}$와 $\textbf{x}_{e+1}$, 그리고 타깃 토큰의 위치 정보인 $\textbf{p}_{i-s+1}$을 사용해서 span을 예측하며, objective function은 다음과 같다.

 

$$\textbf{y}_i = f(\textbf{x}_{s-1}, \textbf{x}_{e+1}, \textbf{p}_{i-s+1})$$

 

위치 임베딩 $\textbf{p}_1, \textbf{p}_2, \cdots$ 는 왼쪽 경계에 위치한 토큰인 $x_{s-1}$에 대한 상대적인 위치를 나타낸다. 위의 representation 함수 $f(\cdot)$는 두개의 feed-forward 네트워크로 이뤄져있다.

 

$$\textbf{h}_0 = [\textbf{x}_{s-1}, \textbf{x}_{e+1}, \textbf{p}_{i-s+1}]$$

$$\textbf{h}_1 = LayerNorm(GeLU(\textbf{W}_1 \textbf{h}_0))$$

$$\textbf{y}_i = LayerNorm(GeLU(\textbf{W}_2, \textbf{h}_1))$$

 

이렇게 생성된 벡터 표현 $\textbf{y}_i$는 기존의 토큰인 $x_i$를 예측하기 위해서 사용되며 MLM과 동일하게 cross-entropy loss를 계산한다.

SpanBERT는 마스킹 된 span 내의 각 토큰 $x_i$에 대해 SBO와 MLM objective의 loss를 합산하며, 목표 토큰의 입력 임베딩을 MLM과 SBO 모두에서 재사용한다. 이렇게만 말하면 이해하기 어려우니 먼저 아래의 그림을 살펴보자.

 

그림 2. MLM과 SBO의 loss를 더한 loss 사용

 

위의 그림은 "an American football game"이라는 span이 마스킹되었을 때, 'football'이라는 토큰을 예측할 시의 loss를 구하는 그림이다. 위의 수식을 보면 'football' 개별 토큰에 대한 MLM loss와 SBO loss를 더한 값을 계산하는 것을 볼 수 있다.

 

Single-seq Learning

SpanBERT는 기존 BERT의 NSP(Next Sentence Prediction)을 제거했다.

기존의 BERT는 입력으로 두개의 sequence ($X_A$, $X_B$)를 사용한다. 두개의 sequence는 하나의 문서에서 추출되었거나 서로 다른 문서에서 추출될 수 있다. 따라서 BERT는 두 sequence가 실제로 연속되는지를 예측하기 위한 NSP를 제시했지만, 많은 연구에서 그랬듯이 SpanBERT도 NSP가 성능 감소를 일으킴을 주장한다. 따라서 SpanBERT은 최대 길이 $n = 512$인 세그먼트를 입력으로 사용하여 학습하게 된다. 이는 다음과 같은 장점을 가진다.

 

  1. 더 긴 문맥을 입력으로 사용함으로써 이점을 가진다.
  2. 다른 문서에서 추출한 sequence는 노이즈 역할을 할 수 있으며, 이를 사용하지 않음으로써 이점을 가진다.

Experiments

SpanBERT는 question answering task, coreference resolution, GLUE benchmark, 그리고 relation extraction task에서 성능 평가를 진행한다. 특히 모델이 span selection task, question answering, 그리고 coreforence resolution task에서 좋은 성능을 보일 것으로 기대한다.

Extractive Question Answering 문제에서는 가장 널리 쓰이는 SQuAD 1.1/2.0을 포함하여 MRQA shared task의 5개의 데이터를 추가로 사용하여 총 7개의 데이터셋에서 모델을 평가한다. MRQA shared task는 따로 test 데이터를 포함하지 않으므로 구현 과정에서 데이터를 반으로 나눠 테스트 데이터를 확보한다. BERT는 QA task에서 출력층에 의해 정답의 시작과 끝을 예측한다. SpanBERT도 이와 같이 문단 $P = (p_1, p_2, \cdots, p_l)$와 문제 $Q = (q_1, q_2, \cdots, q_{l'})$이 주어졌을 때, 입력 sequence는 $X = [CLS] p_1 p_2 \cdots p_l [SEP] q_1 q_2 \cdots q_{l'} [SEP]$와 같이 형성된다. 이는 encoder 계산을 거쳐서 두 개의 출력 계층을 통해 결과를 도출한다. 이때, 각 출력층은 시작 위치와 끝 위치를 예측하는 linear classifier 계층이다. SQuAD 2.0에서와 같이 답변할 수 없는 문제에 대해서는 span을 [CLS]로 학습한다. 이는 단순히 문제를 무시하는 것보다 모델이 더 나은 성능을 가질 수 있게 한다.

 

Coreference Resolution 은 주어진 문장에서 대명사 혹은 명사구가 어떤 대상을 의미하는지 인식하는 task이다. 예를 들어 "Jack은 매일 헬스장에 갑니다. 그는 리프팅을 즐깁니다."에서 '그'는 'Jack'을 의미하므로, 모델이 이를 인식하게 만드는 것이 task의 목표이다. SpanBERT는 해당 task에 대한 평가를 위해 CoNLL-2012 shared task를 사용한다. document는 겹치지 않는 segment로 쪼개지며, 각 segment는 인코더(LSTM 대신 transformer)에 의해 독립적으로 계산된다. 각 mention span $x$에 대해, 모델은 가능한 $Y$에 대한 분포를 학습한다.

 

$$P(y) = \frac{e^{s(x, y')}}{\sum_{y' \in Y} e^{s(x, y')}}$$

 

Span pair scoring 함수인 $s(x, y)$는 고정된 크기의 span과 $x$, $y$의 hand-engineered featured feedforward 네트워크이다.

 

$$s(x, y) = s_m(x) + s_m(y) + s_c(x, y)$$

$$s_m(x) = FFNN_m(\textbf{g}_{\textbf{x}})$$

$$s_c(x, y) = FFNN_c(\textbf{g}_{\textbf{x}}, \textbf{g}_{\textbf{y}}, \phi(x, y))$$

 

$\textbf{g}_{\textbf{x}}$, $\textbf{g}_{\textbf{y}}$ 은 span representation을 의미하며, $FFNN_m$과 $FFNN_c$는 하나의 hidden layer을 가진 feedforward 네트워크를 나타내며 $\phi(x, y)$는 hand-engineered features를 의미한다.

 

Relation Extraction TARCRED는 난이도 높은 relation extraction 데이터셋이다. Relation extraction task는 문장에서 entity의 정해진 42가지의 관계를 파악하는 문제이다. 예를 들어 "Steve Jobs는 Apple의 창업자이다"의 문장에 존재하는 두 entity "Steve Jobs"와 "Apple"의 관계는 '창업자'이다. 

 

GLUE (General Language Understanding Evaluation) 벤치마크는 9개의 sentence-level 분류 task를 포함하는 가장 널리 사용하는 기본적인 성능 평가 벤치마크이다.

 

SpanBERT는 세가지 baseline 모델들과 비교되었다. 가장 먼저 Google BERT는 기존의 BERT 논문과 동일하게 구현된 모델이다. 다음으로 본 논문에서 변형한 Our BERT, Our BERT-1 seq가 있으며, 이는 개선된 데이터 처리와 최적화, 그리고 NSP의 제거에 대한 차이가 있다. 가장 먼저 extractive question answering 실험 결과를 살펴보자.

 

표 1. Extractive question answering results

위의 [표 1]은 SQuAD 1.1/2.0에 대한 성능표이다. SpanBERT는 BERT baseline과 비교하여 F1 수치가 각각 2.0%, 2.8% 높은 결과를 보인다. SQuAD 1.1에 대하여 이는 27%의 error reduction을 의미한다. 위에서 언급했던 추가 5가지 데이터에 대해서도 SpanBERT가 모두 가장 높은 성능을 보였다. 다음은 coreference resolution task의 결과이다. BERT에서 변형한 'Our BERT' 모델은 기존 BERT보다 높은 성능을 보였으며, NSP를 제거한 모델을 그보다 더 높은 성능을 보였다(SQuAD 1.1에서 1%가량 높은 성능).

 

표 2. Coreference Resolution results

위의 포는 OntoNotes 벤치마크에 대한 성능을 보인다. Our BERT는 기존의 Google BERT의 F1 성능을 1.2%만큼 향상시켰으며 NSP를 제거한 Our BERT-1 seq 모델은 0.5%의 추가 성능 향상을 보인다. 결론적으로 SpanBERT가 가장 성능을 보이며, 평균 F1 점수 79.6%로 SOTA를 달성한다. 

 

나머지 Relation Extraction과 GLUE 벤치마크 성능은 논문에서 확인해주세요!! (대부분의 task에서 다른 baseline 모델들보다 나은 성능을 보였다)

 

Discussions

논문은 span-based pre-training을 사용한 SpanBERT를 제안했다. 연속된 token으로 이뤄진 랜덤한 span을 마스킹하고, 개별 토큰에 의지하지 않고 SBO를 통해 마스킹된 span을 예측한다. 이를 통해 학습된 SpanBERT는 많은 tasks(특히 span selection tasks)에서 다른 BERT baseline 모델보다 나은 성능을 보인다.

profile

learningAI

@YyunS

인공지능 공부하는 학생입니다!