Token Embedding Usages
Token Embedding Usages (토큰 임베딩 사용법)
토큰 임베딩은 시퀀스 내 각 토큰에 대한 임베딩을 생성하는 작업이에요. 시퀀스 임베딩(시퀀스당 하나의 임베딩)과 달리 토큰 단위로 임베딩을 냅니다. vLLM에서는 token_embed pooling task로 구현되며, 오프라인으로 LLM.encode(..., pooling_task="token_embed"), 온라인으로 Pooling API(/pooling)를 제공해요.
출처: 문서
본문
요약
- Model Usage: Token embedding
- Pooling Tasks:
token_embed - 오프라인 API:
LLM.encode(..., pooling_task="token_embed") - 온라인 API: Pooling API(
/pooling)
(시퀀스) 임베딩 작업과 토큰 임베딩 작업의 차이는 (시퀀스) 임베딩이 시퀀스마다 하나의 임베딩을 출력하는 반면, 토큰 임베딩은 토큰마다 임베딩을 출력한다는 점이에요. 많은 임베딩 모델이 둘 다 지원해요.
참고: pooling 멀티태스크 지원은 v0.21부터 제거됐어요. 기본 pooling task(
embed)가 원하는 것이 아닐 때는 오프라인에서PoolerConfig(task="token_embed"), 온라인에서--pooler-config.task token_embed로 수동 지정해야 해요.
전형적인 사용 사례
Multi-Vector Retrieval
구현 예시: 오프라인 examples/pooling/token_embed/multi_vector_retrieval_offline.py, 온라인 examples/pooling/token_embed/multi_vector_retrieval_online.py.
Late interaction
score API를 통해 두 입력 프롬프트 간 late interaction으로 유사도 점수를 계산할 수 있어요. Score API 참고.
마지막 히든 스테이트 추출
--convert embed로 어떤 아키텍처의 모델도 임베딩 모델로 변환할 수 있어요. 그다음 토큰 임베딩으로 이 모델들의 마지막 히든 스테이트를 추출할 수 있어요.
지원 모델
텍스트 전용 모델
| Architecture | Models | Example HF Models | LoRA | PP |
|---|---|---|---|---|
| ColBERTLfm2Model | LFM2 | LiquidAI/LFM2-ColBERT-350M | ||
| ColBERTModernBertModel | ModernBERT | lightonai/GTE-ModernColBERT-v1 | ||
| ColBERTJinaRobertaModel | Jina XLM-RoBERTa | jinaai/jina-colbert-v2 | ||
| HF_ColBERT | BERT | answerdotai/answerai-colbert-small-v1, colbert-ir/colbertv2.0 | ||
| *Model^C, *ForCausalLM^C 등 | 생성 모델 | N/A | * | * |
^C:
--convert embed로 임베딩 모델로 자동 변환됨. * 기능 지원은 원본 모델과 동일.
멀티모달 모델
| Architecture | Models | Inputs | Example HF Models | LoRA | PP |
|---|---|---|---|---|---|
| ColModernVBertForRetrieval | ColModernVBERT | T / I | ModernVBERT/colmodernvbert-merged | ||
| ColPaliForRetrieval | ColPali | T / I | vidore/colpali-v1.3-hf | ||
| ColQwen3 | Qwen3-VL | T / I | TomoroAI/tomoro-colqwen3-embed-4b 등 | ||
| ColQwen3_5 | ColQwen3.5 | T + I + V | athrael-soju/colqwen3.5-4.5B-v3 등 | ||
| OpsColQwen3Model | Qwen3-VL | T / I | OpenSearch-AI/Ops-Colqwen3-4B 등 | ||
| Qwen3VLNemotronEmbedModel | Qwen3-VL | T / I | nvidia/nemotron-colembed-vl-4b-v2 등 | ✅ | ✅ |
| *ForConditionalGeneration^C 등 | 생성 모델 | * | N/A | * | * |
모델이 위 목록에 없으면 as_embedding_model로 자동 변환을 시도해요.
특수 모델
JinaForRanking— Qwen3 기반,jinaai/jina-reranker-v3. listwise 문서 리랭커로 novel한 "last but not late interaction" 아키텍처를 사용해요.examples/pooling/token_embed/jina_reranker_v3_offline.py참고.
오프라인 추론
Pooling 파라미터
use_activation: bool | None = None
dimensions: int | None = None
LLM.encode
토큰 임베딩 모델에 LLM.encode를 쓸 때는 pooling_task="token_embed"를 설정하세요:
from vllm import LLM
llm = LLM(model="answerdotai/answerai-colbert-small-v1", runner="pooling")
(output,) = llm.encode("Hello, my name is", pooling_task="token_embed")
data = output.outputs.data
print(f"Data: {data!r}")
LLM.score
토큰 임베딩 작업을 지원하는 모든 모델은 두 입력 프롬프트의 late interaction을 계산해 score API로 유사도 점수를 계산할 수 있어요:
from vllm import LLM
llm = LLM(model="answerdotai/answerai-colbert-small-v1", runner="pooling")
(output,) = llm.score(
"What is the capital of France?",
"The capital of Brazil is Brasilia.",
)
score = output.outputs.score
print(f"Score: {score}")
온라인 서빙
Pooling API를 참고하고 "task":"token_embed"를 사용하세요.
추가 예시
examples/pooling/token_embed에서 더 많은 예시를 찾을 수 있어요.
지원 기능
토큰 임베딩 기능은 (시퀀스) 임베딩과 일관돼요.