LLM & Generative AI/RAG in Practice

[LangChain RAG 구축 시리즈 Ep.02] 📦 Embedding의 원리와 벡터의 의미

ygtoken 2025. 4. 5. 19:21
728x90

이 글에서는 RAG의 핵심 기술 중 하나인 **Embedding(임베딩)**의 개념을 설명하고,
왜 우리가 문서를 벡터로 바꾸는지, 그것이 어떤 방식으로 검색에 활용되는지를 쉽게 풀어드립니다.


🤔 임베딩이란 무엇인가요?

“문장이나 단어를 숫자의 집합으로 바꾸는 것”

언어 모델은 텍스트 그 자체를 이해하지 못합니다.
따라서 우리가 사용하는 문장이나 단어를 숫자(벡터)로 바꿔줘야 컴퓨터가 비교하거나 검색할 수 있습니다.


🎯 Embedding의 핵심 목적

목적 설명
🧠 의미를 담은 벡터 생성 “상품 이름이 뭐야?” 와 “제품 명이 뭐지?”를 비슷한 벡터로 표현
🔍 검색을 가능하게 함 질문 벡터와 문서 벡터 간의 거리를 계산해 유사도 검색
📦 LLM에 정보 전달 “이 질문과 관련 있는 문서”를 찾아서 LLM에게 넘겨줌

🧮 Embedding은 어떤 형태로 바뀌나요?

예시:

문장: "table name: products"
Embedding 결과 (예시):

[0.021, -0.443, 0.128, ..., 0.071]  # 1536차원의 실수 벡터

즉, 하나의 문장은 길고 복잡한 숫자 리스트 (벡터) 로 바뀝니다.


📌 Embedding → 유사도 비교 예시

문장 A 문장 B 거리
"상품 테이블" "products 테이블" 매우 가까움 → ✅ 관련 있음
"고객 목록" "상품 테이블" 멀어짐 → ❌ 관련 없음

이렇게 **임베딩된 벡터들 간의 거리(유사도)**를 기반으로 관련 문서를 골라냅니다.


🔧 어떤 임베딩 모델을 사용할까?

모델 특징
OpenAIEmbeddings GPT와 같은 문맥 이해 중심, 높은 정확도
HuggingFace BGE 오픈소스, fine-tune 가능, 비교적 빠름
MiniLM 가볍고 빠름, 짧은 문장 검색에 적합

✅ 본 시리즈에서는 OpenAIEmbeddings (text-embedding-ada-002) 를 사용합니다.


🛠️ 실습 예시: LangChain에서 임베딩 적용

from langchain.embeddings import OpenAIEmbeddings

# OpenAI 임베딩 모델 불러오기
embedding_model = OpenAIEmbeddings()

# 문장 리스트 → 벡터 리스트
docs = ["table name: products", "table name: orders"]
vectors = embedding_model.embed_documents(docs)

👉 이렇게 생성된 벡터는 ChromaDB나 FAISS 같은 벡터 DB에 저장합니다.


📎 요약 및 핵심 정리

  • 임베딩은 문장 → 숫자 벡터로 바꾸는 과정입니다.
  • 이를 통해 질문과 문서 간의 의미적 유사도를 계산할 수 있습니다.
  • 벡터 기반 검색이 있어야 RAG가 제대로 작동합니다.
728x90