일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- seaborn
- ai 캠프
- ML
- finpilot
- chromeextention
- djangorestframework
- ai캠프
- 로컬 런타임
- Python
- mysql
- streamlit
- conda
- ollama
- 티스토리챌린지
- lightsail
- django
- 오블완
- 정치기 필기
- Github
- EC2
- mifare
- pytorch
- sLLM
- aws
- Jupyterlab
- 머신러닝
- team_project
- pandas
- 파이썬
- ai_캠프
- Today
- Total
greatsangho의 이야기
캠프57일차 - 특정 LLM 모델 (BERT)을 Foundation 모델로 선택하여 도메인 특화 데이터로 파인튜닝 본문
캠프57일차 - 특정 LLM 모델 (BERT)을 Foundation 모델로 선택하여 도메인 특화 데이터로 파인튜닝
greatsangho 2024. 11. 15. 19:53LLM
- Bert fineTune
!pip install transformers
!pip install datasets
import os
import re
import numpy as np
from tqdm import tqdm
import tensorflow as tf
from transformers import *
import pandas as pd
# 토크나이져
tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
# 모델 로드
model = AutoModelForSequenceClassification.from_pretrained("bert-base-multilingual-cased", num_labels = 2)
이제 저번과 같이 데이터를 불러온 뒤 전처리를 진행하고 데이터셋으로 저장한다.
모델은 bert-base-multilingal-cased를 불러온다.
training_args, compute_metrics, Trainer를 세팅한 뒤 trainer.train()을 진행한다.
trainer.evaluate()로 이진 분류가 잘 이루어졌는지 확인할 수 있다.
# 추론
text = '교도소 이야기구먼 솔직히 재미는 없다 평점 조정'
import torch
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model.to(device)
model.eval() # 필수는 아님
inputs = tokenizer(text, max_length=MAX_LENGTH,padding='max_length',truncation=True,return_tensors='pt')
inputs = inputs.to(device)
predictions = model(**inputs)
print(predictions)
print(predictions.logits.shape)
predictions = torch.argmax(predictions.logits, dim=-1)
print(predictions, predictions.item())
'긍정' if predictions.item() == 1 else '부정'
학습한 데이터를 집어 넣어 긍정/부정을 평가한다. 평가할 때에는 처음 토크나이저에 넣어 학습시킨 모습 그대로 넣어준다.
파인튜닝을 진행하지 않은 상황에서는 긍정이라고 판단하지만, 파인튜닝을 진행한 뒤에는 부정으로 판단하는 것을 확인할 수 있다.
Bert를 이용한 감정 다중분류 finetune
AI허브의 데이터셋인 감성 대화 말뭉치를 활용하여 다양한 감정을 평가 및 분류해보았다.
감정이 다양한 코드로 나타내어지기 때문에 라벨 인코딩을 진행하였다.
마찬가지로 지금까지 진행한 한글 전처리 및 데이터셋으로 변환, TrainingArguments 설정, 평가를 위한 compute_metrics 정의, 그리고 Trainer 설정을 한 뒤 trainer.train()을 진행한다.
감정은 따로 리스트로 만들어준다.
emotion_txt = []
emotion_label = []
for idx,txt in enumerate(data.split()):
if idx % 2 == 0:
emotion_txt.append(txt)
else:
emotion_label.append(txt)
위와 마찬가지로 추론을 진행하여 가장 큰 값에 대해 반환하면 원하는
다른 Llama 2,Alpaca 모델들은 무거운 관계로 A100 GPU를 사용해도 부족하여 BERT로 진행하였다.
GPT 모델 중 기존 skt의 kogpt2보다 발달한 skt/ko-gpt-trinity-1.2B-v0.5 를 찾았는데 파인튜닝을 시도해볼 예정이다.
점점 컴퓨터 자원과 훈련 시간이 길어지는 것을 보며 앞으로 가볍고 정확한 모델이 왜 중요한지 그 이유를 알 것 같다.
'프로그래밍 > SK AI 캠프' 카테고리의 다른 글
캠프58일차 - 합성공(CNN) 신경망 개요(CNN 개요, 합성곱 계층, 풀링 계층) (0) | 2024.11.18 |
---|---|
SK AI 캠프 13주차 후기 (4) | 2024.11.16 |
캠프56일차 - 파인튜닝된 LLM 모델의 성능 평가 방법 (1) | 2024.11.14 |
캠프55일차 - PEFT, LoRA 등 다양한 파인튜닝 기법에 대한 심화 학습 (0) | 2024.11.13 |
캠프54일차 - LLM 파인튜닝 개념과 기본 준비 (2) | 2024.11.12 |