본문 바로가기
데이터 과학 수학

ChatGPT는 단어를 어떻게 이해하는가, 임베딩(Embedding)과 벡터 공간의 수학

by dexien 2026. 4. 29.

ChatGPT에 "행복"이라고 입력하면 모델은 이 단어를 어떻게 이해할까요. 컴퓨터는 문자를 직접 이해하지 못합니다. "행복"을 숫자로 변환해야 합니다. 단순히 사전 순서대로 번호를 매기는 게 아닙니다. "행복"과 "기쁨"은 비슷한 숫자여야 하고, "행복"과 "슬픔"은 먼 숫자여야 합니다. 이렇게 의미를 보존하면서 단어를 숫자 벡터로 변환하는 게 임베딩입니다.

임베딩(Embedding)은 현대 AI의 출발점입니다. 텍스트든 이미지든 음악이든 모든 데이터를 벡터 공간에 표현하고, 그 공간에서 유사도를 계산하고, 패턴을 찾습니다. ChatGPT가 문맥을 이해하고, 구글이 검색 결과를 추천하고, 넷플릭스가 취향을 파악하는 모든 과정이 임베딩 위에서 작동합니다. 오늘은 임베딩의 수학적 원리를 실제 숫자와 함께 따라가 보겠습니다.

임베딩(Embedding)과 벡터 공간의 수학
ChatGPT는 단어를 어떻게 이해하는가, 임베딩(Embedding)과 벡터 공간의 수학

임베딩이란 무엇인가 — 의미를 벡터로 표현하기

베딩 공간에서 왕 여왕 남자 여자 고양이 강아지 단어들이 의미에 따라 가까이 모여있는 벡터 시각화
임베딩 공간에서 의미가 비슷한 단어들은 가까운 위치에, 의미가 다른 단어들은 멀리 위치한다

임베딩은 고차원의 이산적인 데이터(단어, 카테고리 등)를 저차원의 연속적인 벡터로 변환하는 과정입니다. 핵심은 의미가 비슷한 것들이 벡터 공간에서도 가까이 위치하도록 만드는 겁니다.

임베딩 예시 (3차원으로 단순화):

단어 벡터 표현
왕 = [0.99, 0.02, 0.75]
여왕 = [0.98, 0.97, 0.73]
남자 = [0.95, 0.01, 0.30]
여자 = [0.94, 0.96, 0.28]
고양이 = [0.10, 0.05, 0.90]
강아지 = [0.12, 0.06, 0.88]

관찰:
왕-여왕: 가까움 (왕족 의미 유사)
남자-여자: 가까움 (사람 의미 유사)
고양이-강아지: 가까움 (동물 의미 유사)
왕-고양이: 멀리 떨어짐 (의미 다름)

→ 벡터 공간에서 거리 = 의미의 거리

실제 임베딩은 수백에서 수천 차원입니다. GPT-3는 12,288차원 임베딩을 씁니다. 차원이 높을수록 더 세밀한 의미 차이를 표현할 수 있습니다. 이 고차원 공간에서 이 연재에서 다룬 내적, 코사인 유사도, 행렬 연산이 작동합니다.


원-핫 인코딩의 한계

임베딩 이전에 쓰던 방식이 원-핫 인코딩(One-Hot Encoding)입니다. 단어를 하나의 위치만 1이고 나머지는 0인 벡터로 표현합니다.

원-핫 인코딩 (단어 4개인 경우):

왕 = [1, 0, 0, 0]
여왕 = [0, 1, 0, 0]
남자 = [0, 0, 1, 0]
여자 = [0, 0, 0, 1]

문제 1. 유사도 계산 불가:
왕·여왕 내적 = 1×0+0×1+0×0+0×0 = 0
왕·남자 내적 = 1×0+0×0+0×1+0×0 = 0
→ 모든 단어 쌍의 유사도가 0으로 동일
→ "왕"과 "여왕"이 얼마나 비슷한지 알 수 없음

문제 2. 차원 폭발:
한국어 단어 수: 약 50만 개
원-핫 벡터 차원: 50만 차원
→ 대부분이 0인 희소 벡터 → 계산 비효율

문제 3. 의미 정보 없음:
단순히 단어에 번호를 매긴 것
→ "행복"과 "기쁨"이 얼마나 가까운지 모름

