Skip to main content

등장 배경 — “단어를 숫자로 표현하는 방법”의 진화

통계적 NLP의 가장 큰 한계는 단어를 이산적 기호(discrete symbol) 로 취급한 것입니다. “고양이”와 “강아지”는 의미적으로 가까운데, 컴퓨터에게는 완전히 다른 ID일 뿐이었습니다.
One-Hot Encoding (기존):
  고양이 = [1, 0, 0, 0, 0, ...]   ← 5만 차원
  강아지 = [0, 1, 0, 0, 0, ...]   ← 완전히 다른 벡터, 유사도 = 0

Distributed Representation (목표):
  고양이 = [0.2, 0.8, -0.1, 0.5]   ← 저차원, 의미 내포
  강아지 = [0.3, 0.7, -0.2, 0.6]   ← 유사한 벡터, 유사도 ≈ 0.95

NNLM — Neural Network Language Model (Bengio, 2003)

Yoshua Bengio의 2003년 논문 “A Neural Probabilistic Language Model”은 단어를 저차원 연속 벡터(임베딩) 로 표현하는 아이디어를 최초로 실용화했습니다. NNLM의 핵심 기여와 한계를 요약합니다.
항목내용
핵심 아이디어단어마다 학습 가능한 벡터를 부여하고, 신경망으로 다음 단어를 예측
혁신비슷한 문맥에서 등장하는 단어는 비슷한 벡터를 갖게 됨
한계학습이 매우 느림 (대규모 데이터 처리 어려움)

Word2Vec (Mikolov et al., Google, 2013)

NLP 역사상 가장 영향력 있는 논문 중 하나입니다. 단순한 얕은 신경망 으로 고품질 단어 임베딩을 매우 빠르게 학습할 수 있음을 보여주었습니다.

두 가지 학습 방식

Word2Vec은 두 가지 서로 다른 방향의 예측 방식을 제공하며, 실무에서는 Skip-gram 이 더 널리 사용됩니다.
방식원리예시
CBOW(Continuous Bag of Words)주변 단어들로 가운데 단어를 예측”오늘 ___ 좋다” → “날씨가”
Skip-gram가운데 단어로 주변 단어들을 예측”날씨가” → “오늘”, “좋다”

놀라운 발견 — 벡터 산술

king - man + woman ≈ queen
Paris - France + Korea ≈ Seoul
단어 벡터 사이의 덧셈/뺄셈으로 의미적 관계 가 포착된다는 사실은 큰 충격이었습니다. 이는 임베딩이 단순한 연관성이 아닌, 추상적 의미 구조를 학습했다는 증거입니다.

Distributional Hypothesis 심화

Word2Vec의 이론적 기반은 영국 언어학자 J.R. Firth(1957) 의 유명한 명제입니다:
“You shall know a word by the company it keeps.” (단어의 의미는 그 단어가 함께 등장하는 단어들에 의해 결정된다.)
이것이 분포 가설(Distributional Hypothesis) 입니다. 놀라운 점은 인간도 정확히 이 방식으로 단어를 학습한다 는 것입니다.
아이가 "멍멍이"라는 단어를 처음 들을 때:
  "멍멍이가 꼬리를 흔든다" → 동물?
  "멍멍이에게 밥을 줬다" → 먹는 존재?
  "멍멍이가 짖는다" → 소리를 내는 동물!

→ "멍멍이"의 의미를 정의를 읽어서가 아니라, 등장 문맥에서 추론
→ Word2Vec이 정확히 이 과정을 수학적으로 구현
분포 가설이 중요한 이유는, 단어의 의미를 인간이 수동으로 정의하지 않아도 데이터에서 자동으로 추출 할 수 있다는 가능성을 열었기 때문입니다. 이는 규칙 기반에서 데이터 기반으로의 전환을 이론적으로 뒷받침한 핵심 아이디어입니다.

Word2Vec이 NLP를 바꾼 3가지 이유

