AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

Zero-Shot Classification – 학습 데이터 없이 텍스트를 분류하는 NLP 기법

제로샷 분류(Zero-Shot Classification)는 특정 작업에 맞게 별도로 학습시키지 않아도, 자연어 레이블 목록만 제시하면 텍스트를 즉시 분류할 수 있는 NLP 기법이다. 고객 지원 티켓 라우팅, 기사 태깅, 사용자 의도 감지 등 레이블이 자주 바뀌거나 학습 데이터가 부족한 상황에서 특히 유용하다.

작동 원리

기존 분류 모델은 레이블을 숫자 ID로 학습한다. 반면 제로샷 분류는 레이블 자체를 자연어 문장으로 바꿔 추론 문제로 접근한다.

입력 텍스트 "회사가 엔터프라이즈 고객을 위한 AI 플랫폼을 출시했다." 에 대해 ["기술", "스포츠", "금융"] 레이블이 주어지면, 모델 내부적으로 다음과 같이 처리한다:

이 텍스트는 기술에 관한 것이다.   → 점수: 0.96
이 텍스트는 스포츠에 관한 것이다. → 점수: 0.02
이 텍스트는 금융에 관한 것이다.  → 점수: 0.02

이 추론 방식 덕분에 레이블 의미가 분류 정확도에 직접 영향을 미친다. money보다 billing issue처럼 구체적인 레이블이 더 높은 정확도를 낸다.

주요 활용 케이스

케이스예시 레이블
고객 지원 티켓 분류billing issue, technical support, refund request
뉴스 기사 태깅정치, 경제, 스포츠, 기술
콘텐츠 모더레이션spam, harassment, safe
사용자 의도 감지구매 의향, 정보 탐색, 불만 표출

빠른 시작

from transformers import pipeline

classifier = pipeline(
    "zero-shot-classification",
    model="facebook/bart-large-mnli"
)

text = "이 튜토리얼은 NLP에서 트랜스포머 모델이 어떻게 활용되는지 설명한다."
candidate_labels = ["기술", "건강", "스포츠", "금융"]

result = classifier(text, candidate_labels)
print(f"최상위 예측: {result['labels'][0]} ({result['scores'][0]:.2%})")
# 최상위 예측: 기술 (96.52%)

멀티레이블 분류

하나의 텍스트가 여러 카테고리에 속할 경우 multi_label=True를 사용한다:

text = "회사가 건강 앱을 출시하고 강한 사업 성장을 발표했다."
result = classifier(
    text,
    ["기술", "헬스케어", "비즈니스", "여행"],
    multi_label=True
)
# 헬스케어 (99.41%), 기술 (99.06%), 비즈니스 (98.15%)

가설 템플릿 커스터마이징

기본 가설 템플릿을 변경하면 특정 도메인에서 정확도가 올라간다:

result = classifier(
    text,
    candidate_labels,
    hypothesis_template="이 텍스트는 {}에 관한 것이다."
)

모델 선택

모델특징권장 용도
facebook/bart-large-mnli정확도 높음, 영어 강점기본 사용
cross-encoder/nli-deberta-v3-large더 높은 정확도프로덕션
joeddav/xlm-roberta-large-xnli다국어 지원한국어 포함 멀티링궐

한계

  • 레이블이 너무 추상적이거나 모호하면 성능 저하
  • 도메인 특화 용어에서는 파인튜닝 모델에 뒤처질 수 있음
  • 레이블 수가 많아질수록 추론 시간 증가

관련 문서

  • rag — 외부 지식을 LLM에 주입하는 검색 증강 생성
  • skill-rag — RAG의 실패 상태를 감지하고 스킬 라우팅으로 보완하는 프레임워크

AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)