Files
2nd/10_Wiki/Topic_Programming/Coding/AI_Embeddings_Comparison.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

4.6 KiB

id, title, category, status, source_trust_level, verification_status, created_at, updated_at, tags, tech_stack, applied_in, aliases
id title category status source_trust_level verification_status created_at updated_at tags tech_stack applied_in aliases
ai-embeddings-comparison Embeddings 비교 — OpenAI / Cohere / 오픈소스 Coding draft B conceptual 2026-05-09 2026-05-09
ai
embedding
vector
vibe-coding
language applicable_to
TS / OpenAI / Cohere
Backend
embeddings
BGE
OpenAI text-embedding-3
Cohere
MTEB
vector dimensions

Embeddings 비교

모델 = (정확도 / 차원 / 비용 / latency) 트레이드오프. OpenAI text-embedding-3-small 이 baseline. Cohere embed-v3 (multilingual). 오픈소스 = BGE / Voyage. 차원 줄이기 (dimensions param) 로 비용 줄임.

📖 핵심 개념

  • 차원: 벡터 길이. 큼 = 정확도↑, 비용/메모리↑.
  • Cosine vs dot vs L2: 거리 측정. Cosine 이 가장 일반.
  • Normalization: 단위 벡터 — cosine = dot product.
  • MTEB: 임베딩 벤치마크.

💻 코드 패턴

OpenAI

const r = await openai.embeddings.create({
  model: 'text-embedding-3-small', // 1536 차원, 싸다
  input: 'hello world',
});
const emb = r.data[0].embedding;
// 차원 줄이기 (Matryoshka)
const r = await openai.embeddings.create({
  model: 'text-embedding-3-large', // 3072 base
  input,
  dimensions: 256, // 256 으로 압축 — 정확도 90% 유지
});

Cohere (multilingual)

import { CohereClient } from 'cohere-ai';
const cohere = new CohereClient({ token });

const r = await cohere.v2.embed({
  model: 'embed-multilingual-v3.0',
  inputType: 'search_document', // 또는 search_query (asymmetric)
  texts: ['안녕하세요'],
  embeddingTypes: ['float'],
});

오픈소스 (Sentence Transformers via Hugging Face)

// 로컬 inference (Bun / Node + onnx)
import { pipeline } from '@xenova/transformers';

const embedder = await pipeline('feature-extraction', 'Xenova/bge-base-en-v1.5');
const r = await embedder('hello', { pooling: 'mean', normalize: true });
const emb = Array.from(r.data);

Asymmetric search (query vs document)

// 일부 모델은 query 와 doc 다른 prompt 사용
// BGE: "Represent this sentence for searching relevant passages: {query}"

const docEmb = await embed('document content');
const queryEmb = await embed('Represent this sentence for searching relevant passages: ' + query);

Batch embedding (대량)

const batch = await openai.embeddings.create({
  model: 'text-embedding-3-small',
  input: texts, // up to 2048 inputs
});
const embeddings = batch.data.map(d => d.embedding);

또는 OpenAI batch API: 50% 할인, 24시간 내 처리.

Normalization

function normalize(v: number[]): number[] {
  const norm = Math.sqrt(v.reduce((s, x) => s + x * x, 0));
  return v.map(x => x / norm);
}
// 정규화 후 cosine similarity = dot product

Cosine similarity

function cosine(a: number[], b: number[]): number {
  let dot = 0, na = 0, nb = 0;
  for (let i = 0; i < a.length; i++) {
    dot += a[i] * b[i];
    na += a[i] * a[i];
    nb += b[i] * b[i];
  }
  return dot / (Math.sqrt(na) * Math.sqrt(nb));
}

모델 비교 매트릭스

모델 차원 $/1M tok latency MTEB 멀티
text-embedding-3-small 1536 $0.02 빠름 62 보통
text-embedding-3-large 3072 $0.13 보통 64 보통
Cohere embed-v3 1024 $0.10 보통 -
BGE-base-en 768 무료 (self) self 63 en
BGE-M3 1024 무료 (self) self -
Voyage-3 1024 $0.06 보통 65+ 보통

차원 압축 시험

// Matryoshka: 첫 N 차원만 사용
const compressed = full.slice(0, 256);
// 정확도 측정 — 충분하면 OK

🤔 의사결정 기준

상황 추천
영어 일반 OpenAI 3-small
한국어 / 다국어 Cohere embed-multilingual-v3 / BGE-M3
비용 0 / on-prem BGE / 인스트럭터
정확도 최고 text-embedding-3-large 또는 voyage-3
큰 처리량 Batch API
Edge / browser xenova/transformers WASM

안티패턴

  • 모델 mix 한 인덱스: 비교 안 됨. 한 모델만.
  • Asymmetric 모델 같은 prompt: 의미 떨어짐.
  • Dim 압축 없이 무조건 max: 비용 / 메모리 낭비.
  • Normalization 안 함 + dot 사용: 길이 차이로 noise.
  • Reranker 없이 top-K 만: noise. Cohere rerank-3 등.
  • cache 안 함: 같은 query 매번. content-addressed cache.

🤖 LLM 활용 힌트

  • 작은 = 3-small (1536) + dim 압축.
  • 한국어 = Cohere multilingual / BGE-M3.
  • Batch API 로 비용 절반.

🔗 관련 문서