Word2Vec은 단순히 “좋은 임베딩”을 만든 것이 아닙니다. NLP 연구의 방법론 자체 를 바꿨습니다. 1) 전이 학습(Transfer Learning)의 시작 Word2Vec 이전에는 모든 NLP 태스크를 처음부터(from scratch) 학습해야 했습니다. Word2Vec 이후에는 대규모 코퍼스로 사전학습한 임베딩을 다운로드하여 자신의 태스크에 재활용할 수 있게 되었습니다.
이전: 감성 분석 모델 → 자체 데이터로 단어 표현부터 학습 (데이터 수만 건 필요)
이후: Google의 사전학습 Word2Vec 다운로드 → 감성 분류 층만 학습 (데이터 수백 건으로도 가능)
이 “사전학습 → 재활용” 패턴이 이후 ELMo → BERT → GPT로 이어지는 사전학습 시대의 원형 입니다. 2) 연산 효율성 — Negative Sampling Bengio의 NNLM(2003)은 어휘 전체(수만~수십만 단어)에 대한 softmax를 계산해야 해서 매우 느렸습니다. Word2Vec은 Negative Sampling 기법으로 이를 해결했습니다.
전체 어휘에 대한 softmax:  60,000개 단어 모두 확률 계산 → 매우 느림
Negative Sampling:        정답 1개 + 무작위 오답 5~20개만 비교 → 1000배 이상 빠름
이 효율성 덕분에 Word2Vec은 수십억 단어 규모의 코퍼스에서도 학습이 가능했고, 이것이 고품질 임베딩의 핵심이었습니다. 3) 벡터 산술이 보여준 “의미 공간”의 존재 king - man + woman ≈ queen이라는 결과는 단순한 트릭이 아닙니다. 이것은 단어들이 구조화된 의미 공간에 배치된다 는 증거입니다. “남성→여성” 방향, “단수→복수” 방향, “현재→과거” 방향이 벡터 공간에 일관되게 존재합니다. 이 발견은 언어의 의미 구조를 기하학적으로 표현할 수 있다는 가능성을 보여주었습니다.

한국어 Word2Vec 실험

Word2Vec의 벡터 산술은 한국어 코퍼스에서도 작동합니다.
한국어 Word2Vec 벡터 산술 결과:
  서울 - 한국 + 일본 ≈ 도쿄       (수도 관계)
  삼성 - 한국 + 미국 ≈ 애플       (대표 기업 관계)
  아버지 - 남자 + 여자 ≈ 어머니    (성별 관계)
다만 한국어에는 고유한 도전이 있습니다. 한국어는 교착어 로, 어근에 다양한 조사와 어미가 붙습니다.
"먹다", "먹고", "먹었다", "먹을까" → Word2Vec은 모두 다른 단어로 취급!
→ 어휘 크기가 폭발적으로 증가 → 각 형태별 학습 데이터 부족
이 문제를 해결한 것이 fastText(Bojanowski et al., Facebook, 2017)입니다. fastText는 단어를 문자 N-gram의 합 으로 표현하여, 학습 시 보지 못한 형태소 변형도 처리할 수 있습니다.
fastText: "먹었다" = [먹, 먹었, 었다, 다] 의 벡터 합
→ "먹"이 공통으로 들어있으므로, "먹다"와 유사한 벡터 유지
→ 한국어처럼 형태 변화가 풍부한 언어에서 특히 유용

GloVe (Pennington et al., Stanford, 2014)

Global Vectors for Word Representation. Word2Vec이 로컬 문맥(주변 N개 단어)만 보는 반면, GloVe는 전체 코퍼스의 동시 출현 행렬(co-occurrence matrix) 을 활용합니다. 두 접근법의 핵심 차이를 비교합니다.
비교Word2VecGloVe
학습 방식예측 기반 (predictive)통계 기반 (count-based)
활용 정보로컬 문맥 윈도우전체 코퍼스 통계
속도대규모 코퍼스에서 빠름행렬 분해 한 번으로 학습
결과 품질비슷한 수준비슷한 수준

성과와 한계

