임베딩

임베딩 (Embeddings)

임베딩은 단어·문장·이미지를 고차원 공간의 벡터로 표현하는 방법입니다. 이 공간에서 의미가 비슷한 대상은 가까이 위치하므로, 벡터 사이의 거리(유사도)로 의미적 유사성을 측정할 수 있습니다. RAG(검색증강생성)처럼 문서를 벡터 저장소에 넣고 의미 검색하려면 반드시 필요한 단계입니다.

출처: 공식문서

본문

단일 값 임베딩 — embed

embed 함수로 개별 값을 임베딩합니다. 유사 단어·구 찾기, 텍스트 클러스터링 등에 유용하며, 임베딩 모델을 함께 지정합니다 (예: openai/text-embedding-3-small).

import { embed } from 'ai';
const { embedding } = await embed({
  model: 'openai/text-embedding-3-small',
  value: 'sunny day at the beach',
});

여러 값 배치 임베딩 — embedMany

RAG용 데이터 스토어를 준비할 때는 여러 값을 한 번에 임베딩하는 것이 효율적입니다. embedManyembeddings는 입력 순서와 동일한 순서로 정렬되어 반환됩니다. 처리량 최적화를 위한 maxParallelCalls로 병렬 요청 수를 제한할 수도 있습니다.

import { embedMany } from 'ai';
const { embeddings } = await embedMany({
  model: 'openai/text-embedding-3-small',
  values: ['sunny day at the beach', 'rainy afternoon in the city'],
});

유사도 계산

임베딩 후 cosineSimilarity 함수로 벡터 간 코사인 유사도를 계산합니다. 데이터셋에서 의미상 유사한 항목을 찾거나, 관련 항목을 유사도 기준으로 정렬·필터링하는 데 씁니다.

import { cosineSimilarity, embedMany } from 'ai';
const { embeddings } = await embedMany({ model: 'openai/text-embedding-3-small',
  values: ['sunny day at the beach', 'rainy afternoon in the city'] });
console.log(`cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`);

토큰 사용량

임베딩은 토큰 기반 과금을 하는 provider가 많습니다. embed/embedMany 모두 결과의 usage 속성으로 토큰 사용량({ tokens })을 제공합니다.

설정

  • Provider 옵션: providerOptions로 provider별 파라미터를 지정합니다. 예를 들어 OpenAI의 dimensions: 512로 차원을 줄이거나, Google gemini-embedding-2의 멀티모달 임베딩 콘텐츠(providerOptions.google.content)를 지정할 수 있습니다.
  • 그 외: maxRetries, abortSignal/타임아웃, 커스텀 헤더, 임베딩 미들웨어(Embedding Middleware), 응답 정보 접근을 지원합니다.

모델별 지원

대표적 임베딩 모델로 OpenAI text-embedding-3-small(1536차원), Google gemini-embedding-2(3072), Mistral mistral-embed(1024), Cohere의 embed-english-v3.0/embed-multilingual-v3.0(1024) 등이 있습니다. 모델과 차원은 provider 문서의 임베딩 모델 표를 참고합니다.

더 알아보기