--- library_name: transformers base_model: - monologg/kobert --- # KoBERT 기반 한국어 감정 분류 모델 이 프로젝트는 **한국어 텍스트의 감정을 분류**하는 KoBERT 기반의 감정 분류 모델을 학습하고 활용하는 코드를 포함합니다. 이 모델은 입력된 텍스트가 **분노(Anger), 두려움(Fear), 기쁨(Happy), 평온(Tender), 슬픔(Sad)** 중 어떤 감정에 해당하는지를 예측합니다. ## 1. 모델 학습 과정 ### Colab 환경 설정 및 데이터 준비 1. **필요 라이브러리 설치**: `transformers`, `datasets`, `torch`, `pandas`, `scikit-learn` 라이브러리를 설치합니다. 2. **데이터 불러오기**: ai hub 에 등록된 한국어 감성 대화 데이터로부터 감정 분류용 CSV 파일을 불러옵니다. 3. **데이터셋 준비**: - **학습/검증 데이터 분할**: 80%는 학습 데이터로, 20%는 검증 데이터로 사용. - **HuggingFace Dataset 형식 변환**: Pandas DataFrame을 HuggingFace `Dataset`으로 변환. - **레이블 컬럼명 변경**: 감정 레이블을 나타내는 `label_int` 컬럼을 `labels`로 변경. - **데이터 토큰화**: `monologg/kobert` 토크나이저를 이용해 입력 텍스트를 토큰화. - **형식 변환**: `input_ids`, `attention_mask`, `labels`만 남겨 학습 준비 완료. 4. **모델 및 학습 설정**: - **모델**: `monologg/kobert` 모델을 불러와 5개의 감정 레이블을 분류하도록 설정. - **학습 하이퍼파라미터**: - `learning_rate=2e-5`, `num_train_epochs=10`, `batch_size=16`. - F1 스코어를 기반으로 베스트 모델 저장. - Early stopping 적용. 5. **학습 진행 및 모델 저장**: - 학습 완료 후 모델을 Google Drive에 저장. ### 성능 평가 및 테스트 - **평가 지표**: Accuracy, F1 score (macro, weighted) 계산. - **테스트 데이터 평가**: 학습된 모델을 이용해 테스트 데이터셋 평가. ## 2. 모델 사용 방법 ### 사전 준비 - HuggingFace Hub에서 학습된 모델을 불러와 사용할 수 있습니다. - 모델 및 토크나이저는 `monologg/kobert` 기반이며, 분류 레이블은 다음과 같습니다: - **Anger**: 😡 - **Fear**: 😨 - **Happy**: 😊 - **Tender**: 🥰 - **Sad**: 😢 ### 사용 예시 1. **단순 문장 입력 감정 분석**: - 사용자가 입력한 텍스트에 대해 모델이 감정을 예측하고, 각 감정의 확률을 함께 출력합니다. 2. **엑셀 파일에서 감정 분석**: - 엑셀 파일에서 지정한 텍스트 열과 행 범위를 읽어와, 해당 텍스트들에 대해 감정을 분류하고 결과를 출력합니다. ### 코드 사용 예시 ```python # 토크나이저 및 모델 로드 from transformers import AutoTokenizer, AutoModelForSequenceClassification # KoBERT 토크나이저와 모델 로드 tokenizer = AutoTokenizer.from_pretrained("monologg/kobert", trust_remote_code=True) model = AutoModelForSequenceClassification.from_pretrained("rkdaldus/ko-sent5-classification") # 사용자 입력 텍스트 감정 분석 text = "오늘 정말 행복해!" inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) with torch.no_grad(): outputs = model(**inputs) predicted_label = torch.argmax(outputs.logits, dim=1).item() # 감정 레이블 정의 emotion_labels = { 0: ("Angry", "😡"), 1: ("Fear", "😨"), 2: ("Happy", "😊"), 3: ("Tender", "🥰"), 4: ("Sad", "😢") } # 예측된 감정 출력 print(f"예측된 감정: {emotion_labels[predicted_label][0]} {emotion_labels[predicted_label][1]}")