🤖 AI/ML

Embedding

임베딩

데이터를 고차원 벡터로 변환. 의미적 유사성 표현. RAG, 검색의 핵심.

📖 상세 설명

Embedding(임베딩)은 텍스트, 이미지, 오디오 등 비정형 데이터를 고차원 벡터 공간의 숫자 배열로 변환하는 기술입니다. "왕 - 남자 + 여자 = 여왕"처럼 의미적 관계가 벡터 연산으로 표현되어, 컴퓨터가 의미를 이해하고 비교할 수 있게 됩니다.

Word2Vec(2013)이 단어 임베딩의 시작이었고, BERT(2018)가 문맥을 이해하는 임베딩으로 발전시켰습니다. 현재는 OpenAI text-embedding-3, Cohere embed-v3 등 상용 임베딩 API와 sentence-transformers 같은 오픈소스가 널리 사용됩니다.

임베딩의 핵심은 유사한 의미를 가진 데이터가 벡터 공간에서 가깝게 위치한다는 점입니다. 코사인 유사도로 두 벡터의 거리를 측정하면, "강아지"와 "개"는 0.95 이상, "강아지"와 "자동차"는 0.2 이하로 나옵니다. 차원은 보통 384~3072 사이입니다.

RAG(검색 증강 생성), 시맨틱 검색, 추천 시스템, 중복 탐지 등 거의 모든 AI 애플리케이션의 기반 기술입니다. 특히 벡터 DB(Pinecone, Weaviate, Qdrant)와 결합하면 수억 개 문서에서 밀리초 단위로 유사 문서를 찾을 수 있습니다.

💻 코드 예제

# OpenAI 임베딩 API 사용
from openai import OpenAI
import numpy as np

client = OpenAI()

def get_embedding(text: str, model="text-embedding-3-small") -> list[float]:
    """텍스트를 벡터로 변환 (1536 차원)"""
    response = client.embeddings.create(input=text, model=model)
    return response.data[0].embedding

def cosine_similarity(a: list, b: list) -> float:
    """두 벡터의 코사인 유사도 계산"""
    a, b = np.array(a), np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 예시: 의미적 유사성 측정
texts = ["인공지능이 세상을 바꾸고 있다", "AI가 혁신을 이끈다", "오늘 날씨가 좋다"]
embeddings = [get_embedding(t) for t in texts]

print(f"문장1-문장2 유사도: {cosine_similarity(embeddings[0], embeddings[1]):.3f}")  # ~0.85
print(f"문장1-문장3 유사도: {cosine_similarity(embeddings[0], embeddings[2]):.3f}")  # ~0.15

# 비용: text-embedding-3-small = $0.02 / 1M tokens
# 비용: text-embedding-3-large = $0.13 / 1M tokens

📊 성능 & 비용

2025년 1월 기준 OpenAI 임베딩 모델 가격 및 성능 비교입니다.

모델 가격 (1M tokens) 차원 MTEB 점수
text-embedding-3-small $0.02 1536 62.3%
text-embedding-3-large $0.13 3072 64.6%
text-embedding-ada-002 $0.10 1536 61.0%

권장: ada-002는 5배 비싸면서 성능이 낮으므로 사용 금지. 3-small이 가성비 최고, Batch API 사용 시 50% 할인. 3-large는 256차원으로 축소해도 ada-002보다 우수.

🗣️ 실무에서 이렇게 말하세요

💬 RAG 시스템 설계 회의에서
"문서 청킹 후 text-embedding-3-small로 임베딩하고, Pinecone에 저장하면 됩니다. 쿼리당 top-k 5개 청크 검색하고, 코사인 유사도 0.7 이상만 컨텍스트로 넣으면 할루시네이션이 크게 줄어요."
💬 면접에서
"임베딩은 의미적 유사성을 벡터 거리로 표현합니다. Word2Vec의 '왕-남자+여자=여왕' 예시처럼 의미 관계가 벡터 연산으로 보존되죠. 실제 프로젝트에서 OpenAI 임베딩으로 고객 문의 자동 분류 시스템을 구축해 정확도 92%를 달성했습니다."
💬 임베딩 모델 선택 논의에서
"한국어 특화가 필요하면 multilingual-e5-large가 좋고, 범용이면 text-embedding-3-small이 가성비 최고예요. MTEB 벤치마크 보면 small이 ada-002보다 성능이 좋으면서 5배 저렴합니다."

⚠️ 흔한 실수 & 주의사항

다른 모델의 임베딩을 혼용

text-embedding-ada-002와 text-embedding-3-small의 임베딩은 호환되지 않습니다. 모델이 바뀌면 전체 데이터를 재임베딩해야 합니다.

긴 텍스트를 그대로 임베딩

8192 토큰 제한이 있고, 긴 텍스트는 의미가 희석됩니다. 500~1000자 단위로 청킹 후 개별 임베딩하세요.

올바른 방법

동일한 임베딩 모델을 일관되게 사용하고, 문서는 의미 단위로 청킹하세요. 임베딩 전에 텍스트 전처리(노이즈 제거, 정규화)도 중요합니다.

🔗 관련 용어

📚 더 배우기