[CS224N] Lecture 1: Introduction and Word Vectors
[CS224N] Lecture 1: Introduction and Word Vectors
강의: Stanford CS224N - Natural Language Processing with Deep Learning (2024 Spring) 목표: NLP에서 단어를 어떻게 벡터로 표현하는지 이해하고, Word2Vec의 핵심 원리를 파악한다.
0. 이 강의가 던지는 질문
컴퓨터가 언어를 이해하려면 단어를 어떻게 표현해야 할까?
사람은 “고양이”와 “강아지”가 비슷한 개념이라는 걸 직관적으로 안다. 하지만 컴퓨터에게 이 관계를 어떻게 알려줄 수 있을까?
이 강의의 핵심 질문은 다음과 같다:
- 단어의 의미(Meaning) 를 어떻게 수치로 표현할 수 있는가?
- 기존 방식(WordNet, One-Hot)의 한계는 무엇인가?
- Word2Vec 은 어떤 방식으로 단어 간 의미적 유사도를 학습하는가?
1. 단어의 의미를 표현하는 방법
1.1 WordNet — 사전 기반 접근법
WordNet은 단어를 동의어(Synonym) 집합과 상하 관계(Hypernym/Hyponym) 로 구조화한 사전이다.
예) good → well, beneficial, right …
한계:
- 뉘앙스나 미묘한 차이를 표현하지 못한다
- 단어 간 유사도를 수치로 계산하기 어렵다
- 신조어, 슬랭 등 새로운 단어가 생길 때마다 사람이 직접 업데이트 해야 한다
WordNet은 규칙 기반 접근의 한계를 잘 보여주는 사례다.
1.2 One-Hot Vector — 희소 표현
각 단어를 어휘(Vocabulary) 크기의 벡터로 표현하되, 해당 단어 위치만 1이고 나머지는 0으로 채우는 방식이다.
예) 어휘 크기가 5일 때:
"cat" → [1, 0, 0, 0, 0]
"dog" → [0, 1, 0, 0, 0]
"fish" → [0, 0, 1, 0, 0]
한계:
- 어휘 크기가 클수록 벡터 차원이 폭발적으로 증가 (수십만 차원)
- 희소(Sparse) 표현으로 계산 비효율적
- “cat”과 “dog”의 내적 = 0 → 두 단어 간 유사도를 전혀 반영하지 못함
1.3 Distributional Semantics — 분포 기반 의미론
“You shall know a word by the company it keeps.” — J.R. Firth (1957)
단어의 의미는 함께 등장하는 단어들(Context)로 정의할 수 있다는 관점이다.
예) “banking”이라는 단어 주변에 “credit”, “deposit”, “loan” 같은 단어들이 자주 등장한다면, “banking”은 금융 관련 의미를 가진다고 볼 수 있다.
이 아이디어를 기반으로 각 단어를 고정된 크기의 밀집 벡터(Dense Vector) 로 표현하는 것이 Word Embedding이다.
2. Word2Vec
2.1 핵심 아이디어
Word2Vec은 대규모 텍스트 코퍼스(Corpus) 로부터 단어 벡터를 학습하는 프레임워크다.
핵심 가정:
- 중심 단어(Center Word)
c가 주어졌을 때, 주변에 등장하는 단어(Context Word)o의 확률을 예측한다 - 이 예측을 잘 하도록 벡터를 업데이트하다 보면, 의미적으로 유사한 단어들은 비슷한 벡터를 갖게 된다
2.2 학습 과정
- 코퍼스에서 중심 단어
c를 선택한다 - 고정된 크기의 윈도우(Window) 내 주변 단어들의 조건부 확률을 계산한다:
P(o | c) - 이 확률이 최대가 되도록 벡터를 반복 학습한다
- 코퍼스의 모든 단어 위치에 대해 반복한다
2.3 수학적 정식화
Likelihood L(θ):
모든 중심 단어 위치 t에 대해, 윈도우 내 context word들이 등장할 확률의 곱:
\(L(\theta) = \prod_{t=1}^{T} \prod_{\substack{-m \leq j \leq m \\ j \neq 0}} P(w_{t+j} \mid w_t ; \theta)\)
Objective Function J(θ):
음의 로그우도(Negative Log-Likelihood)를 최소화: \(J(\theta) = -\frac{1}{T} \log L(\theta) = -\frac{1}{T} \sum_{t=1}^{T} \sum_{\substack{-m \leq j \leq m \\ j \neq 0}} \log P(w_{t+j} \mid w_t ; \theta)\)
로그를 취하면 곱셈이 덧셈으로 바뀌어 계산이 편해지고, 음수를 붙이면 최소화 문제로 변환할 수 있다.
조건부 확률 \(P(o \mid c)\):
각 단어는 두 개의 벡터를 가진다:
v_c: 중심 단어(Center Word) 벡터u_o: 주변 단어(Outside Word) 벡터
Softmax 함수로 확률을 계산한다: \(P(o \mid c) = \frac{\exp(u_o^\top v_c)}{\sum_{w \in V} \exp(u_w^\top v_c)}\)
- 분자: 중심 단어와 해당 context word의 내적(dot product) → 유사도
- 분모: 전체 어휘에 대한 정규화 항
Softmax는 임의의 실수값을 0~1 사이의 확률 분포로 변환해준다. “max”를 강조하는 동시에 부드럽게(soft) 처리하기 때문에 softmax라고 불린다.
2.4 파라미터 θ
- 어휘 크기 V, 임베딩 차원 d라고 할 때
- 중심 단어 벡터 행렬 + 주변 단어 벡터 행렬 = 총 2dV개의 파라미터
- Gradient Descent를 통해 J(θ)를 최소화하는 방향으로 업데이트
2.5 두 가지 변형 모델
| 모델 | 예측 방향 | 특징 |
|---|---|---|
| Skip-gram | 중심 단어 → 주변 단어 예측 | 소규모 데이터에서 성능 좋음 |
| CBOW | 주변 단어들 → 중심 단어 예측 | 학습 속도 빠름 |
3. Gradient 유도
Objective function을 중심 단어 벡터 v_c로 편미분하면:
\(\frac{\partial}{\partial v_c} \log P(o \mid c) = u_o - \sum_{x \in V} P(x \mid c) \cdot u_x\)
직관적 해석: \(= \underbrace{u_o}_{\text{실제 context word 벡터}} - \underbrace{\sum_{x \in V} P(x \mid c) \cdot u_x}_{\text{모델이 예측한 기대 context word 벡터}}\)
즉, gradient는 “실제로 관찰된 단어” 와 “모델이 예측한 단어” 의 차이다. 이 차이를 줄이는 방향으로 반복 업데이트하면 모델이 점점 정확해진다.
4. 핵심 요약
| 개념 | 내용 |
|---|---|
| WordNet | 사전 기반, 뉘앙스·유사도 표현 한계 |
| One-Hot Vector | 희소 표현, 단어 간 관계 반영 불가 |
| Distributional Semantics | 문맥 기반 의미 표현, Word Embedding의 근거 |
| Word2Vec | 중심-주변 단어 예측으로 밀집 벡터 학습 |
| Skip-gram | 중심 → 주변 예측 |
| CBOW | 주변 → 중심 예측 |
| Gradient | 실제 단어 - 예측 단어의 차이 |
5. 마무리
Lecture 1은 NLP에서 “단어를 어떻게 숫자로 표현할 것인가” 라는 근본적인 문제를 다룬다.
WordNet과 One-Hot의 한계를 넘어, Word2Vec은 단어의 의미를 문맥에서 자동으로 학습하는 혁신적인 접근을 제시했다.
이후 강의에서는 이 Word Vector를 기반으로 더 복잡한 NLP 모델(RNN, Attention, Transformer)로 확장해 나간다.
Leave a comment