단어 임베딩 시대는 NLP의 패러다임을 근본적으로 전환했지만, 문맥을 무시한다 는 치명적 한계가 남아 있었습니다. 이 한계가 바로 다음 세대(ELMo, BERT)를 이끄는 원동력이 됩니다.
성과한계
단어를 의미 있는 벡터로 표현 (NLP의 패러다임 전환)다의어 처리 불가: “배” → 과일? 선박? 신체 부위? 하나의 벡터만 가짐
전이 학습의 시작 — 사전학습된 임베딩을 다운스트림 태스크에 활용문장/문서 수준 표현 부재: 단어 벡터의 단순 평균은 의미를 정확히 담지 못함
후속 모든 NLP 연구의 기반이 됨문맥 무시: 동일 단어는 어떤 문장에서든 같은 벡터
주의 다의어 문제의 심각성: “나는 배가 고프다” vs “나는 배를 타고 갔다” — Word2Vec에서 “배”는 두 문장 모두에서 동일한 벡터입니다. 이 문제를 해결한 것이 바로 문맥 임베딩(Contextual Embedding), 즉 ELMo → BERT로 이어지는 흐름입니다.

서브워드 토큰화 — BPE (Byte Pair Encoding)

Word2Vec과 GloVe는 강력했지만, 한 가지 고질적인 문제가 남아 있었습니다: OOV(Out-of-Vocabulary) 문제. 학습 시 한 번도 보지 못한 단어는 처리할 수 없었습니다.
학습 데이터에 있는 단어:  happy, unhappy, happiness
학습 데이터에 없는 단어:  unhappiness → ??? (OOV — 벡터 없음!)

문제: 신조어, 전문 용어, 오타 등이 모두 처리 불가

BPE의 핵심 원리 (Sennrich et al., 2016)

BPE는 문자(character) 수준에서 시작 하여, 가장 빈번한 문자 쌍을 반복적으로 병합 해 나가는 방식입니다.
1단계: 모든 단어를 문자로 분해
   "unhappiness" → [u, n, h, a, p, p, i, n, e, s, s]

2단계: 가장 빈번한 문자 쌍을 병합 (반복)
   (s, s) → ss    [u, n, h, a, p, p, i, n, e, ss]
   (p, p) → pp    [u, n, h, a, pp, i, n, e, ss]
   (h, a) → ha    [u, n, ha, pp, i, n, e, ss]
   (ha, pp) → happ [u, n, happ, i, n, e, ss]
   (n, e) → ne    [u, n, happ, i, ne, ss]
   (ne, ss) → ness [u, n, happ, i, ness]
   (happ, i) → happi [u, n, happi, ness]
   (u, n) → un    [un, happi, ness]

최종 결과: "unhappiness" → ["un", "happi", "ness"]
각 서브워드 조각(“un”, “happi”, “ness”)은 의미를 가진 단위 입니다. “un-”은 부정, “happi”는 행복, “-ness”는 명사화 접미사.

한국어에서의 BPE

"데이터브릭스" → ["데이터", "브", "릭", "스"]  또는  ["데이터", "브릭스"]
"데이터엔지니어" → ["데이터", "엔지니어"]  ← "데이터" 토큰 재활용!

영어 대비 한국어의 차이:
  "Databricks" → ["Data", "bricks"]       ← 2토큰
  "데이터브릭스" → ["데이터", "브", "릭", "스"] ← 4토큰 (토큰 효율성 낮음)

BPE 변형과 현재

BPE의 기본 아이디어를 발전시킨 여러 변형 알고리즘이 등장했으며, 현재 주요 LLM에서 사용 중인 토큰화 방식은 다음과 같습니다.
알고리즘개발사특징사용 모델
BPESennrich et al.빈도 기반 병합GPT-2, GPT-3, GPT-4
WordPieceGoogle우도(likelihood) 기반 병합BERT, DistilBERT
SentencePieceGoogle언어 독립적, 공백도 토큰화T5, Llama, ALBERT
UnigramKudo (2018)확률적 서브워드 선택XLNet, mBART
성공 현대 LLM과의 연결: 오늘날 모든 주요 LLM(GPT-4, Claude, Llama, Gemini)은 BPE 또는 그 변형을 사용합니다. Word2Vec 시대의 “단어 단위” 처리에서 BPE의 “서브워드 단위” 처리로의 전환은, 단어 임베딩 시대와 Transformer 시대를 잇는 중요한 다리입니다. OOV 문제 해결 없이는 범용 언어 모델이 불가능했을 것입니다.