Skip to main content

단어 임베딩

학습 목표

  • 원-핫 인코딩의 한계와 밀집 임베딩의 필요성을 이해한다
  • Word2Vec(CBOW, Skip-gram)의 학습 원리를 설명할 수 있다
  • GloVe와 FastText의 차별점을 이해한다
  • 정적 임베딩의 한계를 인식하고 문맥 임베딩과의 차이를 안다

왜 중요한가

자연어를 신경망에 입력하려면 단어를 숫자 벡터로 변환해야 합니다. 원-핫 인코딩은 단어 간 관계를 전혀 반영하지 못하지만, 임베딩은 의미적 유사성을 벡터 공간의 거리로 표현합니다.

원-핫 인코딩 vs 임베딩

표현 방식차원유사도메모리
원-핫 (One-hot)어휘 크기 (수만~수십만)모두 직교높음
밀집 임베딩 (Dense)50~300의미 반영낮음

Word2Vec

2013년 Google의 Mikolov et al.이 제안한 단어 임베딩 학습 방법입니다. 두 가지 아키텍처가 있습니다.

Skip-gram

중심 단어로 주변 단어를 예측합니다. P(wowc)=exp(uwoTvwc)wVexp(uwTvwc)P(w_o | w_c) = \frac{\exp(\mathbf{u}_{w_o}^T \mathbf{v}_{w_c})}{\sum_{w \in V} \exp(\mathbf{u}_w^T \mathbf{v}_{w_c})}

CBOW (Continuous Bag of Words)

주변 단어들로 중심 단어를 예측합니다.
import torch
import torch.nn as nn

class SkipGram(nn.Module):
    """Skip-gram 모델"""
    def __init__(self, vocab_size, embed_dim):
        super().__init__()
        self.center_embedding = nn.Embedding(vocab_size, embed_dim)
        self.context_embedding = nn.Embedding(vocab_size, embed_dim)

    def forward(self, center, context):
        # center: (배치,), context: (배치,)
        center_vec = self.center_embedding(center)    # (배치, embed_dim)
        context_vec = self.context_embedding(context)  # (배치, embed_dim)
        # 내적으로 유사도 계산
        score = (center_vec * context_vec).sum(dim=1)
        return score

# 학습된 Word2Vec 사용 (gensim)
# from gensim.models import KeyedVectors
# wv = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
# print(wv.most_similar('king'))
# print(wv['king'] - wv['man'] + wv['woman'])  # ≈ queen
유명한 선형 관계: kingman+womanqueen\text{king} - \text{man} + \text{woman} \approx \text{queen}

GloVe (Global Vectors)

Stanford의 Pennington et al.(2014)이 제안. 전체 코퍼스의 **동시 출현 행렬(Co-occurrence Matrix)**을 활용합니다. Word2Vec이 지역적 문맥만 사용하는 반면, GloVe는 전역 통계를 반영합니다. J=i,j=1Vf(Xij)(wiTw~j+bi+b~jlogXij)2J = \sum_{i,j=1}^{V} f(X_{ij})(w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij})^2

FastText

Facebook의 Bojanowski et al.(2017)이 제안. 단어를 n-gram 문자 조합으로 분해하여 임베딩합니다.
  • apple<ap, app, ppl, ple, le>
  • 장점: 미등록 단어(OOV) 처리 가능, 형태소가 유사한 단어 간 관계 학습

비교

모델학습 기반OOV 처리특징
Word2Vec지역 문맥불가빠른 학습, 의미 관계 포착
GloVe전역 통계불가전역+지역 정보 결합
FastText문자 n-gram가능형태론적 유사성 포착

정적 임베딩의 한계

Word2Vec, GloVe, FastText는 모두 정적(Static) 임베딩입니다. 단어가 어떤 문맥에서 사용되든 항상 같은 벡터를 반환합니다.
  • “bank”(은행) vs “bank”(강둑) → 같은 벡터
이 한계를 극복한 것이 BERT, GPT 등 Transformer 기반의 **문맥 임베딩(Contextual Embedding)**입니다.
GloVe는 Stanford NLP에서, FastText는 Facebook Research에서 다양한 언어의 사전학습 벡터를 제공합니다. 한국어의 경우 FastText 한국어 모델이나 KoNLPy + Word2Vec 조합을 사용할 수 있습니다.

체크리스트

  • Word2Vec의 Skip-gram과 CBOW 차이를 설명할 수 있다
  • GloVe가 전역 통계를 어떻게 활용하는지 이해한다
  • FastText가 OOV를 처리하는 원리를 안다
  • 정적 임베딩의 다의어 한계를 인식한다

다음 문서