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
'LLM & Generative AI > RAG in Practice' 카테고리의 다른 글
[LangChain RAG 구축 시리즈 Ep.05] 🧩 왜 metadata.json을 문서처럼 다뤄야 할까? (1) | 2025.04.05 |
---|---|
[LangChain RAG 구축 시리즈 Ep.04] ❄️ Iceberg란? 메타데이터 구조와 RAG 연결 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.03] 🧠 LLM은 어디까지 알고 있을까? 외부 지식의 필요성 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.01] 🔍 RAG를 구성하는 핵심 컴포넌트 4가지 (1) | 2025.04.05 |
Kubernetes 환경에서 ChromaDB 구축 및 Python 데이터 저장 테스트 (0) | 2025.02.27 |