치즈의 AI 녹이기

Huggingface Bert 모델 커스터마이징 하기 본문

인공지능 대학원생의 생활/동료 코드 따라잡기

Huggingface Bert 모델 커스터마이징 하기

개발자 치즈 2021. 7. 16. 16:02

오늘은 Transformers 라이브러리에서 제공하는 pre-trained model들을 가져와 

내맘대로 커스터마이징하는 방법을 소개합니다. 

 

HuggingFace란, 자연어처리(NLP) 분야에서 유명한 오픈소스 커뮤니티입니다. 

특히 이곳에서 구축한 Transformers 라이브러리는 BERT, RoBERTa, GPT-2 or DistilBERT 등의 여러 NLP 모델들을 단순한 코드로도 실행할 수 있도록 만들었습니다. 

 

아래 링크에서 Transformers 라이브러리에 구현된 모델들 코드를 확인할 수 있습니다.

https://github.com/huggingface/transformers/tree/master/src/transformers/models

 

huggingface/transformers

🤗 Transformers: State-of-the-art Natural Language Processing for Pytorch, TensorFlow, and JAX. - huggingface/transformers

github.com

 

저는 Roberta 모델 코드를 가져와 커스터마이징하는 코드를 가져왔습니다. 

from modeling_roberta.py __init__()

 

아래는 동료가 위 코드를 그대로 복사한 후 그 위에서 수정한 코드입니다. 

동료 코드

 

차이점이라고 볼 수 있는 부분은 

  1. __init__함수에서 config 인자 말고도 freeze_encoder라는 인자를 추가하여 원할 때마다 모델 파라미터를 freeze할 수 있도록 만들었습니다. 
  2. nn.BatchNorm1d라는 클래스를 하나 추가하였습니다. 기존 forward 함수에서 define된 내용과 달리, 도출된 sequence_output값에 다시 nn.BatchNorm1d(self.batch_m)를 통과하여 self.classifier의 인풋으로 넣어주었습니다. 

 

from modeling_roberta.py forward()
동료 코드

 

코드 출처는 앞선 글에서 언급하였습니다.