Field note · 2026-04-29
NLU Intent Classification — 학습 방법을 두 가지 축으로 이해하기
AI 챗봇을 처음 만드는 팀은 대부분 같은 지점에서 막힌다. "사용자가 무슨 말을 하는지 구분해야 하는데, 어떻게 학습시키면 되나요?" 이 질문에 대한 답이 Intent Classification이다. 사용자 발화를 미리 정의된 의도(Intent) 카테고리로 분류하는 것. 원리는 단순하다. 그런데 방법을 찾다 보면 선택지
NLU Intent Classification — 학습 방법을 두 가지 축으로 이해하기
0. 챗봇 팀이 가장 먼저 만나는 벽
AI 챗봇을 처음 만드는 팀은 대부분 같은 지점에서 막힌다.
"사용자가 무슨 말을 하는지 구분해야 하는데, 어떻게 학습시키면 되나요?"
이 질문에 대한 답이 Intent Classification이다. 사용자 발화를 미리 정의된 의도(Intent) 카테고리로 분류하는 것. 원리는 단순하다. 그런데 방법을 찾다 보면 선택지가 넘쳐난다. BERT를 파인튜닝하라는 글, SetFit이 훨씬 낫다는 글, GPT에게 맡기면 된다는 글이 동시에 존재한다.
이 글은 그 선택지들을 두 가지 독립 축으로 정리한다. 축이 정해지면 선택이 쉬워진다.
1. Intent Classification이란
사용자가 "지난달 요금 얼마야?"라고 말하면 시스템은 이것이 요금조회 인텐트인지, 청구서요청 인텐트인지, 불만제기 인텐트인지를 결정해야 한다. 이 결정이 Intent Classification이다.
단어 하나가 맥락에 따라 완전히 다른 의도를 가질 수 있기 때문에 키워드 매칭이 아니라 의미 이해가 필요하다. "취소해줘"가 구독 취소인지 주문 취소인지 예약 취소인지는 앞뒤 문장 없이는 알 수 없다.
현재 Intent Classification의 표준 평가 환경은 세 개의 벤치마크 데이터셋으로 구성된다.
| 데이터셋 | 도메인 | Intent 수 | 예제 수 | 특징 |
|---|---|---|---|---|
| BANKING77 | 단일 (은행) | 77개 | 13,083개 (훈련 10,003 / 테스트 3,080) | 고밀도 단일 도메인 |
| CLINC150 | 10개 | 150개 | — | OOD(미등록 Intent) 평가 특화 |
| HWU64 | 21개 | 64개 | — | 스마트홈·캘린더 등 일상 멀티도메인 |
출처: PolyAI/banking77 — Hugging Face, CLINC150 — UCI ML
2. 두 가지 축
Intent Classification 학습 방법을 설명하는 글들이 혼란스럽게 느껴지는 이유가 있다. 서로 다른 기준으로 방법을 설명하기 때문이다.
어떤 글은 "데이터가 얼마나 있냐"를 기준으로 방법을 나누고, 어떤 글은 "모델이 어떻게 학습하냐"를 기준으로 나눈다. 두 기준은 독립적이다. 따라서 하나의 방법이 두 기준 모두에서 서로 다른 위치를 차지한다.
이 두 기준을 명확히 분리하면 전체 풍경이 보인다.
축 1 — 데이터 요구량: 얼마나 많은 레이블이 필요한가?
축 2 — 학습 방법: 모델은 어떻게 가중치를 업데이트하는가?
3. 축 1 — 데이터 요구량
데이터 요구량 기준으로 보면 방법들이 세 구간으로 명확히 나뉜다.
Full-data: 클래스당 100개 이상
BERT나 RoBERTa를 분류 헤드와 함께 end-to-end로 파인튜닝하는 방식이다. 사전학습된 언어 모델 위에 선형 레이어를 추가하고, 레이블 데이터로 전체를 한 번에 학습한다. 충분한 데이터가 있다면 가장 높은 성능을 낸다.
실용적 기준으로 클래스당 100~200개 이상의 레이블 데이터를 필요로 한다. 77개 인텐트를 커버하는 챗봇이라면 최소 7,700개의 학습 예제가 필요하다는 뜻이다.
Few-shot: 클래스당 8~16개
SetFit(Sentence Transformer Fine-Tuning)이 이 구간을 대표한다.
SetFit의 학습 과정은 두 단계다. 첫 단계에서 같은 클래스의 발화 쌍은 임베딩 공간에서 가깝게, 다른 클래스의 쌍은 멀게 배치하는 contrastive 학습을 한다. 두 번째 단계에서 이렇게 만들어진 임베딩 위에 분류 헤드를 붙인다.
"SetFit first fine-tunes a Sentence Transformer model on a small number of labeled examples (typically 8 or 16 per class)" — HuggingFace SetFit Blog
기본 모델로 paraphrase-mpnet-base-v2(약 110M 파라미터)를 사용하며, T-Few(3B) 대비 27배 경량이다. 프롬프트 설계가 필요 없다는 점도 실무에서 중요한 장점이다.
Zero-shot: 레이블 데이터 없음
FLAN-T5, GPT 계열의 대형 언어 모델에 인텐트 이름과 설명만 제공하면 학습 데이터 없이 분류가 가능하다. 새로운 인텐트가 추가될 때 재학습이 필요 없다는 점이 핵심 장점이다.
반면 도메인 특이 표현이나 사내 용어에 약하고, 인텐트 수가 늘어날수록 성능이 저하된다. 프로토타입 검증 단계 또는 레이블링 예산이 없는 초기에 유용하다.
데이터 요구량 요약
클래스당 데이터 양
0 ──────── 8~16 ─────────── 100+
│ │ │
Zero-shot Few-shot Full-data
(FLAN-T5) (SetFit, T-few) (BERT FT)
4. 축 2 — 학습 방법
같은 "Few-shot" 구간 안에서도 모델이 학습하는 방식은 완전히 다를 수 있다. 학습 방법 기준으로 보면 네 가지 구간이 나온다.
Discriminative Fine-tuning
BERT 계열 모델에 classification head를 추가하고 end-to-end로 학습하는 방식이다. 입력 텍스트를 고정 벡터로 인코딩한 다음 선형 레이어가 클래스 확률을 출력한다. 가장 직관적이고 성능이 검증된 방법이다.
Contrastive Learning
SetFit의 방식이다. 정답·오답 쌍을 구성해서 모델이 의미 공간을 스스로 구조화하도록 학습한다. 레이블 수가 적어도 임베딩 공간이 잘 정리되기 때문에 few-shot 환경에서 강점을 가진다.
클래스 불균형 문제에서는 취약점이 있다. 소수 클래스는 contrastive 학습에서 양성 샘플 쌍을 만들기가 어렵기 때문이다. 최근 연구들은 레이블 임베딩을 앵커로 사용하거나 소수 클래스 합성 샘플을 생성하는 방식으로 이 문제를 완화한다.
Prompt/Template 기반
인텐트 설명을 프롬프트에 넣고 모델의 텍스트 생성 능력으로 분류하는 방식이다. 별도의 파라미터 업데이트 없이 in-context 예시만으로 작동하는 ICL(In-Context Learning)이 여기에 속한다. Zero-shot과 구분되는 지점은 레이블 예시의 유무다.
PEFT (Parameter-Efficient Fine-Tuning)
전체 파라미터를 업데이트하지 않고 소수의 추가 파라미터만 학습하는 방식이다. T-few는 FLAN-T5에 (IA)³ 어댑터를 붙여 Attention key/value와 FFN activation 세 지점에만 스케일 벡터를 삽입한다. 학습 파라미터가 전체의 0.01% 미만이다.
출처: Few-Shot Parameter-Efficient Fine-Tuning — arXiv:2205.05638
LoRA는 가중치 행렬의 업데이트를 저차원 행렬 분해로 근사한다. rank r=4~16이 Intent Classification에 적합한 것으로 알려져 있다.
5. 두 축이 독립적이다
이 두 축이 서로 독립적이라는 점이 핵심이다.
SetFit은 데이터 요구량 축에서 "Few-shot" 구간에 속하고, 학습 방법 축에서는 "Contrastive" 구간에 속한다.
**T-few(PEFT)**도 데이터 요구량 축에서 "Few-shot" 구간이지만, 학습 방법 축에서는 "PEFT" 구간이다.
같은 데이터 구간이라도 학습 방법이 다르고, 그 결과 전혀 다른 특성이 나온다. 두 방법을 동일선상에서 비교하면 혼란스럽다. 각 축에서 독립적으로 평가해야 한다.
학습 방법 축
Discrimin. Contrastive Prompt/ICL PEFT
┌────────────┬────────────┬────────────┬──────────┐
Full-data │ NC1 │ │ │ │
Few-shot │ │ NC2 │ │ NC4 │
Zero-shot │ │ │ NC3 │ │
└────────────┴────────────┴────────────┴──────────┘
데이터
요구량 축
NC1(Supervised FT), NC2(SetFit), NC3(Zero-shot), NC4(PEFT/T-few)는 각각 두 축 위에서 독립적인 좌표를 가진다.
6. 실무 선택 기준
두 축이 명확해지면 선택 기준도 단순해진다.
먼저 데이터 현황을 확인한다.
| 현황 | 권장 |
|---|---|
| 클래스당 100개 이상 수집 가능 | Supervised FT (NC1) |
| 클래스당 10~50개 수집 가능 | SetFit (NC2) 또는 T-few (NC4) |
| 데이터 없음 / 검증 단계 | Zero-shot (NC3) |
그다음 학습 방법 제약을 확인한다.
- GPU 메모리가 제한적이면 PEFT(NC4)가 유리하다
- 새 인텐트가 자주 추가된다면 Zero-shot(NC3)이 유지보수 비용이 낮다
- 클래스 불균형이 심하면 Contrastive(NC2) 대신 Supervised FT(NC1)이 안정적이다
7. 레이블 품질이 방법 선택보다 중요할 수 있다
방법을 선택하기 전에 더 근본적인 질문이 있다. 레이블이 옳은가.
Intent 정의가 모호하면 어떤 방법을 써도 성능이 나오지 않는다. "환불 요청"과 "결제 취소"가 같은 Intent인지 다른 Intent인지가 명확하지 않으면, 모델이 그 경계를 학습할 수 없다.
레이블 품질 관리를 위한 세 가지 기준이다.
- 경계 케이스 가이드라인 명문화: 비슷해 보이는 Intent 간의 구분 기준을 문서화한다
- Annotator 간 합의율 측정: 같은 발화를 두 명 이상이 독립적으로 레이블링한 결과가 얼마나 일치하는지 확인한다
- HITL(Human-in-the-Loop) 운영: 모델이 불확실해하는 구간을 인간 검수로 보완한다
모델 방법론의 차이가 몇 퍼센트포인트를 만들어낼 때, 레이블 품질의 차이는 10~20%포인트를 만들어낼 수 있다.
8. 정리
Intent Classification을 배울 때 혼란스러운 이유는 서로 다른 기준의 방법들이 한데 섞여 있기 때문이다. 두 축을 분리하면 구조가 보인다.
- 데이터 요구량 축: Full-data → Few-shot → Zero-shot. 확보 가능한 레이블 수로 진입 구간을 결정한다.
- 학습 방법 축: Discriminative / Contrastive / Prompt / PEFT. 인프라·유지보수·클래스 불균형 조건으로 방법을 결정한다.
두 축은 독립적이다. 같은 데이터 구간에서도 학습 방법이 다를 수 있고, 같은 학습 방법이 다른 데이터 구간에서 작동할 수 있다.
방법을 고르기 전에 먼저 두 가지를 확인하라. 레이블이 몇 개 있는가, 그리고 새 인텐트가 얼마나 자주 추가되는가. 그 두 답이 나머지를 결정한다.
Evidence: [[evidence/nlu-classify/evidence__nlu-classify]]
Ontology: NC1–NC4 (nlu-classify cluster), NCON1–NCON2 (concept layer) — graph-ontology.yaml