본문으로 건너뛰기
Kreath Archive
TechProjectsBooksAbout
TechProjectsBooksAbout

내비게이션

  • Tech
  • Projects
  • Books
  • About
  • Tags

카테고리

  • AI / ML
  • 웹 개발
  • 프로그래밍
  • 개발 도구

연결

  • GitHub
  • Email
  • RSS
© 2026 Kreath Archive. All rights reserved.Built with Next.js + MDX
홈TechProjectsBooksAbout
//
  1. 홈
  2. 테크
  3. 2장: 임베딩 모델의 이해와 선택
2026년 1월 15일·AI / ML·

2장: 임베딩 모델의 이해와 선택

텍스트 임베딩의 원리부터 2026년 최신 모델 벤치마크, 프로덕션 환경에서의 선택 기준까지 체계적으로 안내합니다.

17분434자8개 섹션
ragvector-databaseembeddingretrievalllm
공유
rag-system2 / 10
12345678910
이전1장: RAG 시스템 소개와 아키텍처 개요다음3장: 청킹 전략 - 문서 분할의 기술

임베딩이란 무엇인가

임베딩(Embedding)은 텍스트, 이미지 등 비정형 데이터를 고정 길이의 수치 벡터로 변환하는 과정입니다. RAG 시스템에서 임베딩은 검색의 기초가 됩니다. 사용자의 질문과 문서 청크를 같은 벡터 공간에 매핑하고, 벡터 간 거리(유사도)를 통해 가장 관련성 높은 청크를 찾아냅니다.

직관적으로 설명하면, 임베딩은 텍스트의 의미를 숫자의 나열로 표현하는 것입니다. "고양이는 소파에서 잠을 잔다"와 "반려묘가 쇼파 위에서 낮잠을 자고 있다"는 단어가 다르지만 의미가 유사합니다. 좋은 임베딩 모델은 이 두 문장을 벡터 공간에서 가까운 위치에 배치합니다.

text
"고양이는 소파에서 잠을 잔다"  --> [0.23, -0.15, 0.82, ..., 0.41]  (1536차원)
"반려묘가 쇼파 위에서 낮잠을 자고 있다" --> [0.25, -0.13, 0.80, ..., 0.39]  (1536차원)
 
코사인 유사도: 0.97 (매우 유사)

임베딩 모델의 발전 과정

초기: 정적 임베딩

Word2Vec(2013)과 GloVe(2014)는 단어 수준의 정적 벡터를 생성했습니다. "bank"라는 단어가 "은행"과 "강둑" 중 어떤 의미로 쓰였는지 구분하지 못하는 한계가 있었습니다.

문맥 인식 임베딩의 등장

BERT(2018)의 등장으로 문맥을 반영한 임베딩이 가능해졌습니다. 같은 단어라도 주변 문맥에 따라 다른 벡터가 생성됩니다. Sentence-BERT(2019)는 BERT를 문장 수준 임베딩에 최적화하여, 효율적인 시맨틱 검색의 기반을 마련했습니다.

현대 임베딩 모델

2024년 이후 등장한 모델들은 다국어 지원, 긴 문맥 처리, 지시문 기반 임베딩(Instruction-tuned Embedding) 등의 기능을 갖추고 있습니다. 특히 지시문 기반 임베딩은 검색용인지, 분류용인지, 군집화용인지에 따라 동일한 텍스트라도 다른 벡터를 생성하여 특정 작업에 최적화된 결과를 제공합니다.

주요 임베딩 모델 비교

2026년 초 기준 MTEB(Massive Text Embedding Benchmark) 리더보드를 기반으로 주요 임베딩 모델을 비교합니다.

Voyage AI voyage-3-large

MTEB 리더보드에서 검색 작업 부문 1위를 차지하고 있는 모델입니다. OpenAI의 text-embedding-3-large 대비 약 9.7%, Cohere의 embed-v3-english 대비 약 20.7% 높은 성능을 보입니다.

python
import voyageai
 
client = voyageai.Client()
 
# 문서 임베딩 (검색 대상)
doc_embeddings = client.embed(
    texts=["RAG 시스템의 핵심은 검색 품질입니다."],
    model="voyage-3-large",
    input_type="document"
)
 
