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에서 더 많은 예시를 찾을 수 있어요.

지원 기능

토큰 분류 기능은 (시퀀스) 분류와 일관돼요.

더 알아보기 (Learn more)