← all posts
AI 2026.05.03 · 14 min read Advanced

FastText에서 ELMo까지 — 임베딩은 어떻게 문맥을 얻었는가

Word2Vec의 OOV 한계를 char n-gram 합산으로 돌파한 FastText부터, char-CNN과 biLSTM으로 같은 단어에 다른 벡터를 부여한 ELMo까지, 정적 임베딩이 문맥 임베딩으로 진화한 경로를 추적한다.


Word2Vec이 단어 하나에 벡터 하나를 고정 배정한다는 사실은, 익숙해지면 당연해 보인다. 그런데 “bank”라는 단어가 강변 옆에 있을 때와 계좌 이야기를 할 때 완전히 다른 벡터를 가져야 하지 않는가? 그리고 학습 중 한 번도 보지 못한 신조어는 영원히 <UNK>로 처리해야 하는가? 이 두 질문이 2017년부터 2018년 사이에 차례로 해결됐다.

정적 임베딩의 두 가지 균열

Word2Vec과 GloVe는 통계적으로 탁월하지만 설계 구조상 두 가지 균열이 있다. 첫째, 어휘 목록 밖의 단어(OOV)는 벡터가 없다. 둘째, 하나의 단어형에 하나의 벡터만 존재하므로 다의어를 구분할 수 없다.

한국어처럼 교착어에서는 첫 번째 문제가 훨씬 심각하다. 어간 “먹”에 어미가 결합하면 “먹다, 먹어, 먹었다, 먹으면, 먹을 것이다”처럼 수십 가지 word form이 생긴다. 어간 50,000개에 어미 100가지만 곱해도 어휘 규모가 영어의 30배를 넘는다. 이 단어들 각각에 독립 벡터를 학습하는 것은 데이터 효율 면에서 근본적으로 비합리적이다.

FastText — 단어를 char n-gram의 합으로

Bojanowski et al. 2017은 해결책을 단순하게 정의했다.

w=gGwg\vec{w} = \sum_{g \in G_w} \vec{g}

GwG_w는 단어 ww의 char n-gram 집합(경계 마커 <, > 포함)과 단어 자체의 합집합이다. 예를 들어 “where”는 n=3~5에서 <wh, whe, her, ere, re> 등의 n-gram과 <where> 전체 단어를 포함한다.

이 설계의 귀결 세 가지는 깔끔하게 연결된다.

OOV 처리: 학습 중 보지 못한 단어도 char n-gram이 존재하면 벡터를 만들 수 있다. 완전히 낯선 단어라도 부분적으로 학습된 n-gram 벡터의 합으로 reasonable한 표현을 얻는다.

형태론적 공유: “write”, “writer”, “writing”은 <wri, writ 같은 n-gram을 공유한다. 학습 없이도 이 공통 n-gram이 비슷한 벡터 방향을 만들어낸다.

희귀 단어 강화: 단어 자체는 드물게 등장해도 그 n-gram은 다른 단어들을 통해 자주 업데이트된다. 사실상 묵시적인 데이터 증강이다.

어휘 폭발을 막기 위해 n-gram을 해시 버킷 B2×106B \approx 2 \times 10^6에 매핑한다. 생일 역설로 계산하면 n-gram 100개, 버킷 200만 개일 때 충돌 확률은 약 0.25%로 품질 손실이 거의 없다.

Char n-gram range의 sweet spot

n=12는 신호가 너무 약하고, n>6은 단어 수준에 가까워져 OOV 이점이 사라진다. n=36이 형태소 크기와 비슷해 언어학적 직관과도 일치한다. 한국어처럼 짧은 형태소를 가진 언어에서는 n_min을 2로 낮추는 것이 더 효과적이다.

FastText 분류기 — 단순함의 ROI

Joulin et al. 2017은 같은 임베딩 위에 분류기를 올렸다. 구조는 극히 단순하다.

D=1Ti=1Twi,p(cD)=softmax(WD)\vec{D} = \frac{1}{T} \sum_{i=1}^T \vec{w_i}, \quad p(c \mid D) = \text{softmax}(W \vec{D})

단어 임베딩의 평균이 문서 벡터가 되고, 선형 레이어 하나가 분류를 담당한다. 연산 복잡도는 O(Td+Cd)O(T \cdot d + C \cdot d)로 CNN의 O(Tdkf)O(T \cdot d \cdot k \cdot f)나 LSTM의 O(Td2)O(T \cdot d^2)보다 압도적으로 낮다.

AG News, Amazon Reviews 등 8개 벤치마크에서 FastText는 심층 모델(char-CNN, VDCNN)과 평균 1~2% 격차를 보이면서 학습 속도는 100배 빠르다. “not good”과 “good not”을 동일 벡터로 표현하는 순서 무시 문제는 바이그램 특성을 추가해 부분 보완한다. bigram을 추가하면 Yelp Full Reviews에서 60.7% → 63.9%로 개선된다.

트레이드오프

FastText 분류기의 강점: 밀리초 단위 추론, 수백만 클래스 처리(계층적 소프트맥스), 학습 없이 즉시 사용 가능한 157개 언어 사전학습 벡터.