# 쿼리 임베딩 (검색 질의)
query_embedding = client.embed(
    texts=["RAG에서 가장 중요한 것은?"],
    model="voyage-3-large",
    input_type="query"
)
Info

Voyage AI는 query와 document에 대해 서로 다른 input_type을 지정할 수 있습니다. 이는 비대칭 검색(Asymmetric Search)에 최적화된 설계로, 짧은 질문으로 긴 문서를 검색하는 RAG 시나리오에 특히 효과적입니다.

OpenAI text-embedding-3 시리즈

가장 널리 사용되는 상용 임베딩 모델입니다. small과 large 두 가지 변형이 있으며, Matryoshka Representation Learning을 적용하여 차원 수를 유연하게 조절할 수 있습니다.

python
from openai import OpenAI
 
client = OpenAI()
 
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="RAG 시스템 아키텍처를 설명해 주세요.",
    dimensions=512  # 256, 512, 1536 등 유연하게 조절 가능
)
 
embedding = response.data[0].embedding
print(f"벡터 차원: {len(embedding)}")  # 512
모델차원가격 (1M 토큰)MTEB 평균비고
text-embedding-3-small1536$0.0262.3비용 효율 최적
text-embedding-3-large3072$0.1364.6고성능

Cohere embed-v4

Cohere의 최신 임베딩 모델은 다국어를 기본 지원하며, 문서와 쿼리에 대해 별도의 임베딩 타입을 지정할 수 있습니다. 검색(search_document, search_query), 분류(classification), 군집화(clustering) 등 작업별 최적화가 가능합니다.

python
import cohere
 
co = cohere.Client()
 
# 문서 임베딩
doc_response = co.embed(
    texts=["RAG 시스템에서 임베딩의 역할은 핵심적입니다."],
    model="embed-v4.0",
    input_type="search_document",
    embedding_types=["float"]
)
 
# 쿼리 임베딩
query_response = co.embed(
    texts=["임베딩이 RAG에서 왜 중요한가?"],
    model="embed-v4.0",
    input_type="search_query",
    embedding_types=["float"]
)

오픈소스 모델

자체 인프라에서 운영해야 하거나 데이터 프라이버시가 중요한 경우, 오픈소스 모델이 적합합니다.

모델차원최대 토큰MTEB 검색특징
BAAI/bge-m310248192우수다국어, 희소+밀집 하이브리드
nomic-embed-text-v1.57688192양호가볍고 빠름
Snowflake/arctic-embed-l-v2.010248192우수Matryoshka 지원
intfloat/multilingual-e5-large-instruct1024512양호지시문 기반 다국어
python
from sentence_transformers import SentenceTransformer
 
# 오픈소스 모델 사용
model = SentenceTransformer("BAAI/bge-m3")
 
# 단일 텍스트 임베딩
embedding = model.encode("RAG 시스템의 검색 품질을 높이는 방법")
 
# 배치 임베딩
texts = [
    "벡터 데이터베이스 선택 가이드",
    "청킹 전략 비교 분석",
    "하이브리드 검색 구현 방법"
]
embeddings = model.encode(texts, batch_size=32, show_progress_bar=True)
print(f"형태: {embeddings.shape}")  # (3, 1024)

임베딩 모델 선택 기준

성능 vs 비용 트레이드오프

임베딩 모델 선택에서 가장 중요한 것은 성능과 비용의 균형입니다. 검색 품질이 RAG 시스템 전체 성능의 80%를 결정하므로, 임베딩 모델에서 비용을 아끼는 것은 대부분 잘못된 최적화입니다.

다만, 인덱싱할 문서가 수천만 건 이상이라면 임베딩 비용과 저장 비용이 무시할 수 없는 수준이 됩니다. 이 경우 Matryoshka 임베딩으로 차원을 줄이거나, 비용 효율적인 모델을 선택하는 것이 합리적입니다.

다국어 지원

한국어 문서를 다루는 경우, 다국어 지원 여부가 중요합니다. 영어 중심 모델은 한국어에서 성능이 크게 저하될 수 있습니다. Cohere embed-v4, BAAI/bge-m3, multilingual-e5 등은 한국어를 포함한 다국어를 잘 처리합니다.

