Word Embeddings 설명: AI, LLM 및 챗봇 뒤에 숨겨진 수학
요약
단어 임베딩(Word Embedding)은 단어를 고차원 공간의 벡터로 표현하여 그 위치가 의미를 인코딩하는 기술입니다. 이 기사는 'King'과 'Queen'처럼 유사한 의미를 가진 단어가 공간상에서 가까운 거리에 배치되는 원리를 설명합니다. 또한, 두 단어 간의 관계를 측정하기 위해 유클리드 거리와 코사인 유사도를 사용하며, 벡터 산술을 통해 '왕 - 남자 + 여자 ≈ 여왕'과 같은 방식으로 추론이 가능함을 보여줍니다.
핵심 포인트
- 단어 임베딩은 단어를 고차원 공간의 수치 벡터로 표현하여 의미를 좌표에 인코딩합니다.
- 유사도 측정에는 유클리드 거리와 코사인 유사도가 사용되며, NLP 분야에서는 코사인 유사도가 주로 선호됩니다.
- 코사인 유사도는 벡터의 방향(각도)만을 사용하여 두 단어 간의 의미적 연관성을 측정하는 업계 표준 방식입니다.
- 벡터 산술을 통해 'King - Man + Woman'과 같은 수학적 연산을 수행하여 새로운 개념('Queen')을 추론할 수 있습니다.
malcolmlow.net에 처음 게시됨
검색 엔진이 '자동차(cars)'에 대한 쿼리에 응답하여 '자동차(automobiles)'에 관한 문서를 검색할 때, 시스템은 텍스트를 글자 단위로 하나씩 일치시키는 것이 아닙니다. 인터페이스 너머 어딘가에서, 시스템은 이 두 단어가 의미론적으로 관련이 있다는 것을 이해합니다. 이러한 이해의 이면에 있는 메커니즘이 바로 단어 임베딩 (Word Embedding)이며, 일단 그 기하학적 구조를 이해하고 나면 이전으로 돌아갈 수 없습니다. 이 글에서는 임베딩을 작동하게 하는 핵심적인 수학적 연산인 거리 (Distance), 유사도 (Similarity), 산술 (Arithmetic), 스케일링 (Scaling), 그리고 내적 (Dot Product)을 살펴봅니다. 각 개념은 수학이 단순히 설명되는 것에 그치지 않고 눈에 보이도록 구체적인 수치 벡터 (Numerical Vectors)를 통해 예시를 듭니다. 실제 임베딩은 보통 수백 개의 차원을 사용하지만, 여기의 3차원 및 4차원 예시는 페이지에서 읽기 쉬운 상태를 유지하면서도 모든 구조를 보존합니다.
1 · 단어 임베딩 (Word Embedding)이란 무엇인가?
단어 임베딩은 고차원 공간 (High-dimensional space)에서 단어를 벡터 (Vector) — 즉, 숫자의 순서 있는 목록 — 로 표현한 것입니다. 일반적인 임베딩 모델은 300차원을 사용할 수 있으며, 이 경우 'cat'이라는 단어는 300개의 좌표를 가진 하나의 점이 됩니다. 핵심적인 통찰은 바로 그 점의 위치가 의미를 인코딩 (Encode)한다는 것입니다. 이것이 연구자들이 말하는 의미 공간 (Semantic space)입니다. 관련된 의미를 가진 단어들은 서로 가까운 위치에 놓이게 됩니다. 'King'과 'Queen'은 서로 가까이 위치합니다. 'Paris'와 'London'은 서로 가까이 위치합니다. 'Bicycle'과 'democracy'는 서로 멀리 떨어져 있습니다.
예시: 4차원 벡터 (실제 300차원 임베딩을 단순화함)
vec("King") = [ 0.9, 0.7, 0.4, +0.6 ]
vec("Queen") = [ 0.9, 0.7, 0.4, -0.6 ]
vec("Man") = [ 0.5, 0.3, 0.1, +0.8 ]
vec("Woman") = [ 0.5, 0.3, 0.1, -0.8 ]
처음 세 차원은 왕족 (Royalty), 권위 (Authority), 그리고 연령 (Age)을 인코딩합니다. 네 번째 차원은 성별 (Gender)을 인코딩합니다: 양수(+) = 남성적, 음수(-) = 여성적.
2 · 의미의 기하학: 거리와 유사도
단어가 공간상의 점이 되면, 우리는 그들이 얼마나 가까운지를 측정할 방법이 필요합니다. 두 가지 접근 방식이 주를 이룹니다: 유클리드 거리 (Euclidean distance)와 코사인 유사도 (Cosine similarity).
온도 벡터 (Temperature vectors) (3차원)
vec("Hot") = [ 1.0, 0.8, 0.6 ]
vec("Warm") = [ 0.8, 0.6, 0.4 ]
vec("Cold") = [-0.6, 0.4, -0.8 ]
2.1 유클리드 거리 (Euclidean Distance)
두 벡터의 끝점 사이의 직선 거리:
d(a, b) = √ Σᵢ (aᵢ − bᵢ)²
작업 예시:
d(Hot, Warm) = √[(1.0-0.8)² + (0.8-0.6)² + (0.6-0.4)²] = √[0.04 + 0.04 + 0.04] = √0.12 ≈ 0.346 ← 작음: 서로 가까움
d(Hot, Cold) = √[(1.0-(-0.6))² + (0.8-0.4)² + (0.6-(-0.8))²] = √[2.56 + 0.16 + 1.96] = √4.68 ≈ 2.163 ← 큼: 서로 멀리 떨어져 있음
2.2 코사인 유사도 (Cosine Similarity) — 업계 표준
실제로는 NLP (자연어 처리) 시스템들이 거의 보편적으로 코사인 유사도 (Cosine similarity)를 선호합니다. 코사인 유사도는 벡터의 길이를 완전히 무시하고 오직 벡터 사이의 각도에만 집중합니다. 즉, 두 벡터가 같은 방향을 가리키고 있다면 크기(magnitude)와 상관없이 1.0의 점수를 얻습니다.
cos(θ) = (a · b) / (‖a‖ × ‖b‖)
범위: −1 (반대) → 0 (직교) → +1 (동일한 방향)
작업 예시:
‖Hot‖ = √(1.0² + 0.8² + 0.6²) = √2.00 ≈ 1.414
‖Warm‖ = √(0.8² + 0.6² + 0.4²) = √1.16 ≈ 1.077
‖Cold‖ = √(0.6² + 0.4² + 0.8²) = √1.16 ≈ 1.077
dot(Hot, Warm) = (1.0)(0.8) + (0.8)(0.6) + (0.6)(0.4) = 1.52
cos(Hot, Warm) = 1.52 / (1.414 × 1.077) ≈ +0.998 ← 거의 동일한 방향
dot(Hot, Cold) = (1.0)(-0.6) + (0.8)(0.4) + (0.6)(-0.8) = -0.76
cos(Hot, Cold) = -0.76 / (1.414 × 1.077) ≈ -0.499 ← 반대 방향
| 단어 쌍 | 유클리드 거리 (d) | cos(θ) | 해석 |
|---|---|---|---|
| Hot vs Warm | 0.346 | +0.998 | 거의 동일한 방향 — 밀접하게 연관됨 |
| Hot vs Cold | 2.163 | −0.499 | 반대 방향 — 반의어 |
3 · 벡터 산술 (Vector Arithmetic): 의미를 더하고 뺄 수 있음
단어는 벡터이기 때문에, 단어에 대해 산술 연산을 수행할 수 있으며 그 결과는 의미론적으로 유의미합니다.
가장 유명한 예시: vec("King") − vec("Man") + vec("Woman") ≈ vec("Queen")
실제 계산 예시:
King = [ 0.9, 0.7, 0.4, +0.6 ]
Man = [ 0.5, 0.3, 0.1, +0.8 ]
Woman = [ 0.5, 0.3, 0.1, -0.8 ]
King − Man = [ 0.4, 0.4, 0.3, -0.2 ]
- Woman = [ 0.9, 0.7, 0.4, -1.0 ]
d(result, Queen) ≈ 0.400 ← 가장 가까움
d(result, Woman) ≈ 0.671
d(result, King) = 1.600
cos(result, Queen) ≈ 0.974 ← 가장 높은 코사인 유사도 (Cosine similarity)
기하학적으로 어떤 일이 일어났을까요? "Man"을 빼면서 성별 차원 (gender dimension)을 제거했고, 왕실 구조 (royalty structure)는 그대로 유지되었습니다. 여기에 "Woman"을 더함으로써 여성의 성별 값을 주입했습니다. 그 결과는 이 어휘 집합에서 가장 가까운 단어인 "Queen"으로부터 0.4 유닛 거리에 위치하게 됩니다.
4 · 스칼라 곱셈과 나눗셈 (Scalar Multiplication and Division): 강도 변화
벡터에 스칼라 (scalar)를 곱하거나 나누면 방향은 바꾸지 않고 크기 (magnitude)만 변경됩니다. 이는 언어에서의 '정도'라는 개념과 매칭됩니다. "Tiny", "Large", "Gigantic"은 모두 서로 다른 강도를 가지지만, 대략적으로 동일한 의미론적 방향을 가리킵니다.
크기 벡터 (3차원):
vec("Tiny") = [ 0.10, 0.20, 0.10 ]
vec("Large") = [ 0.50, 0.70, 0.40 ]
vec("Gigantic") = [ 1.10, 1.50, 0.90 ]
실제 계산 예시:
Large × 2 = [ 1.00, 1.40, 0.80 ]
vec("Gigantic") = [ 1.10, 1.50, 0.90 ]
d(Large × 2, Gigantic) ≈ 0.173 ← 매우 가까움
Large × 0.2 = [ 0.10, 0.14, 0.08 ]
vec("Tiny") = [ 0.10, 0.20, 0.10 ]
d(Large × 0.2, Tiny) ≈ 0.063 ← 매우 가까움
"Loud" ÷ 2는 "Soft" 근처에 도달합니다. 방향은 변하지 않고 강도만 절반이 된 것입니다. 핵심 직관: 스칼라 연산은 벡터가 무엇을 나타내는지(종류)는 바꾸지 않으면서, 그것을 얼마나 많이 나타내는지(양)를 변화시킵니다.
5 · 내적 (The Dot Product): 일치성과 크기
a · b = Σᵢ (aᵢ × bᵢ) = a₁b₁ + a₂b₂ + … + aₙbₙ
내적은 두 가지를 동시에 포착합니다: 일치하는 방향 (direction of agreement)과 결합된 크기 (combined magnitude). 코사인 유사도 (Cosine similarity)는 첫 번째 요소만을 포착합니다.
실제 예시 — 매우 큰 소리 (Very Loud) vs 약간 큰 소리 (A Little Loud):
vec("A Little Loud") = [ 0.30, 0.40, 0.20 ] |magnitude| = 0.539
vec("Very Loud") = [ 0.90, 1.20, 0.60 ] |magnitude| = 1.616
dot(AL, VL) = (0.3)(0.9) + (0.4)(1.2) + (0.2)(0.6) = 0.87
cos(AL, VL) = 0.87 / (0.539 × 1.616) ≈ 1.000 ← 완벽한 일치 (perfect alignment)
AL · AL = 0.09 + 0.16 + 0.04 = 0.29
VL · VL = 0.81 + 1.44 + 0.36 = 2.61
| 비교 | 크기 (Magnitude) | cos(θ) | v · v |
|---|---|---|---|
| A Little Loud | 0.539 | 1.000 | 0.29 |
| Very Loud | 1.616 | 1.000 | 2.61 |
두 경우 모두 완벽하게 공선 (collinear) 상태입니다. 즉, 두 경우 모두 코사인 유사도 (cosine similarity)는 1.0입니다. 하지만 내적 (dot product) 값은 0.29 대 2.61로, 9배의 차이가 납니다. 이것이 추천 시스템 (recommendation systems)과 Transformer 모델의 어텐션 메커니즘 (attention mechanisms)이 종종 가공되지 않은 내적 (raw dot products)을 선호하는 이유입니다. 단순히 문서가 관련이 있는지뿐만 아니라, 해당 주제를 얼마나 두드러지게 다루고 있는지도 알고 싶을 때, 내적은 이 두 가지 차원을 동시에 제공합니다.
6 · 실질적인 응용 분야
검색 엔진 (Search engines)은 사용자의 쿼리 (query)를 벡터 (vector)로 변환하고, 정확한 단어 일치 여부와 상관없이 코사인 유사도 (cosine similarity)를 사용하여 관련성에 따라 순위를 매겨 해당 벡터와 가장 가까운 문서들을 검색합니다. 자동차 보험을 검색했을 때 차량 보장에 관한 결과가 나오는 것은 임베딩 공간 (embedding space)에서의 최근접 이웃 탐색 (nearest-neighbour lookup)입니다.
추천 시스템 (Recommendation systems)은 사용자의 이력을 통해 계산된 벡터로 사용자의 관심사를 표현한 다음, 벡터가 가장 가까운 제품을 찾습니다. 여기서 내적 (dot product)은 특히 유용합니다. 매우 관련성이 높고 크기 (magnitude)가 큰 항목은, 비록 같은 방향을 가리키더라도 관련성이 낮은 항목보다 더 높은 점수를 받게 됩니다.
대규모 언어 모델 (Large language models)은 어텐션 메커니즘 (attention mechanism) 내부에서 스케일링된 내적 (scaled dot product)을 직접 사용합니다. 모든 토큰 (token)에 대해, 쿼리 벡터 (query vector)와 키 벡터 (key vectors) 세트를 내적으로 비교하여 문맥 (context)의 어느 부분이 주의를 기울일 가치가 있는지 결정합니다. 이는 섹션 5의 산술 연산에서 직접적으로 파생된 방식입니다.
빠른 참조: 임베딩 연산 (Embedding Operations)
| 연산 (Operation) | 공식 (Formula) | 결과 (Result) |
| :--- | :--- | :|
| 유클리드 거리 (Euclidean Distance) | $\sqrt{\sum(a_i-b_i)^2}$ | $d(\text{Hot, Warm})=0.346$ / $d(\text{Hot, Cold})=2.163$ |
| 코사인 유사도 (Cosine Similarity) | $(a\cdot b)/(|!|a|!|\times|!|b|!|)$ | $\cos(\text{Hot, Warm})=+0.998$ / $\cos(\text{Hot, Cold})=-0.499$ |
| 벡터 산술 (Vector Arithmetic) | $a \pm b$ | $\text{King}-\text{Man}+\text{Woman} \rightarrow$ 가장 가까운 $\text{Queen}$ ($d=0.400$) |
| 스칼라 곱 (Scalar Multiplication) | $\lambda \cdot a$ | $\text{Large}\times2 \rightarrow$ $\text{Gigantic}$ 근처 / $\text{Loud}\div2 \rightarrow$ $\text{Soft}$ 근처 |
| 내적 (Dot Product) | $a\cdot b = \sum a_i b_i$ | 둘 다 $\cos=1.00$; 내적 $\text{soft}$는 $0.29$ vs $\text{loud}$는 $2.61$ |
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기