임베딩은 "사람의 언어(문자)" 를 "기계가 거리 계산을 할 수 있는 의미공간(벡터)"으로 변환하는 과정
Chunking이 정보를 다루기 좋은 단위로 쪼개는 과정이라면,
Embedding은 그 단위들 사이의 의미적 관계를 수학적으로 정의하는 과정
- 문자열은 기계 입장에서 동일/비동일 비교만 가능
- 예시: "반값습니다." .vs. "만나서 반가워요."
- 문자차원 → 다름
- 의미차원 → 거의 동일
➡ 의미 기반 검색·비교를 하려면 벡터 공간으로 변환 필요
- 임베딩은 하나의 의미 덩어리에 대해 수행할 때 가장 효과정
- 너무 크면, 여러 주제가 섞여 의미가 흐려짐.
- 너무 작으면, 의미 정보가 부족
➡ Chunk는 임베딩 품질을 결정하는 입력 단위
Query 임베딩 벡터와 Document 임베딩 벡터는 동일한 의미 공간에 존재해야 한다Query 임베딩 벡터와 Document 임베딩 벡터는 동일한 의미 공간에 존재해야 한다
- Query: 사용자의 질문
- Document: 저장된 지식
이 둘을 같은 임베딩 모델로 변환해야
→ 벡터 거리(코사인 유사도 등) 계산 가능
Query: "임베딩은 왜 필요한가?"
Document chunk:
- "문장을 벡터로 변환하여 의미 비교를 가능하게 한다"
➡ 단어가 정확히 일치하지 않아도 높은 유사도
임베딩 후에는 다음이 가능해짐:
query_embedding
↓
vector similarity 계산
↓
가장 가까운 chunk Top-K 선택
➡ LLM에게 “관련 있는 정보만” 전달 가능
자연어 의미를 고정 차원의 벡터로 투영
- 장점
- 오프라인 가능
- 도메인 특화 모델 사용 가능
- 비용 제어 가능
- 단점
- 모델 선택 성능 튜닝 부담
- 다국어/최신 지식은 모델에 따라 편차
- 장점
- 의미 정렬 품질이 매우 안정적
- Query ↔ Document 매칭 성능 우수
- 최신 언어 표현 반영
- 단점
- 외부 API 의존
- 비용 발생
➡ “임베딩 단계”는 구현체(OpenAI / HF)가 바뀌어도 철학은 동일
[Raw Document]
↓
[Chunking] ← 정보 구조화
↓
[Embedding] ← 의미 수치화
↓
[Vector Store] ← 의미 공간 저장
↓
[Query Embedding]
↓
[Similarity Search]
↓
[Relevant Context]
↓
[LLM Answer]
본 시스템에서 임베딩 단계는 Chunk 단위로 분할된 문서와 사용자 질의를 동일한 의미 공간의 벡터로 변환하기 위한 과정이다. 이를 통해 키워드 일치 기반 검색의 한계를 극복하고, 의미 유사도 기반의 문서 검색 및 근거 중심 응답 생성을 가능하게 한다. HuggingFaceEmbeddings와 OpenAIEmbeddings는 이러한 목적을 달성하기 위한 임베딩 제공자 구현체로 사용된다.