Search
👨‍👩‍👧‍👦

[논문리뷰] ICLR 2020 NLP 논문 정리

Created
3/7/2021, 12:26:24 PM
Tags
Conference
ICLR 2020에서 발표된 NLP 논문들을 정리해 보았습니다
여러분 모두가 아시다시피 코로나19로 인해서 부득이하게 이번 학회는 온라인으로 진행되었고, 포스터 발표 대신 각 논문 별로 5분의 발표 영상이 공개되었습니다. 학회장에 다녔을 때는 메인 발표와 포스터 세션 시간이 곂쳐 무언가를 포기해야 했기도 했고, 숙소가 조금만 멀면 아침 일찍 학회장에 가는 것 역시 어려운 일이었습니다. 하지만 이번 학회는 모두 온라인에 공개됨으로서 이런 시간적, 공간적 제약에 있어서 굉장히 자유로웠고, 영어가 잘 들리지 않는 저에게는 여러번 반복하며 들을 수 있어서 굉장히 유익했습니다.
이번 포스팅에서는 ICLR 2020 에서 발표된 NLP 논문들 중 관심 있는 몇가지를 선정해서 가볍게 요약 정리해 보았습니다. 요약을 정리한 방법은 단순하게 5분짜리 발표 영상을 보면서 발표하시는 내용을 주로 받아 적었으며, 추가적인 정보가 필요한 논문 같은 경우 논문을 찾아서 내용을 보충하였습니다.

리뷰한 논문들

ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

목표: BERT보다 적은 양의 파라미터로, BERT를 이길 수 있는 방법을 찾아보자
파라미터 수를 줄이는 방법 방법 1. Token Embedding Decomposition
token embedding 에서 hidden 차원 으로 바로 매핑시키는게 아니라, hidden 보다 작은 차원 k로 mapping 시키고 그 다음 원본 hidden dim 으로 매핑 시키는 방법.
nn.Embedding(vocab, hidden) -> nn.Embedding(vocab, k) x nn.Linear(k, hidden)
파라미터 수를 vocab * hidden개 에서 vocab * k + k * hidden개로 줄일 수 있습니다.
파라미터 수를 줄이는 방법 방법 2. Layer Weight Sharing
L개의 Transformer Layer 끼리 weight 를 sharing 함으로서 파라미터 수를 굉장히 많이 줄임
모델의 성능을 올리는 방법 1. Sentence Order Prediction
문장의 순서를 변형하고, 변형이 되었는지 안되었는지 분류하는 문제를 기존 pre-training objective 에 추가하였음.
모델의 성능을 올리는 방법 2. 더 많은 사전학습 데이터
사전학습시에 10배 더 많은 데이터를 사용하였음.
결과:
NLU Task: BERT Large(334M) 83.9
→ ALBERT Large(18M) 85.7 , ALBERT XXLarge(235M) 91.0

Mixout: Effective Regularization to Finetune Large-scale Pretrained Language Models

BERT 같은 pretrained LM 을 fine-tuning 할 때 효과적인 regularization 을 하고자 함.
Pretraining 에서 학습한 지식을 Fine-Tuning 당시에 완벽하게 까먹는 문제가 있는데, 이를 catastrophic forgetting 이라고 한다. 우리는 이 문제를 집중해서 해결하고자 함.
우리는 주로 모델의 성능을 향상시키기 위해서 dropout 을 사용하는데, 연결되는 모델의 connection weight 를 0으로 만들어 줌. 그렇다면 0 말고 다른 값으로 바꿔줄 수는 없을까?
Dropout 없이 Forward 된 Vanilla Network + Dropout Nework 을 mix 한 mixout network 를 사용함.
mixout 은 weight decay 와 차이가 있는데, mixout 은 weight decay 에서 사용하는 lambda 값이 weight 에 따라서 결정되기 때문이다.
이 방법을 사용했을 때 GLUE 에서 BERT 보다 좋은 결과를 낼 수 있었음.

Neural Text Generation With Unlikelihood Training

