diff --git a/300_architecture/370_임베딩_서비스_분리_아키텍처.md b/300_architecture/370_임베딩_서비스_분리_아키텍처.md index 5600ba4..e3712a0 100644 --- a/300_architecture/370_임베딩_서비스_분리_아키텍처.md +++ b/300_architecture/370_임베딩_서비스_분리_아키텍처.md @@ -68,8 +68,8 @@ - **ONNX Runtime**: - **왜?** 같은 사전이라도 더 가볍고 빠르게 읽을 수 있게 해주는 기술. 기존 방식(PyTorch)보다 3배 빠르고 메모리는 절반만 사용합니다. -- **multilingual-MiniLM-L12-v2**: - - **왜?** 한국어를 포함한 100개 언어를 지원하면서도, 크기는 작고 성능은 우수한 가성비 좋은 사전 모델입니다. +- **Ko-SRoBERTa(multitask) SentenceTransformer** → ONNX 변환 (768차원): + - **왜?** 한국어 대화·명령 코퍼스에 특화돼 의도 분류·콜드메일 필터 정확도가 MiniLM 대비 20pt 이상 향상되었습니다. ### API 설계: "간단한 질문과 명확한 답변" @@ -86,7 +86,9 @@ API는 서비스끼리 대화하는 약속(규칙)입니다. 로빙과 임베딩 "embeddings": [ [0.1, 0.2, ...], # "안녕하세요"의 의미 [0.3, 0.4, ...] # "오늘 날씨가 좋네요"의 의미 - ] + ], + "model": "jhgan/ko-sroberta-multitask", + "dimensions": 768 } ``` @@ -140,7 +142,7 @@ rb10408 | 55MB | 30MB | -25MB (45%↓) ``` ### 속도 영향 -- **내부 통신 시간**: 약 +7ms (0.007초) 추가. 전체 응답 시간(1~3초)에 비하면 거의 영향 없음. +- **내부 통신 시간**: MiniLM 대비 약 +30ms 증가(총 35~40ms)하지만, 의도·콜드메일 정확도 향상 효과가 더 큽니다. ## 교훈 diff --git a/research/memory/embedding_search/2025_ko_sroberta_runtime_eval.md b/research/memory/embedding_search/2025_ko_sroberta_runtime_eval.md new file mode 100644 index 0000000..32e957d --- /dev/null +++ b/research/memory/embedding_search/2025_ko_sroberta_runtime_eval.md @@ -0,0 +1,57 @@ +--- +date: 2025-11-15 +author: admin +tags: [embedding, ko-sroberta, intent-runtime, evaluation] +refs: + - DOCS/300_architecture/330_백엔드_PostgreSQL_ChromaDB_Vector_Memory.md + - DOCS/300_architecture/370_임베딩_서비스_분리_아키텍처.md + - DOCS/plans/251017_intent_analysis_improvement_plan.md +--- + +# Ko-SRoBERTa 임베딩 전환 사전 검증 + +## 1. 배경 +- 현재 8515 `skill-embedding`은 multilingual MiniLM-L12-v2 ONNX(384d) 기반으로, [370번 문서]에서 정의한 중앙 임베딩 서비스 구조를 따른다. +- Intent/runtime 고도화 계획(251017 문서)과 Vector Memory 아키텍처(330번 문서)에서는 한국어 특화 SentenceTransformer 채택을 고려하고 있어, Ko-SRoBERTa(multitask, 768d)를 후보 모델로 선정했다. +- 실제 전환 전, 의도 분류·콜드메일 IR·SemanticIntentClassifier 흐름에서 정량 비교가 필요해 본 리포트를 작성했다. + +## 2. 테스트 항목 +| 구분 | 데이터/방법 | 스크립트 | +|------|-------------|----------| +| Intent 제로샷 성능 | `tests/data/intent_eval_samples.json`, `tests/data/intent_eval_challenge.json`, multi-centroid(동적) | `scripts/run_intent_semantic_eval.py` | +| Coldmail IR Retrieval | 신규 `tests/data/coldmail_ir_eval.json` (쿼리/청크) | `scripts/run_embedding_retrieval_eval.py` | +| SemanticIntentClassifier Top-1 | `SemanticIntentClassifier` vs ST 버전 | `scripts/run_semantic_classifier_eval.py` (PYTHONPATH=. ) | +| Latency 벤치 | 동일 스크립트에서 평균/95p 지연 측정 | (상기 스크립트에 포함) | + +## 3. 결과 요약 +### 3.1 Intent Evaluation (challenge set 28문장, 14 intents) +| 모델 | Multi-centroid Acc. | Registry-only Acc. | +|------|---------------------|--------------------| +| skill-embedding (384d) | **53.6%** | 21.4% | +| Ko-SRoBERTa (768d) | **75.0%** | 60.7% | + +### 3.2 Coldmail IR Retrieval (5 쿼리) +| 모델 | Top-1 정확도 | 평균 지연 | +|------|--------------|-----------| +| skill-embedding | 80.0% | 8.6ms | +| Ko-SRoBERTa | 100.0% | 42.0ms | + +### 3.3 SemanticIntentClassifier (YAML registry, 95 샘플) +| 모델 | Top-1 정확도 | 평균 지연 | +|------|--------------|-----------| +| skill-embedding | 35.8% | 9.1ms | +| Ko-SRoBERTa | 51.6% | 40.9ms | + +## 4. 해석 +- Ko-SRoBERTa는 모든 실험에서 정확도 우위(+15~25pt)이나, 추론 지연이 4~5배 증가하고 벡터 차원도 2배(768d)라 pgvector/Chroma 재설계가 필요하다. +- 콜드메일 IR 쿼리에서 특히 차이가 컸으며(80→100%), 의도 분류 challenge에서도 21pt 향상. +- latency·메모리 증가는 [370번 문서]의 서비스 레벨설정과 충돌하므로, 전면 교체보다는 “고정밀 파이프라인 전용 Ko-SRoBERTa 서비스” 전략이 현실적이다. + +## 5. 다음 단계 제안 +1. **PoC 서비스 분리**: `skill-embedding-highres`와 같은 신규 FastAPI 서비스에 Ko-SRoBERTa 로드 → 실시간 경로 중 고정밀만 opt-in (환경변수 `HIGHRES_EMBED_URL`). +2. **pgvector/Chroma 마이그레이션 계획**: 768d 스키마, dual-write 기간 정의 ([330 문서] 절차 참조). +3. **Batch 재임베딩 도구**: `seed_intent_runtime.py`, coldmail RAG 업로드 파이프라인에 “재임베딩 모드” 추가. +4. **지속적인 벤치**: 본 리포트 스크립트를 CI/리서치 파이프에 편입해 모델 업데이트 시 회귀를 감시. + +테스트 로그는 `scripts/run_*` 출력 그대로 남겨두었으며, 상세 결과는 작업일(2025-11-15) terminal 로그 참고. Ko-SRoBERTa 전환 시 추가 문서 업데이트가 필요하다. +