원-핫 인코딩은 단어를 구분할 수는 있지만 단어 간 관계를 표현하지 못합니다. 임베딩은 이 문제를 해결합니다. 50만 차원 희소 벡터를 수백 차원 밀집 벡터로 압축하면서 의미 정보를 보존합니다.


Word2Vec — 문맥으로 의미를 학습하는 방법

Word2Vec은 2013년 구글이 발표한 임베딩 학습 방법입니다. 핵심 아이디어는 "비슷한 문맥에서 나타나는 단어는 비슷한 의미를 가진다"입니다. 언어학의 분포 가설(Distributional Hypothesis)을 수학으로 구현했습니다.

Word2Vec 학습 방식 (Skip-gram):

입력 문장들:
"고양이가 생선을 먹었다"
"강아지가 고기를 먹었다"
"고양이가 우유를 마셨다"

학습 목표:
중심 단어 → 주변 단어 예측

"먹었다" 주변에: 고양이, 생선, 강아지, 고기
"마셨다" 주변에: 고양이, 우유

학습 후 결과:
고양이-강아지: 같은 문맥(먹었다) → 벡터 가까워짐
먹었다-마셨다: 같은 문맥(고양이) → 벡터 가까워짐
고양이-생선: 자주 같이 등장 → 벡터 가까워짐

학습 방법:
입력: 중심 단어 원-핫 벡터
은닉층: 임베딩 행렬 W (어휘수 × 차원수)
출력: 주변 단어 확률 (소프트맥스)
→ 역전파로 W 업데이트
→ 학습 완료된 W의 각 행이 단어 임베딩

Word2Vec의 학습 과정이 이 연재에서 다룬 역전파와 경사하강법 그대로입니다. 소프트맥스 출력과 실제 주변 단어의 크로스 엔트로피 손실을 최소화하면서 임베딩 행렬 W를 업데이트합니다. 수십억 개의 문장을 학습하면 의미 있는 벡터 공간이 만들어집니다.


임베딩 공간의 수학 — 벡터 연산으로 의미 계산하기

잘 학습된 임베딩 공간에서는 놀라운 벡터 연산이 가능합니다. 의미 관계가 벡터 방향으로 인코딩 되기 때문입니다.

유명한 Word2Vec 벡터 연산:

왕 - 남자 + 여자 ≈ 여왕

직관적 의미:
"왕"에서 "남성" 요소를 빼고
"여성" 요소를 더하면 "여왕"이 나옴

실제 벡터 계산 (단순화):
왕 = [0.99, 0.02, 0.75]
남자 = [0.95, 0.01, 0.30]
여자 = [0.94, 0.96, 0.28]

왕 - 남자 + 여자
= [0.99-0.95+0.94, 0.02-0.01+0.96, 0.75-0.30+0.28]
= [0.98, 0.97, 0.73]

여왕 = [0.98, 0.97, 0.73] ← 거의 일치!

다른 예시:
파리 - 프랑스 + 한국 ≈ 서울
의사 - 남자 + 여자 ≈ 간호사 (편향 문제 발생)

→ 벡터 방향이 의미 관계를 인코딩

이 벡터 연산이 작동하는 이유는 임베딩 공간에서 "성별"이라는 개념이 일관된 방향으로 인코딩되기 때문입니다. 왕→여왕 방향과 남자→여자 방향이 거의 평행합니다. PCA에서 주성분이 데이터의 주요 변동 방향을 찾듯, 임베딩 공간에서도 의미적 변동이 특정 방향으로 인코딩 됩니다.


코사인 유사도로 단어 유사도 측정하기

임베딩 공간에서 두 단어의 유사도는 코사인 유사도로 측정합니다. 협업 필터링 글에서 다룬 공식이 그대로 적용됩니다.

코사인 유사도 계산 예시:

행복 = [0.8, 0.6, 0.2]
기쁨 = [0.7, 0.7, 0.1]
슬픔 = [0.1, 0.2, 0.9]