FastText 분류기의 약점: 단어 순서 무시(바이그램으로 부분 보완), 다의어 처리 불가(정적 임베딩의 한계), 복잡한 추론 태스크(NLI, QA)에서 BERT 대비 대폭 열세.

Char-CNN — n-gram을 CNN이 학습하다

Kim 2016은 고정된 패턴(n=36)이 아니라 CNN이 직접 char n-gram 특징을 학습하게 했다. 문자 임베딩 시퀀스 위에 필터 폭 k=17의 1D 합성곱을 적용하고, 각 필터의 최댓값(max-over-time pooling)을 이어 붙인 뒤 Highway Network로 통과시킨다.

w=HighwayNet(k=17maxitanh(W(k)[ei;;ei+k1]))\vec{w} = \text{HighwayNet}\left(\bigoplus_{k=1}^{7} \max_i \tanh(W^{(k)} \cdot [e_i; \ldots; e_{i+k-1}])\right)

FastText의 고정 합산과 달리 각 n-gram 패턴의 중요도를 필터가 학습한다. 접두사 un-, re-, 접미사 -ing, -tion 같은 형태소 패턴이 서로 다른 필터에 포착된다. 영어 char-CNN 언어 모델이 단어 수준 언어 모델과 동등한 perplexity를 달성하면서도 OOV 처리는 우수하다는 것이 이 논문의 핵심 결과다.

ELMo — 같은 단어, 다른 벡터

Peters et al. 2018은 char-CNN 위에 양방향 LSTM을 쌓아 정적 임베딩의 두 번째 균열, 즉 다의어 문제를 해결했다.

명제 1 · ELMo의 문맥 의존성

ELMo 임베딩은 동일 단어라도 문장이 달라지면 다른 벡터를 반환한다.

ELMo(w,S1)ELMo(w,S2)when context differs\text{ELMo}(w, S_1) \neq \text{ELMo}(w, S_2) \quad \text{when context differs}
▷ 증명

전방 LSTM은 p(wtw<t)p(w_t \mid w_{<t})를, 후방 LSTM은 p(wtw>t)p(w_t \mid w_{>t})를 학습한다. 각 레이어의 은닉 상태를 이어 붙인 표현 htl=[ht,l;ht,l]\boldsymbol{h}_t^l = [\boldsymbol{h}_t^{\rightarrow,l}; \boldsymbol{h}_t^{\leftarrow,l}]tt 위치의 주변 토큰에 의존한다. 따라서 같은 단어 ww라도 S1S_1S2S_2의 주변 토큰이 다르면 LSTM 상태가 달라져 출력 벡터가 다르다.

태스크에 투입될 때는 레이어별 표현을 학습 가중치로 조합한다.

ELMot=γl=0Lslhtl\text{ELMo}_t = \gamma \sum_{l=0}^{L} s_l \boldsymbol{h}_t^l

NER에서는 하위 레이어(형태·통사 정보)가 지배적이고, 감성 분석에서는 상위 레이어(의미 정보)가 지배적이라는 분석은 Transformer 시대의 BERTology 연구로 직접 이어진다.

ELMo는 2018년 CoNLL NER에서 F1 90.9 → 92.2, SQuAD에서 F1 85.6 → 88.7의 체계적 향상을 보였다. 그러나 6개월 뒤 BERT가 등장했다. ELMo의 전방·후방 LSTM 분리 학습은 “근사적 양방향”이다. 마스크드 언어 모델은 정보 누수 없이 진짜 양방향 문맥을 학습한다. Transformer의 병렬성과 규모 확장성이 더해져 BERT는 GLUE에서 ELMo의 71점을 82점으로 끌어올렸다.

정리

  • FastText의 핵심은 w=gGwg\vec{w} = \sum_{g \in G_w} \vec{g}다. n-gram 공유가 OOV 처리와 형태론적 유사성을 동시에 해결한다.
  • 한국어처럼 어휘 폭발이 심한 교착어에서 FastText의 우위가 더 크게 나타난다. Bojanowski 2017의 체코어·러시아어·터키어 실험이 이를 뒷받침한다.
  • Joulin 2017의 “단순함의 ROI” — 선형 분류기 위의 단어 평균이 CNN·LSTM과 1~2% 격차다. 지연 시간이 중요하거나 클래스가 수백만 개인 상황에서 FastText는 여전히 유효한 선택이다.
  • ELMo는 정적 임베딩의 다의어 맹점을 문맥 의존 표현으로 해결한 첫 대규모 성공이다. “사전학습 → 다운스트림” 패러다임을 확립한 것이 아키텍처 자체보다 더 큰 기여다.

이 시리즈의 다음 단계는 BERT와 GPT다 — 마스크드 언어 모델이 “진짜 양방향”을 어떻게 달성하는지, 그리고 왜 GPT는 단방향을 고집하는지.

REF
Bojanowski et al. · 2017 · Enriching Word Vectors with Subword Information · TACL
REF
Peters et al. · 2018 · Deep Contextualized Word Representations · NAACL