RAG - 임베딩(Embedding)

김소은·2025년 8월 14일

https://wikidocs.net/233777

📚 임베딩(Embedding)

RAG 파이프라인의 3단계 — 문서 청크를 의미 기반 벡터로 변환


1. 임베딩이란?

임베딩은 텍스트 → 수치 벡터로 변환하는 과정입니다.
이 벡터는 LLM이 텍스트의 의미적 유사성을 이해하고 비교할 수 있게 해줍니다.

📌 목적

  1. 검색 & 매칭: 질의와 문서의 의미적 유사성 비교
  2. 분류 & 클러스터링: 비슷한 의미끼리 묶기
  3. RAG 검색 정확도 향상: 관련 문서만 컨텍스트로 제공

2. 주요 임베딩 모델 비교

모델차원장점단점추천 상황
OpenAI text-embedding-3-small1536(조정 가능)빠르고 저렴다국어 약간 약함대규모 데이터, 비용 절감
OpenAI text-embedding-3-large3072(조정 가능)정확도↑비용↑정밀 검색, 품질 우선
HuggingFace multilingual-e5-large-instruct1024다국어, 오픈소스GPU 필요오픈소스 RAG, 다국어
BGE-M31024+Dense+Sparse+Multi-Vector설치·세팅 복잡검색 정밀도 최우선
Upstage Solar Embedding4096한국어 최적화, query/passage 분리국내 서비스 의존한국어 중심 서비스
Ollama Embeddings모델별로컬 실행, 보안로컬 자원 필요오프라인 환경
GPT4All Embeddings384무료, 로컬성능 제한개인 프로젝트, 보안 필수

3. 사용 예시

3.1 OpenAI 임베딩

from langchain_openai import OpenAIEmbeddings

emb = OpenAIEmbeddings(
    model="text-embedding-3-small",
    dimensions=1024  # 차원 축소 가능
)

query_vector = emb.embed_query("텍스트")
doc_vectors = emb.embed_documents(["문서1", "문서2"])

3.2 캐싱 적용 (CacheBackedEmbeddings)

from langchain.storage import LocalFileStore
from langchain.embeddings import CacheBackedEmbeddings

store = LocalFileStore("./cache/")
cached_emb = CacheBackedEmbeddings.from_bytes_store(
    emb, store, namespace=emb.model
)
  • 효과: 동일 텍스트 재계산 방지 → 속도·비용 절약

3.3 HuggingFace 임베딩

from langchain_community.embeddings import HuggingFaceEmbeddings

hf_emb = HuggingFaceEmbeddings(
    model_name="intfloat/multilingual-e5-large-instruct"
)

3.4 BGE-M3 (FlagEmbedding)

from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
dense_vecs = model.encode(["문서1", "문서2"])['dense_vecs']

3.5 Upstage 임베딩

from langchain_upstage import UpstageEmbeddings

query_emb = UpstageEmbeddings(model="solar-embedding-1-large-query")
passage_emb = UpstageEmbeddings(model="solar-embedding-1-large-passage")

4. 유사도 계산

from sklearn.metrics.pairwise import cosine_similarity

sim = cosine_similarity([vec1], [vec2])[0][0]
print(f"유사도: {sim:.4f}")
  • 코사인 유사도: -1 ~ 1 범위 (1에 가까울수록 유사)

5. 실무 팁

  • 비용 vs 품질: 대규모 데이터 → small 모델, 고정밀 검색 → large 모델

  • 언어: 한국어 중심 → Upstage, BGE-M3

  • 환경: 로컬·오프라인 → Ollama, GPT4All

  • 속도: 캐싱 필수

  • 모델 선택 기준:

    1. 사용 언어
    2. 데이터 크기
    3. 응답 속도/비용
    4. 설치 가능 환경

💬 "RAG의 검색 품질은 임베딩 품질이 좌우한다."
다음 글(CH09)에서는 **벡터스토어(Vector Store)**를 설정하고, 검색 쿼리를 최적화하는 방법을 다룹니다.

profile
개발자

0개의 댓글