Downloads · 30 days
10
20% of all-time downloads
MelissaJ/koelectra-search-7-base
koelectra-search-7-base is a text classification model from MelissaJ. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as apache-2.0.
한국어 사용자 발화를 7가지 검색 기능 중 하나로 라우팅하는 의도 분류기입니다. monologg/koelectra-base-v3-discriminator를 파인튜닝했으며, LLM 챗봇 앞단에서 매 사용자 턴마다 호출되는 용도로 설계됐습니다.
Downloads · 30 days
10
20% of all-time downloads
All-time downloads
49
Public
Parameters
113M
452 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors452 MB · 100%
From the Hugging Face model README
한국어 사용자 발화를 7가지 검색 기능 중 하나로 라우팅하는 의도 분류기입니다. monologg/koelectra-base-v3-discriminator를 파인튜닝했으며, LLM 챗봇 앞단에서 매 사용자 턴마다 호출되는 용도로 설계됐습니다.
| 라벨 | 의미 | 예시 발화 |
|---|---|---|
images | 사진·움짤·일러스트 등 시각자료 요구 | 고화질 사진 좀 찾아줘 |
videos | 유튜브·예고편·하이라이트 등 영상 요구 | 하이라이트 영상 틀어줘 |
news | 최신 기사·속보 요구 | 오늘 뉴스 헤드라인 알려줘 |
books | 도서 정보 요구 | 하루키 소설 추천해줘 |
extract | URL/링크의 본문 텍스트 추출 요구 | 이 링크 본문 긁어와 |
text | 실시간 정보 또는 명시적 웹검색 요구 | 지금 환율 얼마인지 검색해줘 |
chat | 일상대화 + LLM 지식으로 답 가능한 질문 | 파이썬 리스트 정렬법 알려줘 |
경계 규칙: 주제가 아니라 행위로 가릅니다. 같은 주제라도
"블랙홀 사진 보여줘"→images, "블랙홀 다큐 틀어줘"→videos,
"블랙홀이 어떻게 생기는지 설명해줘"→chat, "블랙홀 최신 관측 결과 검색해줘"→text.
URL이 포함돼도 본문 추출 요구가 아니면 extract가 아닙니다.
import re
import torch
import torch.nn.functional as F
from transformers import AutoModelForSequenceClassification, AutoTokenizer
_CORE = re.compile(r"[가-힣a-zA-Z0-9]")
class IntentRouter:
def __init__(self, model_id="MelissaJ/koelectra-search-7-base", device=None):
self.device = device or ("cuda" if torch.cuda.is_available() else "cpu")
self.tokenizer = AutoTokenizer.from_pretrained(model_id)
self.model = (
AutoModelForSequenceClassification.from_pretrained(model_id)
.to(self.device)
.eval()
)
self.id2label = {int(k): v for k, v in self.model.config.id2label.items()}
self.route("워밍업") # 첫 호출 지연 제거
@torch.no_grad()
def route(self, text: str) -> dict:
# 완성형 한글/영숫자가 없으면 노이즈("ㅋㅋ", "?", "...") → 모델 없이 chat 폴백.
# 길이 기준(len < 3 등)으로 바꾸면 "환율" 같은 정상 2글자 질의가 오라우팅됨.
if not _CORE.search(text.strip()):
return {"label": "chat", "confidence": 1.0, "rule": "noise_guard"}
enc = self.tokenizer(
text, truncation=True, max_length=64, return_tensors="pt"
).to(self.device)
probs = F.softmax(self.model(**enc).logits[0], dim=-1)
idx = int(probs.argmax())
return {
"label": self.id2label[idx],
"confidence": round(float(probs[idx]), 4),
"rule": "model",
}
router = IntentRouter()
router.route("지금 원달러 환율 얼마야")
# {'label': 'text', 'confidence': 0.986, 'rule': 'model'}
⚠️ 위 수치는 학습 데이터와 동일 분포의 합성 데이터 기준입니다. 실제 사용자 발화에 대한 성능은 별도 측정이 필요하며, 이보다 낮을 수 있습니다.
지연시간 (단건, batch=1, torch 2.10 실측):
| 디바이스 | 평균 | p95 |
|---|---|---|
| GPU (RTX급) | 7.4ms | 10.4ms |
| CPU | 15.4ms | 17.8ms |
monologg/koelectra-base-v3-discriminatorimages, "커피 추출 원리"→chat, "에어컨 틀어줘"→chat)noise_guard 규칙으로 걸러야 합니다.