1. 대회 설명
- 목표: LLM 품질 평가를 자동화하기 위해 LLM이 생성한 두 응답 중, 사용자가 더 선호할 가능성이 높은 쪽을 예측하는 모델을 구축
- 문제 유형: 다중 분류 (Multi-class Classification)
- 데이터 배경
-> LMSYS에서 수집한 사람 기반의 챗봇 응답 평가 데이터
2. 성능 평가 방식 이해
- Log Loss (Cross Entropy Loss): 확률 분포의 신뢰도를 기반으로 예측 성능을 측정
3. 데이터 전처리
3-1) EDA
- 텍스트 데이터로 구성되어 있어 prompt, response_a, response_b의 분포, 길이 등을 확인
- 대부분의 데이터는 단일턴(single-turn)이며, 일부는 multi-turn
3-2) Data Cleansing
- null 또는 None 응답을 문자열로 대체
- \ud... 형태의 Unicode 이모지를 <[SPECIALCHAR]>로 치환
3-3) Feature Engineering
Instruction: <prompt>
Model A: <response_a>
Model B: <response_b> Style: SINGLETURN
- 실제 필사를 진행한 구글 코랩 환경에선느 Gemma 원본 모델과 다르게 Falcon 기반의 단일턴 입력 구조 사용
4. 모델링
4-1) 모델
- tiiuae/falcon-rw-1b 공개 모델을 사용
- AutoModelForSequenceClassification으로 3-way 분류 모델 구성
- torch_dtype=torch.float16 설정하여 Colab T4 환경에 맞게 최적화
4-2) 데이터 분할
4-3) 하이퍼파라미터 튜닝
- tuning 없이 사전학습된 모델을 그대로 사용
4-4) 최종 성능
5. 정리(Lesson & Learned)
-
Kaggle 노트북은 Kaggle 전용 환경에 최적화되어 있기 때문에 Google Colab에서 실행 시 여러 문제가 발생함
-> bitsandbytes 양자화 > Colab T4 GPU에서는 충돌
-> 멀티 GPU 추론 구조 > Colab에서는 단일 GPU만 사용 가능
-> 해당 문제들을 해결하기 위해 모델을 Gemma에서 Falcon으로 변경하고 inference 구조를 단일 모델 기반으로 재구성
-
Kaggle 필사를 통해 환경 차이에 따른 실행 오류의 본질을 이해하고, 이를 리팩토링하는 실전 능력을 기를 수 있었음
-
입력 간 상호작용을 고려한 구조가 필요한 두 응답을 비교해 사람이 선호할 만한 쪽을 예측해야 하는 것에 대한 어려움 체감
-
입력 구성 (prompt + response 조합)의 디자인적 영향 실감
-> 입력 문자열 길이, 구조, 순서 등이 추론 결과에 직접적인 영향을 줌
-> 향후 LLM 활용 프로젝트 진행시 프롬프트 구조 설계의 중요성을 재확인
-
데이터 구조의 일관성 필요 인식
-> 실습 과정에서 ast.literal_eval() 실패 → "ERROR IN DATA" 문제 발생 → 입력 데이터 전처리에서 포맷 일치가 얼마나 중요한지 실감함
LMSYS - Chatbot Arena Human Preference Predictions