본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장
② 오늘자 날짜, 공부 종료 시각 포함 사진 1장
③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장
④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)
2. 학습 후기 700자 이상 (공백 제외)
파인튜닝과 평가에는 다음과 같은 과정을 거침
- 각 문서에 대해서 질문 2개씩 생성
- 센텐스 트랜스포머 학습 형식으로 변환
- 유사 문장 쌍
- (질의어, 응답) 쌍
- (번역하고자 하는 언어, 번역된 언어) 쌍
- 학습시킬 때 losses.MultipleNegativesRankingLoss(model) 로 학습
- 작동원리
- 입력데이터 : 검색어 (질문) + Positive 문서 (응답) + 배치 내 다른 문서 (네거티브)
- 각 입력데이터별 코사인 유사도를 구해서 손실함수를 자동으로 구함
- 예시
# 6. 모델 및 손실 함수 설정
model_id = "BAAI/bge-m3"
model = SentenceTransformer(model_id)
# 손실 함수 정의: 모델이 검색어와 포지티브 문서는 가깝게, 네거티브 문서는 멀게 학습하도록 유도
loss = losses.MultipleNegativesRankingLoss(model)
평가를 위해서 테스트 데이터를 특정 형식으로 변환
from sentence_transformers.evaluation import InformationRetrievalEvaluator
# 7. 검증 데이터 평가기 설정
# 검증 데이터셋 구성
val_dataset = {
'queries': {},
'corpus': {},
'relevant_docs': {}
}
# 문서 ID를 먼저 생성
doc_ids = {}
for i, doc in enumerate(val_corpus):
doc_id = f"d{i}"
val_dataset['corpus'][doc_id] = doc
doc_ids[doc] = doc_id
# 질문에 ID 부여하고 관련 문서 설정
for i, (query, doc) in enumerate(zip(val_queries, val_positive_docs)):
query_id = f"q{i}"
val_dataset['queries'][query_id] = query
# 이 질문이 어떤 문서에서 왔는지 찾기
doc_id = doc_ids[doc]
# 관련 문서 설정
if query_id not in val_dataset['relevant_docs']:
val_dataset['relevant_docs'][query_id] = set()
val_dataset['relevant_docs'][query_id].add(doc_id)
# 검증 데이터셋 설정: 평가를 위한 쿼리, 문서, 정답 문서 목록
dataset = val_dataset
# 검증 데이터셋에서 코퍼스(전체 문서), 쿼리, 그리고 각 쿼리와 관련된 문서 가져오기
corpus = dataset['corpus'] # 검색 대상 문서
queries = dataset['queries'] # 검색어(쿼리)
relevant_docs = dataset['relevant_docs'] # 각 쿼리와 관련된 문서 (포지티브)
# Information Retrieval 평가 도구 설정: 쿼리-문서 검색 성능 평가
evaluator = InformationRetrievalEvaluator(queries, corpus, relevant_docs)
실제 학습
# 7. 모델 학습
EPOCHS = 2
# W&B(WandB, Weights and Biases) 로깅 비활성화
# W&B는 학습 과정을 실시간으로 추적하고 시각화할 수 있는 도구입니다.
# 하지만 이 코드는 W&B 기능을 사용하지 않으므로, 이를 비활성화하여 로깅을 중단합니다.
os.environ["WANDB_DISABLED"] = "true"
# 학습 초기에 학습률을 점진적으로 증가시키는 단계 수 설정
# 전체 학습 단계의 10%를 워밍업으로 사용
warmup_steps = int(len(loader) * EPOCHS * 0.1)
# 모델 학습
model.fit(
train_objectives=[(loader, loss)], # 학습 데이터 로더와 손실 함수 설정
epochs=EPOCHS, # 총 에포크 수
warmup_steps=warmup_steps, # 워밍업 단계
output_path='exp_finetune', # 학습된 모델 저장 경로
show_progress_bar=True, # 학습 진행률 표시 여부
evaluator=evaluator, # 학습 중간에 평가를 수행할 도구
evaluation_steps=50, # 50단계마다 평가 수행
)
url : https://abit.ly/lisbva
'스타트업 투자 > 데이터 + 테크' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 24일차 : 네거티브 샘플 구하기 강의 후기 (0) | 2025.04.24 |
---|---|
패스트캠퍼스 환급챌린지 23일차 : RAG특화모델 사례 강의 후기 (0) | 2025.04.23 |
패스트캠퍼스 환급챌린지 21일차 : 데이터셋 준비, 파인튜닝 강의 후기 (0) | 2025.04.21 |
패스트캠퍼스 환급챌린지 20일차 : 임베딩 모델 파인튜닝 학습이해 강의 후기 (0) | 2025.04.20 |
패스트캠퍼스 환급챌린지 19일차 : 모델 문제 실습 강의 후기 (0) | 2025.04.19 |
댓글