Maximum Likelihood 를 이용해서 Generation 을 학습하는 것이 문제가 있다고 생각함.
MLE 는 정답인 토큰의 probability 는 높이고, 그렇지 않은 토큰들의 probability 는 낮추도록 학습함.
이 방법에는 두가지 문제점이 존재하는데
첫째, 원하지 않은 토큰들이 생성되는 것에 대해 명시적으로 penalty 를 주지 않음
둘째, Gold Sequence 만을 이용해서 학습이 이루어 진다는 점임
위와 같은 문제를 해결하기 위해서 Unlikelihood Training 방법을 제안하며, 이는 다음과 같다.
첫째, 원하지 않는 토큰에 대해서 생성되지 않도록 명시적인 penalty 를 줌
둘째, decoded 된 sequence 를 보고 loss 를 계산하는 방식을 추가함.
decoded 된 문장에 random 토큰을 넣고 이에 대한 penalty 를 줌
생성된 단어 또는 구를 반복적으로 넣어 줌으로서 이에 대한 penalty 를 줌
기존 MLE 방식 (MLE, MLE + Nucleus Sampling, MLE + Beam Blocking) 과 Unlikelihood 방식을 비교했을 때 Unlikelihood 의 정성 정량 평가 성능이 우월했음
후속 논문으로서 Unlikelihood for dialog 도 존재하니 한번 같이 보면 좋을 것 같음.

ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators

BERT와 같은 Pretrained 모델들은 NLP 테스크에서 많은 성능향상을 보여 주었음.
하지만 이런 모델들은 Pretraining 시에 굉장히 많은 계산 자원이 필요로 한 문제가 있음
ULMFit, ELMo, GPT 는 Language Model(Token Generation) 을 이용해서 Pretrain
BERT, XLNet, RoBERTa, ALBERT 는 Masked Language Model 을 이용해서 Pretrain
bi-directional 한 정보를 사용하기 때문에 이점이 있음.
본 논문에서는 Replaced Token Detection 이라는 새로운 Pretraining Detection Task 를 제안한다
랜덤하게 몇몇 토큰들을 다른 토큰으로 replace 시키고, Discriminator 가 각 토큰이 replace 된 토큰인지 아닌지 분류하도록 하여 pretraining 하는 방법
이러한 방법은 모든 토큰에 대해서 판단을 해야 하기 때문에, 기존의 15%만을 이용해서 pretraining 을 하는 것 보다 훨신 효율적인 학습을 할 수 있음
그러면 Replaced Token 은 어디서 오는가?
별도의 분리된 MLM Generator (예: 작은 BERT) 를 학습시켜서 Replaced Token 을 Generate 하게 함
Generator 는 ELECTRA와 같이 학습을 진행함.
이 방식을 이용해서 SuperGLUE 에서 더 좋은 성능을 얻을 수 있었음.
기존의 모델들 보다 학습 시간이 획기적으로 많이 줄었고, 성능도 높은 pretraining 방식을 제안함.

Poly-encoders: Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring

대화의 컨텍스트를 보고, 주어진 답변 후보들을 빠르고 정확하게 순위를 매기는 것임.
데이터셋으로는 ConvAI2, DSTC7, Ubuntu v2, Wikipedia Article Search 를 사용하였음.
BERT 를 기본으로 사용하였으며, Reddit 도 pre-training 에 사용하였음.
BI-Encoder
Context, Candidate Encoder 를 분리해서 각각 Representation 을 추출하고, dot-prodoct 를 통해서 정답 후보간의 score 가 작아질 수 있도록 최적화 하는 방법
Candidate 에 대해서 Precomputed 를 할 수 있기 때문에 효율적임.
Cross-Encoder
Context와 Candidate 를 concat 해서 Encoder 의 입력으로 넣고 Self-Attention 을 통해서 하나의 scalar 값을 예측하는 방법. representation 간의 비교가 아닌, 토큰 단위의 self-attention 을 함으로서 Bi-Encoder 보다 좋은 성능을 내었음.
하지만 모든 답변 후보들에 대해서 계산을 해야 했기 때문에 Bi-Encoder 보다 속도가 훨신 느림
Poly-Encoder: 위 두가지 문제를 해결할 수 있는 방법
Candidate 를 Encoding 해서 Candidate embedding C 를 만듬
Context 역시 Encoding 하는데, M개의 Code 로 표현하도록 함. 하지만 우리는 Context Embedding 을 만들어야 하기 때문에 M 개의 Embedding 을 1개의 Embedding 으로 표현해야 함.
하나의 Embedding 을 만들기 위해서 M개에 대해 Attention 을 취하는데, 이때의 Key를 Candidate Embedding C로 사용함.
이렇게 만들어진 Context Embedding 과 Candidate Embedding 간의 Dot-Prodoct 를 사용해서 점수를 계산함. 제일 높은 점수의 답변 후보가 출력됨.
결과
Cross-Encoder 과 거의 근접한 성능을 내면서 Bi-Encoder 보다 조금 느린 결과를 얻을 수 있었음.
또한 Encoder를 Pretrained 된 Weight 를 사용했을 때 성능이 더 좋았으며, Reddit 으로 Pretraining 을 한 경우가 가장 좋았음.
속도와 정확도의 tradeoff 에서 적절한 지점을 찾을 수 있었음.

