임베딩이란 무엇인가
숫자로 바꿔야 계산할 수 있다 — 모든 AI의 출발점
컴퓨터는 "고양이"와 "강아지"가 비슷하다는 걸 모른다. 문자열이 다르니까. 임베딩은 이 문제를 푼다 — 의미가 비슷한 것은 가까운 숫자로, 다른 것은 먼 숫자로 변환한다.
"고양이" → [0.82, -0.15, 0.41, ...]
"강아지" → [0.79, -0.12, 0.38, ...]
"자동차" → [-0.33, 0.67, -0.21, ...]
고양이와 강아지의 벡터는 가깝고, 자동차는 멀다. 이게 임베딩의 전부다.
임베딩은 목적이고, 방법은 여러 가지다
"단어를 벡터로 바꾸고 싶다" — 이게 임베딩이라는 목적이다. 그 방법이 시대별로 달라진다.
통계 기반 (임베딩 이전):
TF-IDF: 단어 빈도로 벡터 생성. 의미는 반영 안 됨
LSA: 행렬 분해로 차원 축소. 약간의 의미 반영
신경망 기반 (2013~):
Word2Vec: 2층 신경망. "king - man + woman = queen" 가능해진 시작점
GloVe: 공출현 통계 + 행렬 분해의 하이브리드
FastText: 글자 단위 분해로 오타/신조어에 강함
Transformer 기반 (2018~):
BERT: 문맥을 반영한 임베딩. 같은 "bank"도 금융/강둑 맥락에 따라 다른 벡터
GPT 계열: 대규모 사전학습 모델
OpenAI text-embedding-3-small: 1536차원, 다국어 지원, API로 바로 사용
추천시스템에서 임베딩이 중요한 이유
추천의 핵심 질문은 "이 유저가 이 아이템을 좋아할까?"다.
유저와 아이템을 같은 벡터 공간에 넣으면, 거리가 곧 선호도가 된다. 가까우면 좋아할 가능성이 높고, 멀면 낮다.
이게 Matrix Factorization부터 Two-Tower 모델까지 추천시스템 대부분이 공유하는 아이디어다.
직접 학습 vs 사전학습 모델
직접 학습은 우리 데이터로 벡터를 만든다. 도메인에 최적화되지만 데이터가 수만 건 이상 필요하다.
사전학습 모델(OpenAI 등)은 이미 학습이 끝난 모델에 텍스트를 보내고 벡터를 받는다. 데이터가 적어도 되고 다국어가 자동 지원된다. 대부분의 프로젝트는 여기서 시작하면 된다.
동작 원리
비정형 데이터(텍스트, 이미지 등)를 입력
임베딩 모델이 고정 크기의 숫자 벡터로 변환
벡터 간 거리(코사인 유사도 등)로 유사성 측정
가까운 벡터 = 의미적으로 비슷한 것
장점
- ✓ 비정형 데이터를 수학적으로 비교 가능하게 만듦
- ✓ 다국어, 멀티모달(텍스트+이미지) 통합이 벡터 공간에서 자연스럽게 가능
단점
- ✗ 벡터만으로는 "왜 비슷한지" 설명이 안 됨 (해석 불가능)
- ✗ 임베딩 품질이 학습 데이터에 크게 의존 — 편향된 데이터는 편향된 벡터를 만듦