행복-기쁨 유사도:
내적 = 0.8×0.7 + 0.6×0.7 + 0.2×0.1 = 0.56+0.42+0.02 = 1.00
||행복|| = √(0.64+0.36+0.04) = √1.04 ≈ 1.02
||기쁨|| = √(0.49+0.49+0.01) = √0.99 ≈ 0.995
cos = 1.00 / (1.02×0.995) ≈ 0.985 ← 매우 유사

행복-슬픔 유사도:
내적 = 0.8×0.1 + 0.6×0.2 + 0.2×0.9 = 0.08+0.12+0.18 = 0.38
||슬픔|| = √(0.01+0.04+0.81) = √0.86 ≈ 0.927
cos = 0.38 / (1.02×0.927) ≈ 0.402 ← 낮은 유사도

→ 행복-기쁨(0.985) >> 행복-슬픔(0.402)
→ 의미적으로 가까운 단어가 수치로도 가까움

시맨틱 검색(Semantic Search)이 이 원리로 작동합니다. "좋은 음식점 추천"으로 검색하면 "맛집"이나 "레스토랑 리뷰"와 같은 의미의 문서도 찾아줍니다. 키워드가 정확히 일치하지 않아도 임베딩 벡터가 비슷하면 관련 문서로 판단합니다.


트랜스포머 임베딩 — 문맥에 따라 달라지는 벡터

Word2Vec의 한계는 같은 단어가 항상 같은 벡터라는 겁니다. "배"가 "선박"을 의미하든 "신체 부위"를 의미하든 같은 벡터입니다. 트랜스포머의 임베딩은 이 문제를 해결합니다.

정적 임베딩 vs 동적 임베딩:

Word2Vec (정적):
"배가 항구에 들어왔다"의 배 = [0.3, 0.8, 0.2]
"배가 고프다"의 배 = [0.3, 0.8, 0.2]
→ 문맥 무관, 항상 같은 벡터

BERT/GPT (동적, 문맥화 임베딩):
"배가 항구에 들어왔다"의 배 = [0.1, 0.9, 0.3] ← 선박
"배가 고프다"의 배 = [0.8, 0.1, 0.7] ← 신체
→ 어텐션으로 문맥을 반영해서 다른 벡터 생성

작동 원리:
1. 초기 임베딩: 단어 → 고정 벡터
2. 트랜스포머 층 통과:
각 층에서 어텐션으로 주변 단어 정보 흡수
3. 최종 임베딩: 문맥이 반영된 동적 벡터

GPT-3: 96개 트랜스포머 층
→ 96번 문맥 정보가 누적되어 풍부한 표현 생성

BERT의 임베딩이 강력한 이유가 여기 있습니다. 같은 단어라도 문맥에 따라 완전히 다른 벡터가 됩니다. 앞서 다룬 트랜스포머의 셀프 어텐션이 이 문맥화 임베딩을 만드는 핵심 메커니즘입니다.


임베딩의 실무 활용

임베딩은 텍스트를 넘어 다양한 데이터에 적용됩니다.

활용 분야 임베딩 대상 활용 방식
시맨틱 검색 문서, 쿼리 코사인 유사도로 관련 문서 검색
추천 시스템 상품, 사용자 임베딩 유사도로 취향 기반 추천
감성 분석 리뷰 텍스트 긍정/부정 방향으로 분류
이미지 검색 이미지, 텍스트 같은 공간에 임베딩 후 유사도 계산
이상 탐지 거래 데이터 정상 패턴과 멀리 있는 벡터 = 이상치
RAG 시스템 문서, 질문 관련 문서 검색 후 LLM에 제공

RAG(Retrieval-Augmented Generation)는 ChatGPT 같은 LLM이 학습 데이터에 없는 최신 정보를 활용하는 방법입니다. 질문을 임베딩으로 변환하고, 문서 데이터베이스에서 코사인 유사도로 가장 관련 있는 문서를 찾아서 LLM에 함께 전달합니다. 임베딩이 없으면 RAG도 없습니다.

이 연재에서 다룬 내적, 코사인 유사도, 역전파, 트랜스포머 어텐션이 모두 임베딩 안에 들어있습니다. "행복"이라는 단어 하나가 수백 차원의 벡터로 변환되는 과정에 이 모든 수학이 작동합니다. 데이터를 벡터 공간에 표현한다는 아이디어가 현대 AI 전체를 떠받치는 기반입니다.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름