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

지원 기능

토큰 임베딩 기능은 (시퀀스) 임베딩과 일관돼요.

더 알아보기 (Learn more)