2019년 6월 13일 목요일

논문 리뷰 - BERT Rediscovers the Classical NLP Pipeline

BERT에 대해 분석한 또다른 논문입니다. "What do you learn from context? Probing for sentence structure in contextualized word representations" 논문을 쓴 Ian Tenney, Dipanjan Das, Ellie Pavlick이 수행한 후속 연구에 대한 논문인 듯 합니다. 위 논문에 대한 리뷰는 여기서 볼 수 있습니다.

논문 링크 : https://arxiv.org/pdf/1905.05950.pdf

요약

BERT의 하부 레이어는 syntactic한 분석을, 상부 레이어는 semantic한 분석을 수행한다.


실험 내용

실험 내용은 "What do you learn from context?" 논문과 거의 같습니다. 다만 이 논문에서는 BERT에 대해서만 분석합니다. 각 task들을 수행할 때 pre-train 된 파라미터들을 freeze하고 실험을 수행합니다.


Metrics

1. Scalar mixing weights

각 task에 맞는 classification을 위해 쓰이는 마지막 linear + softmax layer의 input을 각 layer들의 output을 weighted sum을 하여 얻습니다.
t는 task를 의미하고, i는 각 input 토큰의 index 뜻합니다. s가 각 layer에 곱해지는 스칼라 weight를 의미하며 각 layer의 weight들로 softmax를 수행한 값입니다. 감마는 scaling을 위한 파라미터 같습니다.

이렇게 구한 h로 classification을 수행하면 학습된 s를 통해 어떤 layer의 정보를 많이 참조하였는지 알 수 있습니다.

또한 아래와 같이 Center-of-Gravity를 정의하여 각 task 별 특성을 파악할 수 있습니다.
각 task에서 가장 많이 참조한 layer를 평균적으로 나타낸 지표입니다.

2. Cumulative scoring

한 layer가 추가될  때마다 얼마나 성능이 변화되었는지를 측정합니다.
P(l)은 훈련이 완료된 전체 모델에서 l번째까지의 layer를 사용한 모델입니다.  Cumulative score들을 이용해 아래와 같이 expected layer를 구합니다. Center-of-Gravity와 거의 같은 개념입니다.
각 task에서 최고 성능을 내기 위해 평균적으로 필요한 layer의 수라고 생각하면 될 것 같습니다.


실험 결과


보라색 막대그래프의 숫자는 center-of-gravity이며 파란색 그래프의 숫자는 expected layer입니다.

위의 실험 결과를 보면 POS tagging -> Constituents -> Dependency -> SRL -> Coreference 순으로 높은 층의 정보를 많이 활용한다는 것을 알 수 있습니다. 이를 통해 Syntactic한 정보는 low layer에, semantic한 정보는 high layer에 위치한다는 것을 알 수 있습니다.

각 layer에 대한 weight와 cumulative score는 아래와 같습니다.
K(x) 값은 KL(x||Uniform) 을 의미하며 cumulative score와 weight가 얼마나 uniform 한지를 나타냅니다. 0에 가까울수록 uniform합니다.

Syntactic한 task들의 weight들이 spiky(특정 layer의 weight들이 다른 layer들의 weight들에 비해 눈에 띄게 높다)한 특성을 보입니다. 반면 semantic한 task들의 weight들은 전반적으로 고루 퍼져 있습니다. 어쩌면 이를 통해 BERT가 이런 semantic한 task를 위한 정보를 저장하는 데 아직 부족하다고 유추해볼 수도 있습니다. BERT 모델의 semantic한 task들의 수행 능력에 대해서는 아직도 추가 연구가 필요해 보입니다.

대부분의 task들에서 하부 레이어들만 이용해도 거의 최고 성능에 근접하는 것을 볼 수 있습니다. 논문에서는 "heuristic shorcuts : ... many cases can be guessed from shallow statistics" 라는 표현을 썼습니다. 그렇지만 mixing weights는 비교적 상부의 정보들을 이용하는 것으로 보입니다.
그리고 특이한 점으로, weights의 분포가 일부 layer들에 몰려있는 경우 cumulative score가 높은 layer 또는 바로 그 다음 layer에 대한 weight가 높게 나왔다는 점입니다.

예시로 두 문장에 대한 분석을 보여줍니다.
여기서는 base 모델을 사용했습니다. (a) 예시에서는 하부 layer에서 모델이 'toronto'를 지명이라고 예측합니다. 하지만 SRL task에 의해 'toronto'가 'smoked"의 대상이 되는 것으로 판단한 후 ORG로 예측을 변경하게 됩니다.비슷하게 (b) 예시에서는 하부 layer에서  'today'를 시간을 나타내는 NN(POS), DATE(Entity)로 인식하지만 상위 layer로 갈 수록 "china today"를 proper noun으로 인식하면서 entity 종류와 semantic role을 변경시켜나가는 것을 볼 수 있습니다.

결론

실험을 통해 BERT 내부에서 layer 층이 높아지면서 전통적인 NLP pipeline에 해당하는 task들을 수행한다는 것을 보였습니다. 또한 위의 예시와 같이 하부 layer에서 부정확한 예측을 하더라도 상위 layer에서 예측을 수정했을 때 어떤 일이 벌어지는가를 분석하여 보여주었습니다. 오히려 syntactic -> semantic 순으로 분석하는 게 아니라 semantic 정보를 활용하여 syntactic 정보를 개선해나가는 경우도 있었습니다.

결론적으로 딥러닝 모델이 syntactic, semantic 정보를 잘 표현(저장)할 수 있으며 그 정보를 hierarchical 하게 저장하고 있다는 점을 알 수 있었습니다.

저는 개인적으로 BERT를 훈련시킨 (Masked) Language Modeling이라는 task 또는 학습 방법이 단순히 language modeling만 잘 하게 만드는 것이 아니라 다른 모든 NLP task들을 잘 하게 만드는 방법이란 생각이 들었습니다.