Token Classification Usages
Token Classification Usages (토큰 분류 사용법)
토큰 분류는 시퀀스 내 각 토큰에 대한 결과를 생성하는 작업이에요. 시퀀스 분류(전체 시퀀스에 대해 단일 결과)와 달리 토큰 단위로 분류 결과를 냅니다. vLLM에서는 token_classify pooling task로 구현되며, 오프라인으로 LLM.encode(..., pooling_task="token_classify"), 온라인으로 Pooling API(/pooling)를 제공해요.
출처: 문서
본문
요약
- Model Usage: token classification
- Pooling Tasks:
token_classify - 오프라인 API:
LLM.encode(..., pooling_task="token_classify") - 온라인 API: Pooling API(
/pooling)
(시퀀스) 분류와 토큰 분류의 핵심 차이는 출력 세분성이에요. 시퀀스 분류는 전체 입력 시퀀스에 대해 단일 결과를, 토큰 분류는 시퀀스 내 각 토큰에 대한 결과를 생성해요. 많은 분류 모델이 둘 다 지원해요.
참고: pooling 멀티태스크 지원은 v0.21부터 제거됐어요. 기본 pooling task(
classify)가 원하는 것이 아닐 때는 오프라인에서PoolerConfig(task="token_classify"), 온라인에서--pooler-config.task token_classify로 수동 지정해야 해요.
전형적인 사용 사례
Named Entity Recognition (NER)
구현 예시: 오프라인 examples/pooling/token_classify/ner_offline.py, 온라인 examples/pooling/token_classify/ner_online.py.
Forced Alignment
Forced alignment는 오디오와 참조 텍스트를 입력으로 받아 단어 수준 타임스탬프를 생성해요. 예시: examples/pooling/token_classify/forced_alignment_offline.py.
Sparse retrieval (어휘 매칭)
BAAI/bge-m3 모델은 토큰 분류를 sparse 검색에 활용해요. 자세한 내용은 특정 모델 예시 페이지를 참고하세요.
지원 모델
| Architecture | Models | Example HF Models | LoRA | PP |
|---|---|---|---|---|
| BertForTokenClassification | bert 기반 | boltuix/NeuroBERT-NER 등 | ||
| ModernBertForTokenClassification | ModernBERT 기반 | disham993/electrical-ner-ModernBERT-base | ||
| OpenAIPrivacyFilterForTokenClassification | gpt-oss 기반 encoder | openai/privacy-filter | ||
| Qwen3ForTokenClassification^C | Qwen3 기반 | bd2lcco/Qwen3-0.6B-finetuned | ||
| RobertaForTokenClassification | RoBERTa 기반 | Jean-Baptiste/roberta-large-ner-english | ||
| XLMRobertaForTokenClassification | XLM-RoBERTa 기반 | Davlan/xlm-roberta-base-ner-hrl | ||
| *Model^C, *ForCausalLM^C 등 | 생성 모델 | N/A | * | * |
^C:
--convert classify로 분류 모델로 자동 변환됨. 모델이 위 목록에 없으면as_seq_cls_model로 자동 변환을 시도해요. 기본적으로 마지막 토큰에 해당하는 softmax된 히든 스테이트에서 클래스 확률을 추출해요.
멀티모달 모델
| Architecture | Models | Inputs | Example HF Models | LoRA |
|---|---|---|---|---|
| Qwen3ASRForcedAlignerForTokenClassification | Qwen3-ForcedAligner | T + A | Qwen/Qwen3-ForcedAligner-0.6B 등 | ✅ |
참고: forced alignment 사용에는
--hf-overrides '{"architectures": ["Qwen3ASRForcedAlignerForTokenClassification"]}'가 필요해요.examples/pooling/token_classify/forced_alignment_offline.py를 참고하세요.
Reward 모델
토큰 분류 모델을 리워드 모델로 사용해요. 지원: InternLM2 기반(internlm/internlm2-1_8b-reward), Qwen2 기반(Qwen/Qwen2.5-Math-RM-72B) 등.
오프라인 추론
Pooling 파라미터
use_activation: bool | None = None
LLM.encode
토큰 분류 모델에 LLM.encode를 쓸 때는 pooling_task="token_classify"를 설정하세요:
from vllm import LLM
llm = LLM(model="boltuix/NeuroBERT-NER", runner="pooling")
(output,) = llm.encode("Hello, my name is", pooling_task="token_classify")
data = output.outputs.data
print(f"Data: {data!r}")
온라인 서빙
Pooling API를 참고하고 "task":"token_classify"를 사용하세요.
추가 예시
examples/pooling/token_classify에서 더 많은 예시를 찾을 수 있어요.
지원 기능
토큰 분류 기능은 (시퀀스) 분류와 일관돼요.