Kobert 모델 사용(2)

신준호·2023년 9월 22일
0
post-thumbnail

Kobert 모델 수정

Kobert 모델을 수정하기로 했다.
무엇을 수정하냐고???
kobert 모델 사용(1)에서는 텍스트를 요청하면 해당 감정이 나왔다.
이 부분을 해당 감정들의 가중치로 뽑을 예정이다..

new_softmax (추가 부분)

def new_softmax(a) : 
    c = np.max(a) # 최댓값
    exp_a = np.exp(a-c) # 각각의 원소에 최댓값을 뺀 값에 exp를 취한다. (이를 통해 overflow 방지)
    sum_exp_a = np.sum(exp_a)
    y = (exp_a / sum_exp_a) * 100
    return np.round(y, 3)

실수를 치역으로 한 가중치 값을 softmax함수를 사용하여 텍스트를 확률값으로 변환헀다.

predict (수정 부분)

def predict(predict_sentence):

    data = [predict_sentence, '0']
    dataset_another = [data]

    another_test = BERTDataset(dataset_another, 0, 1, tok, vocab, max_len, True, False) # 토큰화한 문장
    test_dataloader = torch.utils.data.DataLoader(another_test, batch_size=batch_size, num_workers=5)
    
    model.eval()

    for batch_id, (token_ids, valid_length, segment_ids, label) in enumerate(test_dataloader):
        token_ids = token_ids.long().to(device)
        segment_ids = segment_ids.long().to(device)

        valid_length= valid_length
        label = label.long().to(device)

        out = model(token_ids, valid_length, segment_ids)

        test_eval=[]
        for i in out:
            logits=i
            logits = logits.detach().cpu().numpy()
            min_v = min(logits)
            total = 0
            probability = []
            logits = np.round(new_softmax(logits), 3).tolist()
            for logit in logits:
                # print(logit)
                probability.append(np.round(logit, 3))

            if np.argmax(logits) == 0:  emotion = "공포"
            elif np.argmax(logits) == 1: emotion = "놀람"
            elif np.argmax(logits) == 2: emotion = '분노'
            elif np.argmax(logits) == 3: emotion = '슬픔'
            elif np.argmax(logits) == 4: emotion = '행복'
            elif np.argmax(logits) == 5: emotion = '혐오'

            probability.append(emotion)
            # print(probability)
    return probability

해당 감정들을 확률로 뽑았다..

Kobert 모델 저장

학습된 Kobert 모델을 저장할거다 기대!!
colab에서 google drive로 저장했다.

#구글드라이브 연동
from google.colab import drive
drive.mount('/content/drive')

import os
os.chdir('/content/drive/MyDrive/models/')
os.getcwd()

path = '/content/drive/MyDrive/models/'
torch.save(model, path + 'bookwave_model.pt')  # 전체 모델 저장

torch.save(model.state_dict(), 'bookwave_model_state_dict.pt')  # 모델 객체의 state_dict 저장

torch.save({
    'model': model.state_dict(),
    'optimizer': optimizer.state_dict()
}, 'bookwave_all.tar')  # 여러 가지 값 저장, 학습 중 진행 상황 저장을 위해 epoch, loss 값 등 일반 scalar값 저장 가능

다음은(Next Level)

다음은 Kobert 학습된 모델을 Fast Api에서 적용해보겠다!!

profile
개발 공부 일지

2개의 댓글

comment-user-thumbnail
2023년 9월 22일

3탄도 기대할게요~!

1개의 답글