콘텐츠로 이동

Projection(투영)

**Projection(투영)**은 source model(소스 모델)의 vector space(벡터 공간)에 있는 embedding(임베딩)을 Schift의 공유 **canonical latent space(정규 잠재 공간)**로 매핑하는 과정입니다. Schift를 거치는 모든 embedding(임베딩)은 저장되거나 반환되기 전에 투영되며, 이를 통해 데이터를 다시 embedding(임베딩)하지 않고도 모델을 변경하거나, 모델을 혼합하거나, output dimensions(출력 차원)을 변경할 수 있습니다.

서로 다른 provider(제공자)의 embedding model(임베딩 모델)은 크기, 스케일, semantic geometry(의미적 기하학)이 다른 벡터를 생성합니다. openai/text-embedding-3-large(3072차원)의 벡터와 voyage/voyage-4(1024차원)의 벡터는 직접 비교할 수 없으며, 동일한 vector store(벡터 저장소)에서 상호 교환할 수 없습니다.

Schift는 모든 embedding(임베딩)을 하나의 canonical space(정규 공간)로 투영함으로써 이 문제를 해결합니다. 이를 통해 세 가지 실용적인 이점을 얻을 수 있습니다:

  • 재임베딩 없이 모델 전환. vector store(벡터 저장소)를 재구축하지 않고도 한 provider(제공자)에서 다른 provider(제공자)로 이동할 수 있습니다.
  • Cross-model retrieval(교차 모델 검색). 한 모델로 embedding(임베딩)된 query(쿼리)로 다른 모델로 embedding(임베딩)된 문서를 검색할 수 있습니다.
  • Flexible output dimensions(유연한 출력 차원). source model(소스 모델)의 기본 크기와 관계없이 지원되는 모든 출력 차원을 요청할 수 있습니다.

Schift의 projection layer(투영 레이어)는 adaptive, mixture-of-experts(적응형 혼합 전문가) 투영기로 구현되어 있습니다. 흐름은 두 단계로 이루어집니다:

  1. to_canonical — source model(소스 모델)의 embedding(임베딩)을 canonical space(정규 공간)로 매핑합니다.
  2. from_canonical — canonical embedding(정규 임베딩)을 요청한 출력 차원으로 매핑합니다.

Canonical space(정규 공간)의 고정 차원은 1024입니다. 이 차원은 다양한 source model(소스 모델)에서 semantic signal(의미 신호)를 보존할 만큼 충분히 크면서도, 저장 및 검색 비용을 예측 가능하게 유지할 만큼 충분히 작습니다.

Base projection matrices(기본 투영 행렬)

섹션 제목: “Base projection matrices(기본 투영 행렬)”

각 source model(소스 모델)에 대해 Schift는 학습된 base projection matrix(기본 투영 행렬) W_base를 유지합니다. 이 행렬은 ridge regression(릿지 회귀)로 학습되어 source model(소스 모델)의 고유 공간에서 1024차원 canonical space(정규 공간)로 embedding(임베딩)을 매핑합니다. 기본 행렬은 모든 organization(조직)에서 공유됩니다.

공유 기본 행렬 외에도 Schift는 **expert(전문가)**라고 하는 domain-specific low-rank corrections(도메인별 저차원 보정)을 지원합니다. 각 expert(전문가)는 특정 도메인, corpus(코퍼스), 또는 작업에 맞게 기본 투영을 조정하는 작은 ΔW 행렬입니다.

전문가는 다음과 같을 수 있습니다:

  • Global(전역) — 일반적인 도메인을 위해 모든 organization(조직)에서 공유됩니다.
  • Organization-specific(조직별) — 단일 organization(조직)의 corpus(코퍼스)로 학습됩니다.
  • Task-specific(작업별)retrieval_query 또는 classification과 같은 embedding task types(임베딩 작업 유형)에 맞춰집니다.

embedding(임베딩)이 투영되면 Schift는 corpus centroid(코퍼스 중심점)를 사용하여 적절한 전문가 조합으로 라우팅합니다. 들어오는 batch(배치)의 중심점과 각 expert(전문가)의 중심점 간 cosine similarity(코사인 유사도)를 계산한 다음, 일치하는 전문가 보정의 softmax-weighted blend(소프트맥스 가중치 혼합)을 사용합니다. task_type이 제공되면 작업에 맞는 전문가가 선호되고, 그렇지 않으면 라우터가 universal experts(범용 전문가)로 fallback(폴백)합니다.

auto-routed(자동 라우팅) 모델 schift-embed-1-small의 경우, source embedding(소스 임베딩)이 이미 canonical space(정규 공간)에서 생성되므로 projector(투영기)는 expert correction(전문가 보정) 단계를 건너뛰고 base projection(기본 투영)만 사용합니다.

embedding(임베딩)이 canonical form(정규 형태)이 되면 from_canonical이 요청한 출력 차원에 맞게 조정합니다:

  • 요청한 차원이 1024보다 작으면 벡터를 leading dimensions(선두 차원)으로 잘라내고 re-normalized(다시 정규화)합니다.
  • 요청한 차원이 1024보다 크면 벡터를 zeros(0)으로 padded(패딩)합니다.
  • 요청한 차원이 정확히 1024이면 canonical vector(정규 벡터)를 변경 없이 반환합니다.

예를 들어 기본 출력이 3072차원인 모델에서 512차원 embedding(임베딩)을 요청할 수 있게 됩니다.

투영은 API 호출자에게 투명합니다. POST /v1/embeddings, POST /v1/embed/batch를 호출하거나 bulk embedding job(대량 임베딩 작업)을 제출하면 Schift는 다음을 수행합니다:

  1. 선택한 provider(제공자)에 텍스트를 전송합니다.
  2. raw embedding(원시 임베딩)을 수신합니다.
  3. source model(소스 모델)과 organization(조직) 컨텍스트로 to_canonical을 호출합니다.
  4. 요청한 dimensionsfrom_canonical을 호출합니다.
  5. 응답에서 최종 embedding(임베딩)을 반환합니다.

응답에는 항상 model 필드가 포함되어 있어 auto-routing(자동 라우팅)이나 failover(페일오버)에 의존하더라도 실제로 어떤 source model(소스 모델)이 사용되었는지 알 수 있습니다.

참고: 투영은 provider failover(제공자 페일오버) 이후에 발생합니다. Schift가 primary model(주 모델)에서 backup model(백업 모델)로 fallback(폴백)하면, 두 모델의 embedding(임베딩)이 모두 동일한 canonical space(정규 공간)로 투영되므로 반환된 벡터는 계속 compatible(호환)됩니다.

base matrices(기본 행렬)와 expert weights(전문가 가중치)는 시작 시 로드되며, Schift의 internal projection store(내부 투영 저장소)에서 lazily loaded(지연 로드)될 수도 있습니다. training pipeline(학습 파이프라인)은 다음을 지원합니다:

  • paired source and target embeddings(쌍을 이룬 소스 및 대상 임베딩)에서 새로운 W_base를 학습합니다.
  • organization-specific(조직별) 또는 global(전역) expert(전문가)를 low-rank ΔW corrections(저차원 보정)으로 학습합니다.
  • task-aware routing(작업 인식 라우팅)을 위해 task tags(작업 태그)로 expert(전문가)를 등록합니다.

대부분의 경우 직접 projection weights(투영 가중치)를 학습할 필요는 없습니다. Schift는 공유 기본 행렬을 유지 관리하며, organization-specific experts(조직별 전문가)는 internal tooling(내부 도구) 또는 managed services(관리형 서비스)를 통해 생성됩니다.