🔢

임베딩이란 무엇인가

숫자로 바꿔야 계산할 수 있다 — 모든 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 등)은 이미 학습이 끝난 모델에 텍스트를 보내고 벡터를 받는다. 데이터가 적어도 되고 다국어가 자동 지원된다. 대부분의 프로젝트는 여기서 시작하면 된다.

동작 원리

1

비정형 데이터(텍스트, 이미지 등)를 입력

2

임베딩 모델이 고정 크기의 숫자 벡터로 변환

3

벡터 간 거리(코사인 유사도 등)로 유사성 측정

4

가까운 벡터 = 의미적으로 비슷한 것

장점

  • 비정형 데이터를 수학적으로 비교 가능하게 만듦
  • 다국어, 멀티모달(텍스트+이미지) 통합이 벡터 공간에서 자연스럽게 가능

단점

  • 벡터만으로는 "왜 비슷한지" 설명이 안 됨 (해석 불가능)
  • 임베딩 품질이 학습 데이터에 크게 의존 — 편향된 데이터는 편향된 벡터를 만듦

사용 사례

검색 — 쿼리와 문서의 의미적 매칭 추천 — 유저와 아이템의 벡터 거리로 선호도 예측 분류 — 벡터를 입력으로 감성 분석, 스팸 탐지 클러스터링 — 비슷한 벡터끼리 그룹핑