docs: 한국어 감정 분류 모델 ONNX 변환 작업 문서 추가
- nlp04/korean_sentiment_analysis_kcelectra 모델 선정 과정 - 11개 감정 카테고리 ONNX 변환 완료 (488MB) - skill-embedding 서비스 통합 방법 제시 - 11개 → 5개 기본 감정 매핑 규칙 정의
This commit is contained in:
parent
91fe55bd12
commit
00eb6b70ed
142
troubleshooting/250808_claude_감정모델ONNX변환.md
Normal file
142
troubleshooting/250808_claude_감정모델ONNX변환.md
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
# 한국어 감정 분류 모델 ONNX 변환 작업
|
||||||
|
|
||||||
|
작성일: 2025년 8월 8일
|
||||||
|
작성자: Claude (51124 서버)
|
||||||
|
|
||||||
|
## 작업 배경
|
||||||
|
|
||||||
|
rb10508_micro의 감정 시스템이 균등 분포 임시 코드를 사용 중이어서 실제 감정 분류 모델 통합이 필요했음.
|
||||||
|
|
||||||
|
## 작업 과정
|
||||||
|
|
||||||
|
### 오후 12시 10분 - 감정 모델 조사
|
||||||
|
|
||||||
|
한국어 감정 분류 모델 후보군 조사:
|
||||||
|
1. **nlp04/korean_sentiment_analysis_kcelectra** - F1 70.72%, MIT 라이센스
|
||||||
|
2. **monologg/koelectra-base-v3-goemotions** - 28개 감정, 라이센스 불명확
|
||||||
|
3. **hun3359/klue-bert-base-sentiment** - 60개 감정, F1 29.10%
|
||||||
|
4. **tabularisai/multilingual-sentiment-analysis** - 5개 감정, 541MB
|
||||||
|
|
||||||
|
1순위로 nlp04/korean_sentiment_analysis_kcelectra 선정.
|
||||||
|
|
||||||
|
### 오후 12시 16분 - 모델 다운로드 및 ONNX 변환
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/admin/ivada_project/onnx_models
|
||||||
|
mkdir -p korean-sentiment-kcelectra
|
||||||
|
```
|
||||||
|
|
||||||
|
모델 정보:
|
||||||
|
- **레이블 수**: 11개
|
||||||
|
- **감정 카테고리**:
|
||||||
|
- 0: 기쁨(행복한)
|
||||||
|
- 1: 고마운
|
||||||
|
- 2: 설레는(기대하는)
|
||||||
|
- 3: 사랑하는
|
||||||
|
- 4: 즐거운(신나는)
|
||||||
|
- 5: 일상적인
|
||||||
|
- 6: 생각이 많은
|
||||||
|
- 7: 슬픔(우울한)
|
||||||
|
- 8: 힘듦(지침)
|
||||||
|
- 9: 짜증남
|
||||||
|
- 10: 걱정스러운(불안한)
|
||||||
|
|
||||||
|
ONNX 변환 완료:
|
||||||
|
- **모델 크기**: 488MB
|
||||||
|
- **토크나이저**: 저장 완료
|
||||||
|
- **최대 시퀀스 길이**: 512
|
||||||
|
|
||||||
|
### 오후 12시 20분 - skill-embedding 구조 확인
|
||||||
|
|
||||||
|
skill-embedding 서비스 분석 결과:
|
||||||
|
- `/app/embedder.py`: ONNXEmbedder 클래스 이미 구현됨
|
||||||
|
- `/app/http_embedding_function.py`: HTTPEmbeddingFunction 클래스 구현됨
|
||||||
|
- 포트 8015에서 실행 중
|
||||||
|
|
||||||
|
별도 유틸리티 파일 생성 불필요함을 확인.
|
||||||
|
|
||||||
|
### 오후 12시 30분 - 트러블슈팅 문서 수정
|
||||||
|
|
||||||
|
`250804_claude_ONNX임베딩경량화.md` 문서에서 잘못된 참조 수정:
|
||||||
|
- `onnx_embedder.py`, `chroma_onnx_function.py`는 별도 파일로 생성되지 않음
|
||||||
|
- 실제로는 skill-embedding 서비스에 직접 구현됨
|
||||||
|
|
||||||
|
## 준비된 모델 구조
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/admin/ivada_project/onnx_models/
|
||||||
|
├── multilingual-MiniLM-L12-v2/ # 임베딩 모델 (기존)
|
||||||
|
│ ├── model.onnx (449MB)
|
||||||
|
│ └── tokenizer 파일들
|
||||||
|
└── korean-sentiment-kcelectra/ # 감정 모델 (신규)
|
||||||
|
├── model.onnx (488MB)
|
||||||
|
├── model_info.json
|
||||||
|
└── tokenizer 파일들
|
||||||
|
```
|
||||||
|
|
||||||
|
## 다음 단계 (로컬 개발자 작업)
|
||||||
|
|
||||||
|
### 1. skill-embedding 서비스 수정
|
||||||
|
|
||||||
|
새 엔드포인트 추가 예시:
|
||||||
|
```python
|
||||||
|
# /app/emotion.py (신규)
|
||||||
|
class ONNXEmotionClassifier:
|
||||||
|
def __init__(self, model_dir="/models/onnx/korean-sentiment-kcelectra"):
|
||||||
|
# ONNX 세션 초기화
|
||||||
|
# 토크나이저 로드
|
||||||
|
pass
|
||||||
|
|
||||||
|
def predict(self, text):
|
||||||
|
# 11개 감정 분류
|
||||||
|
pass
|
||||||
|
|
||||||
|
def map_to_basic_emotions(self, text):
|
||||||
|
# 11개 → 5개 기본 감정 매핑
|
||||||
|
pass
|
||||||
|
|
||||||
|
# /app/main.py에 추가
|
||||||
|
@app.post("/emotion")
|
||||||
|
async def analyze_emotion(request: TextRequest):
|
||||||
|
emotions = classifier.predict(request.text)
|
||||||
|
return {"emotions": emotions}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. rb10508_micro 수정
|
||||||
|
|
||||||
|
```python
|
||||||
|
# app/core/emotion/base.py
|
||||||
|
async def analyze_basic_emotions(text: str) -> List[float]:
|
||||||
|
"""skill-embedding 서비스 호출"""
|
||||||
|
response = await http_client.post(
|
||||||
|
"http://skill-embedding:8015/emotion",
|
||||||
|
json={"text": text}
|
||||||
|
)
|
||||||
|
return response.json()["emotions"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 11개 → 5개 감정 매핑 규칙
|
||||||
|
|
||||||
|
```python
|
||||||
|
mapping = {
|
||||||
|
'joy': ['기쁨(행복한)', '고마운', '설레는(기대하는)', '사랑하는', '즐거운(신나는)'],
|
||||||
|
'sadness': ['슬픔(우울한)', '힘듦(지침)'],
|
||||||
|
'anger': ['짜증남'],
|
||||||
|
'fear': ['걱정스러운(불안한)'],
|
||||||
|
'neutral': ['일상적인', '생각이 많은']
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 교훈
|
||||||
|
|
||||||
|
1. **문서의 정확성**: 트러블슈팅 문서는 실제 구현과 일치해야 함
|
||||||
|
2. **기존 서비스 활용**: skill-embedding 서비스가 이미 ONNX 처리 기능을 갖추고 있어 재사용 가능
|
||||||
|
3. **모델 선정 기준**: 라이센스, 성능, 검증도, 크기를 종합적으로 고려
|
||||||
|
4. **ONNX 변환 이점**: PyTorch 의존성 제거로 경량화 달성
|
||||||
|
|
||||||
|
## 성과
|
||||||
|
|
||||||
|
- 한국어 감정 분류 모델 ONNX 변환 완료
|
||||||
|
- 11개 세밀한 감정 분류 가능
|
||||||
|
- skill-embedding 서비스와 통합 준비 완료
|
||||||
|
- rb10508_micro의 임시 균등 분포 코드 대체 가능
|
||||||
Loading…
x
Reference in New Issue
Block a user