AI - 임베딩
생성일 : 2026.10.07 10:21 / 수정일 : 2026.10.07 12:23
- 임베딩은 텍스트를 의미의 좌표(벡터)로 변환해, 비슷한 의미를 가진 문장은 수치적으로도 비슷하게 만든다.
- 키워드 검색이 단어 일치에 의존하는 반면, 임베딩 검색은 의미 유사도 기반으로 단어가 겹치지 않아도 관련 문서를 찾아낼 수 있다.
- LLM(예: GPT, Claude)이 방대한 텍스트를 학습해 단어/문장 관계를 벡터에 압축하고, 두 벡터의 유사도는 코사인 유사도로 계산된다.
- 벡터는 벡터 DB(예: pgvector, Pinecone, Weaviate, Chroma)에 저장되며, Supabase는 pgvector를 지원해 프로젝트에 활용된다.
KURE 임베딩 모델을 활용한 작업 준비전 학습
1. 임베딩이란?
텍스트를 "의미의 좌표"로 바꾸는 것을 의미한다.
컴퓨터는 글자 자체의 의미를 모른다. "점심"과 "식사"가 비슷한 말이라는 것도 모르고, 문자열로는 완전히 다른 값일 뿐이다.
그래서 글자를 숫자 배열(벡터)로 바꿔서, 의미가 비슷하면 숫자도 비슷하게 만든다.
"커피 한 잔" → [0.12, -0.80, 0.33, ...] (1024개 숫자)
"아메리카노" → [0.10, -0.77, 0.30, ...] ← 비슷함
"주식 매수" → [-0.65, 0.21, 0.58, ...] ← 많이 다름2. 키워드 검색과의 차이
질문 | 키워드 검색 | 임베딩 검색 |
|---|---|---|
"월급 모으는 법" | "월급", "모으는"이 글자로 들어간 문서만 찾음 | "적금", "저축 습관"처럼 뜻이 가까운 문서도 찾음 |
즉, 단어가 겹치지 않아도 찾아낼 수 있다.
3. 왜 필요한가?
기존 검색은 단어 일치 방식임
"강아지" → [0.82, 0.15, -0.43, 0.91, ...] (1536개 숫자)
"멍멍이" → [0.80, 0.14, -0.41, 0.89, ...] (비슷!)
"자동차" → [-0.23, 0.67, 0.91, -0.12, ...] (다름)임베딩은 의미 유사도 기반.
"강아지 사료" 검색 시
→ "멍멍이 밥"도 나옴 (벡터가 비슷하니까)
→ "반려견 영양식"도 나옴
→ "고양이 사료"는 덜 유사하게 나옴4. 어떻게 만들어지는가
LLM(GPT, Claude 등)이 방대한 텍스트를 학습하면서 단어/문장의 관계를 파악한다. 그 관계 정보가 벡터에 압축된다.
학습 데이터에서 "강아지"와 "멍멍이"가
항상 비슷한 문맥에 등장
→ 둘의 벡터가 가깝게 학습됨5. 벡터 유사도 계산
두 벡터가 얼마나 비슷한지는 코사인 유사도로 계산
// 파이썬
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# 결과: -1 (완전 반대) ~ 0 (무관) ~ 1 (완전 동일)
similarity("강아지", "멍멍이") # → 0.95 (매우 유사)
similarity("강아지", "자동차") # → 0.12 (거의 무관)6. 어디에 저장하는가 -> 벡터 DB (pgvector)
일반 DB는 벡터 유사도 검색에 최적화되어 있지 않아서, 전용 벡터 데이터베이스를 사용한다.
벡터 DB | 특징 |
pgvector | PostgreSQL 확장 (Supabase 지원) |
Pinecone | 클라우드 전용, 쉬움 |
Weaviate | 오픈소스 |
Chroma | 로컬, 개발용 |
Supabasae가 pgvector를 지원하기 때문에 현재 프로젝트(개인사이드 플젝)에서는 사용이 가능
핵심 정리
텍스트 → 임베딩 모델 → 숫자 벡터 → 벡터 DB 저장
↓
검색 시: 질문 벡터와 가장 유사한 벡터 찾기 → 관련 텍스트 반환