TL;DRIssue: General Knowledge로 학습한 BERT는 전문성 필요한 Domain에 효율 XSolution: BERT 얼려두고 새 vocab, embeddings 만들고 추가 module(BERT-like) 붙여서 학습하자!장점단점Idea & QuestionAbstractIntroductionGeneral PLM의 이슈exBERT!Related workexBERT detailsExtension vocab & Extension Emb layerExtension Module (=BERT Layer)ExperimentsexBERT FinetuneDownstream task FinetuneResult (Downstream task Finetune, NER)1. Extension Vocab + Module2. Extension Vocab(+emb) only3. Extension Module only (no vocab)Result on REPretrain 시간(=computing power)에 따른 성능 향상 비교(NER)Result on RE실제 코드 동작하나?
TL;DR
Issue: General Knowledge로 학습한 BERT는 전문성 필요한 Domain에 효율 X
- 이로 인해 수많은 파생 BERT 모델들이 나옴
- 전력낭비
- 컴퓨팅 파워도 이슈
- Pretrain from Scratch 하기에 데이터가 매우 부족한 Domain이 많음
- 특히, 이 중에서 '전문용어' vocab OOV 혹은 Sub-word Split으로 인한 성능 저하가 심각함
Solution: BERT 얼려두고 새 vocab, embeddings 만들고 추가 module(BERT-like) 붙여서 학습하자!
장점
- General PLM의 장점을 그대로 가져다 쓸 수 있다!
- 엄청나게 많은 데이터 없어도 된다. Domain 관련 데이터셋만 잘 준비하자
- Domain에 맞는 Vocab을 맞춰쓸 수 있다 (= 성능이 오를수밖에 없다)
단점
- Model size가 커짐(추가 Module 사용하기 때문)
- 하지만 이 paper의 초점은 "적은 컴퓨팅 / 적은 데이터"로 고효율, General BERT로 성능을 leveraging하는 것이기 때문에 큰 이슈가 아님
- 어쨌든 Domain Adaptation 위한 데이터 필요.
- 이 데이터양도 적은게 아님. 적어도 GB단위로는 필요함.
- Encoder 계열에 쓸 수 있는건 알겠어. Generation, decoder쪽도 이게 가능할까?
Idea & Question
이거, 사실 DAPT,TAPT가 아니라 Multilingual, 즉 Single language model을 Multilingual model로 만들수 있는 방법 아닐까?
KcBERT의 한계점이 General Knowledge가 부족한 부분인데, 이 부분을 쉽게(?) 보완할 수 있지 않을까?
모델 구조 자체가 바뀐다는 이슈는 있지만...
General BERT의 output을 사용하지만 새로 붙인 module만 학습한다면.. 따로 각각 학습해 쓰는 것보다 과연 성능이 더 좋을까?
충분히 많은 양의 데이터면 애초에 이런 레버리징을 할 필요도 없긴 함..
이게 BERT 등 PLM의 Online-learning의 길이 될까?
N-days 데이터로 학습해서 모델 사이즈 키워서 넣고 넣고?
하지만 데이터가 부족하면 애초에 new vocab을 위한 embedidng representation 자체가 안될거같은데.....
여기서 사용하는 추가 embedding부분을 단순한 word2vec의 weight로 Initalize & Freeze해서 쓰면?
어차피 Input output만 동일하면 상관없으니까, 학습하는 비용이 상당히 줄어들 듯
ex)"cell" 단어등 General corpus에 등장하는 단어같은 경우 어떻게 잘 학습이 될까??
BERT Model 대신 한국어 모델 없는 케이스에 대해서 '한국어'라는 Domain에 Adaptation
Longformer / T5 등 한국어 없는 모델에 추가해주면!?
Abstract
- exBERT = Training Method to extend BERT PLM from "general" domain to a new PLM for "specific" domain with new additive vocab under constrained training resouces(computing/dataset)
- 즉 제한된 데이터/컴퓨팅 상황에서 General Domain으로 학습한 PLM으로 성능을 최대한 갖다쓰자
- 작은 "extension module"을 사용한다.
- Augmenting Embedding
- 기존 BERT 모델 vocab과 weight는 Freeze❄️
- 전체적으로 학습에 필요한 양이 감소
- Freeze 안시키면 Cascading Forgetting 발생함
- exBERT 성능 증명위해 Biomedical쪽 데이터셋 학습
- Pretrain dataset: ClinicalKey, PubMed Central
- BioMedical쪽 데이터셋! 따라서 비교군 Model 역시 BioBERT등등...
- Downstream task: MTL-Bioinformatics-2016
- 전체적으로 exBERT 성능이 더 좋음!(당연..?)
Introduction
General PLM의 이슈
- PLM으로 인해 NLP 성능 엄청 올라감 (← 요즘 이 문장은 모든 NLP 페이퍼에 단골로 등장)
- 하지만 PLM의 두 가지의 큰 Challenges 있음
- Large Training Resources
- 학습에 필요한 데이터양이 너무 많다.
- BERT, RoBERTa 페이퍼를 봐라.
- Embedding of Domain-Specific vocab (← 이게 최근에 이슈로 가장 많이 생각된 부분.)
- Biomedical처럼 특정 도메인에서는 전문 Vocab들이 있다.
- 해당 분야 Corpus에는 General vocab과 전문 vocab 모두 등장한다.
- 이러한 Mixture vocab 환경에서 동작하는게 고성능의 핵심(Downstream task)
exBERT!
- 명시적으로 특정 도메인의 vocab을 포함
- 동시에 이미 있는 vocab은 → 기존 PLM을 사용할 수 있도록 내버려두기 (weight 얼리자 ❄️)
- 이를 통해 Original pretrain weight 유지하면서 학습시간 및 필요 데이터 극적으로 감소
- exBERT
- 새로운 vocab으로 새로운 embedding까지
- 이때 새 vocab은 타겟 domain을 위한 단어
- 이와 함께 기존 layer에 자그마한 크기의 layer module 추가
- 기존 BERT와 새 layer의 weighted sum으로 output
- exBERT는 위 방식으로 BioBERT(기존 BERT에 단순 추가학습)보다 더 높은 성능을 얻었음
- 성능 평가 데이터셋
- NER
- Relation Extraction
- 둘 다 Biomedical
- Paper의 Contribution: low-cost(컴퓨팅, 데이터)로 Domain vocab으로 성능 좋은 DAPT
Related work
- General NLP
- Learning Representation
- BERT, etc. (transformer models)
- WordPiece등 sub-word tokenizer
- Domain-Specific PLM
- BioBERT
- Original Paper BERT(google bert)에 BioMedical corups로 추가 학습
- BERT 모델 구조나 Vocab 변형 X
- SciBERT
- Geneal domain vs Scientific Article에서 각각 추출한 vocab을 비교
- General Domain은 구글BERT 그대로 사용
- 58%의 Sci관련 vocab이 geneal vocab에 포함되지 않음
- 그래서 새로운 Sci vocab 만들어서 BERT from scratch
- PubMedBERT
- PubMed Article로 BERT from scratch
- 위 모델 등에서 보여주는 것: Proper vocab은 특정 Domain downstream task의 성능을 꽤 올려준다.
- 하지만 Pretrain from Scratch는 너무 비쌈.
- 특히 Multilingual Model의 경우 vocab의 한계로 각각의 언어를 cover하지 못하는 OOV 이슈가 심함
- (??? 이미 여기서 Multilingual에 쓸 수 있는 가능성은 알고 있었던 것인가?)
- 모 연구(wang etl al, 2019)에서는 각각의 OOV words를 English subwords의 mixture로 표현하기도..
- 하지만 일단 Domain-specific words를 sub-words mixture로 표현하는건 성능이 잘 안나옴.
- Adapter
- 기존 모델 전체를 Fine-tune하는 대신 Adapter만 튜닝해도 성능 잘 나온다.
- exBERT는 Adapter랑 유사한 개념이지만 Downstream Fine-tune 대신 Pretrain단계의 연장으로.
- Size-Free extension module + Embedding layer 학습
exBERT details
exBERT = BERT + Extension Embedding Layer + Domain vocab + Extension module(each Transformer layer)
Extension vocab & Extension Emb layer
- 가장 중요한 것은 Domain Vocab
- 새 corpus로 vocab 만들고 기존과 중복되는것 제거한 vocab2 생성
- 아래 그림 기준 파랑 = 기존 vocab
- 노랑 = 신규 vocab(파랑과 안겹치게, 전문용어 등)
- 노랑은 노랑이 Embedding Layer를 태움
- 파랑과 노랑은 vocab수 차이는 나지만 → Output dim은 768로 동일
- 그래야 Sentence emb layer로 올릴 수 있으니..
- 이때, 기존 노랑 임베딩 값을 기존 BERT가 '당연히' 이해 못하기 때문에..
- 우측 아래 노란 Embedidng Module을 추가로 달아준다.
- 이를 통해 Sentence embedidng (= 문장길이 n x 768)을 합쳐서 만든다.
- weighted sum
Extension Module (=BERT Layer)
- 이때의 Extension Module의 크기는 기존 것보다 조금 작게 (intermid 크기를 줄인다는 등) 만들어줘도 괜찮음.
- 크기를 키워도 효과가 그만큼 나지 않음
- 추가 Vocab의 경우 기존 vocab보다 많이 작아도 괜찮음.
- 실험시 2만-3만개까지 올려도 의미있는 성능향상은 보이지 않음
- Extention Module을 기존 Module과 합치는 것은 위 우측 그림, 위 수식의 방식.
- Sigmoid는 output의 constrain 위해서 사용
- Weight block은 768x1 크기의 FC Layer
- weight sum 처리해주기 위해서 사용
Experiments
exBERT Finetune
- Google BERT(uncased) 모델을 기반으로 학습
- Extension Module은 기존 BERT의 각 layer보다 작은 크기의 layer를 붙임
- 각 Extension 사이즈별로 성능 테스트 진행함
- 학습 과정에서 기존 BERT를 Freeze하거나 or 전체 weight를 update하거나
- V100 x4대로 진행
- BioMedical Corpus (17GB)
- Clinical Key 2GB
- PubMed Centeral 15GB
- Batch 256, Seq length 128
Downstream task Finetune
- NER(Named entity recognition)
- RE(Relation Extraction)
- 위 2가지 종류의 task에 대해 Finetune
- 1e-5 LR로 Top-3 layer만 학습
- MTL-Bioinformatics-2016 dataset으로 학습
- Performance 비교 대조군
- Original BERT(Google BERT)
- (own-trained) BioBERT
- (own-trained) reduced-resource BioBERT
Result (Downstream task Finetune, NER)
- 위 그림에서 볼 수 있는 것처럼 BERT < rrBioBERT < exBERT
1. Extension Vocab + Module
- Extension Module의 크기에 따라 성능이 '약간' 향상되지만, 33%(약 1/3크기) 이후로는 성능 향상 X
- 따라서 기존 BERT보다 1/3정도 크기의 Extension Module로 충분함
- 페이퍼 실험은 해당 33.2%(1/3크기)의 exBERT로 테스트 진행함
2. Extension Vocab(+emb) only
- Extension Module 없이 Embedding 만 확대한 경우(파란 그래프 0%지점)
- 성능 향상의 차이가 약 3%p
- 즉 Extra vocab 줬지만 Module 추가 안한 경우 → 성능이 기존 BERT와 동등
3. Extension Module only (no vocab)
- Vocab 추가 없이 Module만 확장한 경우 (검정 그래프)
- 약간의 성능 향상은 있음
- Domain 관련 추가 Corpus로 학습 + 더 큰 모델 사이즈 덕분인 듯함.
Result on RE
- NER와 비슷한 비교를 RE Task에 대해서도 비교
- Extension Size 2/3(66%)가 되어도 성능이 더 올라감
Pretrain 시간(=computing power)에 따른 성능 향상 비교(NER)
- 단순히 성능이 높은것 뿐만 아니라 Pretrain 과정에서의 효율 역시 높아짐
- Pretrain에 사용한 시간 대비 성능 비교
- oiBERT = (own-pretrained) BioBERT
- 여기서 시간 ≠ Step
- 모델 사이즈 커짐에 따라서 같은 시간에 오히려 적은 Step = 적은 양의 데이터를 학습함
- 동일 Step대비 약 1.4배의 Computing이 필요함
- 하지만 오히려 더 높은 성능을 보여줌
- Model Size는 커졌지만 오히려 학습 시간 대비 성능은 훨씬 높음
- exBERT에 Explicit하게 등장하는 Domain vocab의 이점을 보여줌
- 24시간 BERT얼린상태로 exBERT Pretrain 진행한 뒤, 이후에는 전체 모델을 Unfreeze하고 Pretrain 진행
- 17GB Corpus는 전체를 학습하기에도 충분한 양이라고 판단함
- 모델 사이즈가 커진건 있지만, 이번 페이퍼의 목적은 "적은 리소스 + 적은 컴퓨팅"으로 고성능 DAPT를 하는 것이고, 작은 모델 사이즈가 타겟이 아니기 때문에 OK
Result on RE
- NER와 비슷하게 성능향상을 보임 (특히 적은 Pretrain time에서 강점이 나옴)