exBERT: Extending Pre-trained Models with Domain-specific Vocabulary Under Constrained Training Resources
🔎

exBERT: Extending Pre-trained Models with Domain-specific Vocabulary Under Constrained Training Resources

Tags
NLP
논문리뷰
Published
Published March 19, 2021
notion image

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 있음
      1. Large Training Resources
          • 학습에 필요한 데이터양이 너무 많다.
          • BERT, RoBERTa 페이퍼를 봐라.
      1. 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
notion image

Extension Module (=BERT Layer)

  • 이때의 Extension Module의 크기는 기존 것보다 조금 작게 (intermid 크기를 줄인다는 등) 만들어줘도 괜찮음.
  • 크기를 키워도 효과가 그만큼 나지 않음
  • 추가 Vocab의 경우 기존 vocab보다 많이 작아도 괜찮음.
    • 실험시 2만-3만개까지 올려도 의미있는 성능향상은 보이지 않음
notion image
  • 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만 학습
  • Performance 비교 대조군
    • Original BERT(Google BERT)
    • (own-trained) BioBERT
    • (own-trained) reduced-resource BioBERT

Result (Downstream task Finetune, NER)

macro F1-score on the NER task
macro F1-score on the NER task
notion image
  • 위 그림에서 볼 수 있는 것처럼 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

notion image
  • NER와 비슷한 비교를 RE Task에 대해서도 비교
  • Extension Size 2/3(66%)가 되어도 성능이 더 올라감

Pretrain 시간(=computing power)에 따른 성능 향상 비교(NER)

  • 단순히 성능이 높은것 뿐만 아니라 Pretrain 과정에서의 효율 역시 높아짐
  • Pretrain에 사용한 시간 대비 성능 비교
    • oiBERT = (own-pretrained) BioBERT
notion image
notion image
  • 여기서 시간 ≠ 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에서 강점이 나옴)
notion image

실제 코드 동작하나?

Copy of exBERT - Code ver.