5분
임베딩: 텍스트를 숫자로 바꾸는 기술
Day 2: 청킹 & 임베딩
임베딩: 텍스트를 숫자로 바꾸는 기술
RAG 기초 > Day 2: 청킹 & 임베딩
학습 목표
- 임베딩의 원리와 필요성을 이해한다
- 주요 임베딩 모델을 비교할 수 있다
- 제조 한글 문서에 적합한 임베딩 모델을 선택할 수 있다
최종 검수: 2026-07
임베딩이란?
임베딩(Embedding) = 텍스트를 숫자 벡터로 변환하는 기술
"CNC 서보 에러" → [0.23, -0.45, 0.67, ..., 0.12] (1536차원)
왜 숫자로 바꾸나?
→ 컴퓨터는 텍스트의 "의미"를 이해 못한다.
→ 숫자 벡터로 바꾸면 의미의 유사도를 계산할 수 있다.핵심 원리: 의미가 비슷하면 벡터도 비슷하다
"CNC 서보 에러" → [0.23, -0.45, 0.67, ...]
"CNC 서보 알람" → [0.24, -0.44, 0.66, ...] ← 매우 유사!
"유압 프레스 사양" → [0.78, 0.12, -0.34, ...] ← 완전 다름
코사인 유사도 (아래 값은 원리를 보이기 위한 예시다):
"서보 에러" vs "서보 알람" → 높다 (표현이 달라도 같은 것을 가리킨다)
"서보 에러" vs "유압 사양" → 낮다 (다른 설비, 다른 주제)
"서보 에러" vs "서보 모터" → 중간 (같은 계통, 다른 대상)이 세 값을 오늘 실습에서 직접 잰다. 모델마다 눈금이 다르므로 "0.97이면 유사"처럼 외울 수 있는 값이 아니다. 자기 모델에서 잰 숫자를 여기에 적어 두고, 그 눈금으로 이후의 판단을 한다.
임베딩 모델 비교: 2024-2025 기준
API 기반 (클라우드)
| 모델 | 차원 | 최대 토큰 | 가격 | 한글 성능 |
|---|---|---|---|---|
| OpenAI text-embedding-3-small | 1536 | 8191 | $0.02/1M | 양호 |
| OpenAI text-embedding-3-large | 3072 | 8191 | $0.13/1M | 우수 |
| Voyage-3 | 1024 | 32000 | $0.06/1M | 우수 |
| Cohere embed-v3 | 1024 | 512 | $0.10/1M | 양호 |
오픈소스 (로컬)
| 모델 | 차원 | 최대 토큰 | 크기 | 한글 성능 |
|---|---|---|---|---|
| BGE-M3 | 1024 | 8192 | 2.3GB | 최우수 |
| multilingual-e5-large | 1024 | 512 | 2.2GB | 우수 |
| gte-multilingual | 768 | 8192 | 1.5GB | 우수 |
| KoSimCSE | 768 | 512 | 500MB | 한국어 특화 |
제조 한글 문서에 뭘 써야 하나?
결론부터:
[프로토타입 / 빠른 구현]
→ OpenAI text-embedding-3-small
이유: API 한 줄이면 동작, 한글 성능 충분
[프로덕션 / 비용 절감]
→ BGE-M3
이유: 무료, 한국어 최강, 로컬 실행
[보안 제약 (공장 내 데이터 반출 불가)]
→ BGE-M3 또는 KoSimCSE
이유: 완전 로컬 실행, API 호출 없음임베딩 차원(Dimension)의 의미
차원이 높을수록:
├── 더 정밀한 의미 표현 가능
├── 저장 공간 더 많이 필요
├── 검색 속도 약간 느림
└── 반드시 더 좋은 것은 아님!
OpenAI가 공표한 MTEB 영어 평균 (2024년 발표 기준):
text-embedding-3-small (1536차원): 62.3점
text-embedding-3-large (3072차원): 64.6점
→ 차원을 두 배로 늘렸는데 점수 차이는 그만큼 벌어지지 않는다.
차원 수는 성능의 상한을 조금 넓힐 뿐 성능 자체가 아니다.여기에 다국어 모델을 같은 표로 세우지 않는 이유가 있다. MTEB 영어 평균은 영어 과제에서 잰 값이라 한국어 성능을 말해 주지 않는다. 한국어 문서로 쓸 모델을 고른다면 MIRACL의 한국어 부분처럼 한국어 검색을 평가한 자료를 보거나, 가장 확실하게는 자기 문서와 자기 질문으로 직접 재야 한다. Day 3 실습에서 같은 문서를 두 모델에 각각 넣어 그 차이를 잰다.
코사인 유사도 직관적 이해
코사인 유사도 = 두 벡터가 같은 방향을 향하는 정도
1.0: 완전히 같은 방향
0.0: 직교
-1.0: 정반대 방향
주의할 것은 **눈금이 모델마다 다르다**는 점이다.
어떤 모델은 무관한 문장 쌍도 0.2~0.3에 몰아 놓고 정답 쌍을 0.5 언저리에 두며,
다른 모델은 전체를 더 높은 쪽으로 끌어올린다.
그래서 "0.7 이상이면 관련 문서"처럼 고정된 값은 존재하지 않는다.임계값은 정하는 것이 아니라 재는 것이다. 절차는 이렇다.
- 이 문서 묶음과 관련 없는 질문을 열 개쯤 만든다
- 각각 검색해 그때 나오는 최고 유사도를 기록한다
- 그 값들의 최댓값보다 조금 위를 기준선으로 잡는다
- 모델이나 문서를 바꾸면 1번부터 다시 한다
Day 4 완성 코드의 calibrate_threshold()가 이 네 단계를 그대로 한다.
주의: 임베딩 모델 일관성
인덱싱과 검색에 반드시 같은 모델을 사용해야 한다.
❌ 잘못된 예:
인덱싱: text-embedding-3-large (3072차원)
검색: text-embedding-3-small (1536차원)
→ 차원이 달라서 검색 자체가 불가능!
❌ 미묘한 실수:
인덱싱: BGE-M3 v1.0
검색: BGE-M3 v1.5 (업데이트됨)
→ 같은 모델이지만 벡터 공간이 달라져 정확도 저하
✅ 올바른 방법:
EMBEDDING_MODEL = "text-embedding-3-small"
# 인덱싱과 검색 모두 이 변수 참조AI로 학습하기 — 꿀팁
임베딩 모델 성능 주장 사실 확인AI 학습 팁
임베딩 모델 벤치마크 결과는 자주 오인되거나 최신 정보가 아닐 수 있으므로, 제조 도메인에서의 실제 성능을 비판적으로 검증해야 한다.
임베딩 모델에 대한 다음 주장들을 검증해줘: 1) 'text-embedding-3-large는 항상 text-embedding-ada-002보다 제조 기술문서 검색에서 우수하다', 2) '한국어 제조 문서에는 multilingual 임베딩 모델이 영어 전용 모델보다 반드시 더 나은 성능을 낸다', 3) '임베딩 차원 수가 높을수록 검색 정확도가 항상 높아진다', 4) '코사인 유사도와 내적(dot product)은 정규화된 벡터에서 항상 동일한 순위를 산출한다'. 각 주장에 대해 맞음/틀림/조건부 판정과 함께 제조 도메인 RAG에서 임베딩 모델 선택 시 실제로 중요한 기준 3가지를 알려줘.
이 팁이 도움이 됐나요?