Pre-training Tasks for Embedding-based Large-scale Retrieval

Large Scale Retrieval 을 위한 Pretraining 방법을 제안함
본 논문에서는 RetrievalQA 에 초점을 맞추고 있지만, 대용량의 Retrieval 문제에서 활용될 수 있을 것임.
Cross-Attention 방식(query-doc 를 concat)의 성능은 좋으나, 속도에 있어서 큰 제한점이 있음.
Two-Tower 방식은 doc과 query의 representation 을 이용해서 둘 사이의 거리를 좁히도록 학습함.
Paragraph-Level Pretraining Task
Wikipedia 데이터를 이용해서 아래에 적시한 테스크들을 만들 수 있음.
ICT(Inverse Close Text): 문단 내에서 랜덤하게 한 문장을 설정한다
BFS(Body First Section): 해당 문단이 존재하는 맨 첫 문단에서 랜덤한 문장을 샘플하는 방법
WLP(Wiki-Link Prediction): 하이퍼링크 걸려 있는 다른 문서의 첫번째 문단에서 랜덤함 문장을 샘플 하는 방법
위 3가지 방식의 Task 를 Multi-Task Learning 으로 학습하는 방식으로 Pretraining 을 진행함.
이렇게 했더니 기존 Retrieval 방식보다 뛰어난 성능의 모델을 만들 수 있었음.

The Curious Case of Neural Text Degeneration

Generation 시에 우리는 흔히 Beam Search 를 사용함.
실제 사람의 단어 분포와, GPT2의 모델 분포를 비교해보면 GPT2는 거의 1에 가까운 확률로 단어를 생성하지만, 사람은 다양한 분포의 단어를 사용하는 것을 확인할 수 있음.
우리는 생성 모델의 Sampling 방식에 대해서 문제를 제기하며 이를 해결할 수 있는 방법을 제안함.
기존의 Top-K 방식의 Sampling은 두가지 문제점을 갖고 있음.
문제1. 만약에 K 내의 토큰들 중에서 Random 한 단어를 선택한다면, 확률이 굉장히 낮은 단어도 선택될 수 있음.
문제2. 만약에 K 내의 확률분포가 uniform distribution 일 경우에는 뻔한 답변들만 내보낼 가능성이 있음.
본 논문에서는 Nucleus Sampling 이라는 방법을 사용함.
Top-K 의 단어를 선정할 때 K개의 단어를 선정하는 방식이 아닌, 확률 분포의 합이 P가 될 때까지의 단어들을 샘플링 하는 방법을 사용한다.
문제1 에 대해서는 굉장히 높은 확률 값을 갖는 토큰들만이 샘플링 후보가 될 것이고
문제2 에 대해서는 다양한 토큰들을 샘플링 후보로 선정할 수 있기 때문에 보다 다양한 단어가 뽑힐 수 있다.
이 방법을 이용해서 기존 샘플링 방법들 보다 훨신 좋은 정성 평가 결과를 얻을 수 있었음.