[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) 로 구조화한 사전이다.

예) goodwell, 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 학습 과정

  1. 코퍼스에서 중심 단어 c를 선택한다
  2. 고정된 크기의 윈도우(Window) 내 주변 단어들의 조건부 확률을 계산한다: P(o | c)
  3. 이 확률이 최대가 되도록 벡터를 반복 학습한다
  4. 코퍼스의 모든 단어 위치에 대해 반복한다

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)로 확장해 나간다.

Categories:

Updated:

Leave a comment