최대 토큰 길이

임베딩 모델이 처리할 수 있는 최대 토큰 수는 청킹 전략에 직접적인 영향을 미칩니다. 최대 512 토큰인 모델을 사용한다면 청크 크기도 그에 맞춰야 합니다. 최신 모델 대부분은 8192 토큰까지 지원하므로, 보다 유연한 청킹 전략을 적용할 수 있습니다.

비대칭 검색 지원

RAG에서는 짧은 질문으로 긴 문서를 검색하는 비대칭 검색이 일반적입니다. 쿼리와 문서에 대해 서로 다른 임베딩 전략을 적용하는 모델(Voyage AI, Cohere 등)이 이 시나리오에서 더 좋은 성능을 보입니다.

Warning

임베딩 모델을 변경하면 기존에 인덱싱된 모든 벡터를 재생성해야 합니다. 프로덕션 환경에서 모델을 변경하는 것은 큰 비용이 수반되므로, 초기 선택이 매우 중요합니다. 충분한 벤치마크와 평가를 거친 후 결정하시기 바랍니다.

유사도 측정 방법

임베딩 벡터 간의 유사도를 측정하는 대표적인 방법 세 가지를 살펴봅니다.

코사인 유사도

가장 널리 사용되는 방법으로, 두 벡터 사이의 각도를 기반으로 유사도를 측정합니다. 값의 범위는 -1에서 1이며, 1에 가까울수록 유사합니다. 벡터의 크기(길이)에 영향을 받지 않아 텍스트 길이가 다른 경우에도 안정적입니다.

python
import numpy as np
 
def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
 
# 예시
similarity = cosine_similarity(query_vec, doc_vec)

유클리드 거리

두 벡터 간의 직선 거리를 측정합니다. 값이 작을수록 유사합니다. 정규화되지 않은 벡터에서는 벡터의 크기가 결과에 영향을 미칠 수 있습니다.

내적 (Dot Product)

코사인 유사도와 유사하지만, 벡터의 크기도 고려합니다. 정규화된 벡터에서는 코사인 유사도와 동일한 결과를 줍니다. 계산이 빠르다는 장점이 있어 대규모 검색에서 선호됩니다.

python
# 벡터가 이미 정규화된 경우, 내적 = 코사인 유사도
dot_product = np.dot(query_vec, doc_vec)
Tip

대부분의 현대 임베딩 모델은 정규화된 벡터를 출력합니다. 이 경우 코사인 유사도와 내적의 결과가 동일하므로, 계산이 더 빠른 내적을 사용하는 것이 효율적입니다. 벡터 데이터베이스 설정 시 사용하는 임베딩 모델의 정규화 여부를 확인하세요.

Matryoshka 임베딩

OpenAI의 text-embedding-3 시리즈와 일부 오픈소스 모델이 지원하는 Matryoshka Representation Learning은 임베딩 벡터의 차원을 유연하게 줄일 수 있는 기법입니다. 러시아 전통 인형 마트료시카처럼, 큰 벡터 안에 작은 벡터가 포함된 구조입니다.

예를 들어 1536차원 벡터의 처음 256차원만 사용해도 합리적인 성능을 유지합니다. 이를 통해 저장 공간과 검색 속도를 개선할 수 있습니다.

python
from openai import OpenAI
 
client = OpenAI()
 
# 전체 1536차원
full = client.embeddings.create(
    model="text-embedding-3-small",
    input="RAG 시스템 아키텍처"
)
 
# 256차원으로 축소 (저장 공간 6배 절약)
compact = client.embeddings.create(
    model="text-embedding-3-small",
    input="RAG 시스템 아키텍처",
    dimensions=256
)
차원MTEB 검색 성능저장 공간검색 속도
1536100% (기준)6KB/벡터기준
768~98%3KB/벡터~2배
256~94%1KB/벡터~6배

실전 벤치마크: 자체 데이터로 모델 평가하기

MTEB 리더보드는 범용 벤치마크입니다. 실제 사용할 데이터와 도메인에서의 성능은 다를 수 있으므로, 자체 평가를 수행하는 것이 중요합니다.

python
from sentence_transformers import SentenceTransformer
import numpy as np
 
