일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Homomorphic Encryption
- 딥러닝
- Copilot
- 자연어처리
- Pre-training
- Computer Vision
- AI
- Model Compression
- 동형암호
- Machine Learning
- Github Copilot
- 표현론
- matrix multiplication
- KT
- attention
- Natural Language Processing
- bert
- Transformer
- Knowledge Tracing
- GPT
- 머신러닝
- Private ML
- ICML
- math
- Language Modeling
- Residual Connection
- Data Augmentation
- NLP
- Knowledge Distillation
- Deep learning
- Today
- Total
Anti Math Math Club
Improving BERT with Syntax-aware Local Attention 본문
Improving BERT with Syntax-aware Local Attention
seewoo5 2021. 1. 22. 17:18이번에는 짧고 간단한 논문인 Improving BERT with Syntax-aware Local Attention이라는 논문을 리뷰하도록 하겠습니다.
최근 NLP의 동향은 커다란 트랜스포머 모델을 pre-training시킨 뒤 원하는 downstream task에 fine-tuning하는 것 입니다. GPT와 BERT를 시작으로 다양한 pre-training 기법과 다양한 크기의 트랜스포머들이 세상에 나왔습니다. 그 중에서는 attention mechanism을 개선해서 좀 더 성능을 높이거나 혹은 연산량을 줄이는 방향의 연구가 많습니다(Reformer, Longformer, Sparse Transformer, Synthesizer 등). 이 논문에서는 syntax 정보를 이용해서 attention mechanism을 개선하는 Syntax-aware Local Attention(SLA)를 제안합니다.
방법은 매우 간단합니다. SpaCy같은 parser를 이용해서 주어진 문장의 dependency tree를 만든 뒤, 이 tree위에서의 노드 사이의 거리를 바탕으로 토큰 사이의 거리를 구합니다. 그리고나서, 그 거리가 특정 threshold 이하인 token만 attend하는 방식입니다. 참 쉽죠?
수식으로 쓰면 다음과 같습니다. 먼저, 두 token 사이의 거리 D(i, j)를 아래와 같이 정의합니다.

여기서 실제 tree위에서의 노드 사이의 거리가 아니라 v_j와 v_{i-1}, v_{i}, v__{j} 사이의 거리 중에서 최솟값을 택했는데요, 그 이유는 1) 입력 문장이 문법상으로 올바르지 않을 수 있고 2) dependency parsing이 완벽한건 아니기 때문에라고 이야기합니다. 그 다음에 이를 이용해서 local attention mask를 앞에서 말한것처럼 theshold m을 기준으로 (논문에서는 m = 3, 4를 택했다고 합니다.)

라고 정의하고, 이를 이용해서 syntax-aware local attention weight을

와 같이 계산합니다.
그리고 나서, SLA와 더불어 기존의 global attention을 같이 사용하는데, gated unit (single linear layer with sigmoid activation)을 하나 추가해서 아래와 같이 두 attention을 섞어줍니다.


여기서 W_g, b_g는 추가된 paramter입니다. 즉, gated unit g_i의 output이 두 attention 사이의 weight을 결정하게 됩니다. 전체 모델을 그림으로 나타내면 아래와 같습니다.

몇가지 주의해야 할 점이 있는데, 하나는 BERT는 SpaCy가 아닌 WordPiece tokenizer를 사용하기 때문에 SpaCy로 만든 parse tree와 차이가 생길 수 있습니다. 특히, 하나의 단어가 여러개의 sub-word로 쪼개질 수 있는데, 이러한 경우 각 sub-word의 masking이 같게 해줬습니다. 또한, [CLS]와 [SEP] token은 항상 살아있도록 (masking 되지 않도록) 설정했습니다.
실험은 NLP에서 많이 사용하는 sentimental analysis benchmark인 CoLA와 SST-2와 더불어, CoNLL-2003 (for Named Entity Recognition)과 FCE dataset (Grammatical Error Detection)에 대해서 진행했습니다. baseline으로는 SG-Net과 LISA, 그리고 window local attention(WLA)와 비교했습니다. SG-Net은 기존 (pre-trained) BERT에 각 token의 ancestor만 attend하도록 하는 Syntax-Guided Self Attention Layer를 마지막에 하나 더 추가해서 fine-tuning을 하는 방법이고, LISA는 Linguistically-Informed Self-Attention의 약자로, 트랜스포머의 여러개의 attention head 중 하나에 대해서는 syntactic dependency를 예측하도록 하는 joint training의 방법을 사용합니다. 이 둘의 구조는 아래 그림을 보시면 됩니다. 여기에 추가로 local하게 정해진 window size내에 있는 token만 attend하도록 하는 Window-based Local Attention(WLA)까지 비교를 합니다.



실험 결과는 위와 같습니다. Vanilla BERT와 SG-Net, LISA, 그리고 WLA에 비해서 SLA가 더 높은 성능을 보여주는 것을 알 수 있습니다. 다만 ERNIE, T5같은 sota 모델들에 비해서는 성능이 좋지 않습니다. (이는 sota 모델들이 더 큰 데이터로 더 좋은 pre-train기법을 사용했기 때문이라고 주장합니다. 저자들 말대로 sota모델들 셋업에서 SLA를 적용한다면 더 좋아질 가능성도 있을 것입니다.)

또한, layer별로 SLA와 WLA의 gated unit의 값을 비교하였는데, 위의 그림에서 볼 수 있듯이 (평균) gated unit의 값이 대체적으로 SLA가 WLA에 비해서 높게 나타납니다. 실제 성능도 SLA가 대부분 더 좋은 것으로 미뤄봤을 때, syntatic하게 중요한 token에 집중하는것이 실제로 모델 성능을 높이는 데에 도움이 된다고 할 수 있습니다.
굉장히 간단하면서도 효과적인(?) attention 기법을 제시한 SLA에 대해서 알아봤는데요, threshold를 기준으로 정하는것보다 조금 더 정교하게 (tree distrance로 weight을 준다던지 등..) masking을 만들면 더 좋은 성능을 보이지 않을까 하는 생각이 듭니다.
'Machine Learning & Deep Learning > Natural Language Processing' 카테고리의 다른 글
Pretrained Transformers as Universal Computation Engines (0) | 2021.04.03 |
---|---|
Patient Knowledge Distillation for BERT model compression (0) | 2021.03.25 |
Extract Training Data from Large Language Models (0) | 2021.01.11 |
F^2-Softmax: Diversifying Neural Text Generation via Frequency Factorized Softmax (0) | 2020.12.14 |
Data Augmentation in Natural Language Processing (0) | 2020.07.11 |