전체코드

nlp/multi_task_model.py at main · mirageoasis/nlp

1. 초기화

모델을 초기화 하는 과정이다.

def __init__(self, **kwargs):
        super().__init__()
        self.save_hyperparameters() # 이 부분에서 self.hparams에 위 kwargs가 저장된다.
        
        self.model = AutoModel.from_pretrained(self.hparams.pretrained_model)
        self.dropout = torch.nn.Dropout(self.model.config.hidden_dropout_prob)
        self.main_classification = torch.nn.Linear(self.model.config.hidden_size, 11) # classification label
        self.sub_classification = torch.nn.Linear(self.model.config.hidden_size, 1)
        self.tokenizer = AutoTokenizer.from_pretrained(
            self.hparams.pretrained_tokenizer
            if self.hparams.pretrained_tokenizer
            else self.hparams.pretrained_model
        )

처음 모델을 train 시킬 때 모델, 토크나이저 그리고 hyper parameter를 초기화를 해주는 구간이다. 이전 모델의 구조는 single-task 모델로써 class를 나누게 되면서 일어나는 불균형이 존재한다. 하지만 이번 모델은 이전의 악플이다. 아니다의 이진 분류를 수행하는 모델과 함깨 학습시키면서 민감도가 낮은 문제를 해결해보려는 모델이다.

그런 과정을 위해서 필요한 것이 bert모델이 결과를 내보내면 마지막으로 layer 를 추가해서 분석을 한다.

각각 main_classification과 sub_classification이다.

super().__init__()
self.save_hyperparameters() # 이 부분에서 self.hparams에 위 kwargs가 저장된다.

super class의 초기화 함수를 실행하고, kwargs를 통해 받아온 parameters를 초기화 시켜준다.

self.model = AutoModel.from_pretrained(self.hparams.pretrained_model)

현재 모델의 특성상 마지막에 분류를 수행해야 하므로 num_labels는 main_classification 과 sub_classification layer가 각각 수행할 수 있도록 해준다.