def evaluate_model(model_name, queries, relevant_docs, corpus):
    """간단한 Recall@K 평가"""
    model = SentenceTransformer(model_name)
 
    # 코퍼스 임베딩
    corpus_embeddings = model.encode(corpus, show_progress_bar=True)
 
    # 쿼리별 평가
    recalls = []
    for query, relevant_ids in zip(queries, relevant_docs):
        query_embedding = model.encode(query)
 
        # 코사인 유사도 계산
        similarities = np.dot(corpus_embeddings, query_embedding)
        top_k_indices = np.argsort(similarities)[-10:][::-1]
 
        # Recall@10 계산
        hits = len(set(top_k_indices) & set(relevant_ids))
        recall = hits / len(relevant_ids)
        recalls.append(recall)
 
    return np.mean(recalls)
 
# 모델 비교
models = [
    "BAAI/bge-m3",
    "intfloat/multilingual-e5-large-instruct",
    "nomic-ai/nomic-embed-text-v1.5"
]
 
for model_name in models:
    score = evaluate_model(model_name, test_queries, test_relevant, test_corpus)
    print(f"{model_name}: Recall@10 = {score:.3f}")

정리

임베딩 모델은 RAG 시스템의 검색 품질을 결정하는 핵심 요소입니다. 2026년 기준 Voyage AI voyage-3-large가 벤치마크 최상위 성능을 보이며, OpenAI text-embedding-3 시리즈는 비용 대비 성능이 우수합니다. 한국어를 포함한 다국어 환경에서는 Cohere embed-v4나 BAAI/bge-m3 같은 다국어 모델을 우선 검토하시기 바랍니다.

모델 선택 시에는 MTEB 리더보드뿐 아니라, 실제 사용할 데이터로 직접 평가하는 것이 가장 신뢰할 수 있는 방법입니다. 그리고 임베딩 모델 변경은 전체 재인덱싱을 필요로 하므로, 초기에 충분한 비교 평가를 거쳐 결정하시기 바랍니다.

다음 장에서는 문서를 검색 단위로 분할하는 청킹 전략에 대해 다룹니다. 어떤 크기로, 어떤 방식으로 문서를 나누느냐가 임베딩 모델 선택만큼이나 검색 품질에 큰 영향을 미칩니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#rag#vector-database#embedding#retrieval#llm

관련 글

AI / ML

3장: 청킹 전략 - 문서 분할의 기술

RAG 검색 품질을 좌우하는 청킹 전략의 종류, 벤치마크 결과, 그리고 최적의 청크 크기를 선택하는 실전 가이드입니다.

2026년 1월 17일·16분
AI / ML

1장: RAG 시스템 소개와 아키텍처 개요

검색 증강 생성(RAG)이 무엇이고 왜 필요한지, 핵심 구성 요소와 전체 아키텍처를 체계적으로 살펴봅니다.

2026년 1월 13일·14분
AI / ML

4장: 벡터 데이터베이스 비교와 선택

Pinecone, Weaviate, Qdrant, pgvector 등 주요 벡터 데이터베이스의 특성을 비교하고 상황에 맞는 선택 가이드를 제공합니다.

2026년 1월 19일·15분
이전 글1장: RAG 시스템 소개와 아키텍처 개요
다음 글3장: 청킹 전략 - 문서 분할의 기술

댓글

목차

약 17분 남음
  • 임베딩이란 무엇인가
  • 임베딩 모델의 발전 과정
    • 초기: 정적 임베딩
    • 문맥 인식 임베딩의 등장
    • 현대 임베딩 모델
  • 주요 임베딩 모델 비교
    • Voyage AI voyage-3-large
    • OpenAI text-embedding-3 시리즈
    • Cohere embed-v4
    • 오픈소스 모델
  • 임베딩 모델 선택 기준
    • 성능 vs 비용 트레이드오프
    • 다국어 지원
    • 최대 토큰 길이
    • 비대칭 검색 지원
  • 유사도 측정 방법
    • 코사인 유사도
    • 유클리드 거리
    • 내적 (Dot Product)
  • Matryoshka 임베딩
  • 실전 벤치마크: 자체 데이터로 모델 평가하기
  • 정리