문제는 여전히 분모다. full softmax의 ∇logp(wO∣wI)는 O(V)이고, 계보 ②의
hierarchical softmax는 O(logV)까지 줄였지만 Huffman 트리 구조에 품질이 좌우되고,
트리라는 자료구조 자체가 구현/병렬화에 부담이다.
이 논문의 관점 전환: 애초에 정규화된 확률분포가 필요한가?
목적이 언어모델이 아니라 좋은 벡터라면, “진짜 쌍을 노이즈에서 구분”만 잘해도 된다.
참고로 Skip-gram이 학습하는 것의 직관: vwI와 vwO′의 내적이 로그 동시등장 통계를 근사하도록
밀어붙이는 것이다. 이 직관은 [6]절의 additive compositionality와, 이후 Levy & Goldberg의 PMI 분해 정리로
정확해진다.
[2] Negative Sampling (NEG)
2.1 Objective
(중심 wI, 문맥 wO) 쌍 하나에 대해, 노이즈 분포 Pn(w)에서 뽑은 k개의 가짜 단어와 함께
k+1개의 이진 분류를 푼다. softmax의 logp(wO∣wI) 자리를 다음 식이 대체한다.
쌍 하나당 내적 k+1번 + 벡터 덧셈 k+2번. 분기도 트리도 없어서 구현이 수십 줄이고,
비동기 병렬(HogWild 스타일 lock-free SGD)로도 잘 돈다. 이 단순함이 word2vec 툴킷이
어디서나 돌아가는 이유다. ■
NCE에서 NEG가 유도되는 과정 펼치기/접기
출발점은 NCE(Noise Contrastive Estimation, Gutmann & Hyvärinen 2012; LM 적용은 Mnih & Teh 2012)다.
데이터 쌍 1개와 노이즈 쌍 k개가 섞여 있을 때, 어떤 쌍 (wI,w)가 데이터에서 왔을 사후확률은
P(D=1∣w,wI)=p(w∣wI)+kPn(w)p(w∣wI)
NCE는 이 이진 분류의 log likelihood를 최대화하며, k→∞에서 원래 softmax LM의
MLE와 일치한다는 이론적 보장이 있다. 이때 p(w∣wI) 자리에 모델의 비정규화 점수exp(vw′⊤vwI)를 넣고 정규화 상수는 1로 취급해도 잘 동작한다는 것이 알려져 있었다.
NEG는 여기서 kPn(w) 항을 통째로 버린 단순화다. 즉
P(D=1∣w,wI)=σ(vw′⊤vwI)
로 두고 이진 cross-entropy를 최대화한다. 본문 objective가 정확히 이것이다.
대가: NCE가 갖던 “softmax MLE로의 수렴” 보장이 사라진다. 즉 NEG는 더 이상 언어모델 학습이 아니다.
논문의 입장은 명확하다 — 목적이 벡터 품질이라면 그 보장은 필요 없고, 실험적으로 NEG가 NCE보다
벡터 품질이 좋다. ■
[3] Subsampling of Frequent Words
“the”, “in” 같은 초고빈도 단어는 정보량이 적은데 학습 쌍의 대부분을 차지한다.
(“France–the” 쌍은 “France–Paris” 쌍보다 훨씬 흔하지만 아무것도 안 가르쳐준다)
그리고 방향이 반대인 문제도 있다 — 고빈도 단어의 벡터는 수백만 번의 업데이트 후에는
더 이상 변하지 않는다. 그 뒤의 학습량은 순수 낭비다.
해법: 각 단어를 다음 확률로 학습 전에 버린다. (f(w): 단어 빈도, 임계값 t≈10−5)
P(discard∣w)=1−f(w)t
f(w)≤t인 단어는 보존되고, 그 이상은 빈도의 제곱근에 반비례해 남는다. 빈도 순위는 유지하면서
분포만 평탄화하는 공격적인 heuristic이다.
효과가 이중이다:
학습해야 할 토큰 수 자체가 줄어 2~10배 가속.
고빈도 단어가 시퀀스에서 사라진 자리만큼 유효 문맥 윈도우가 넓어진다 —
“the”가 빠진 자리 너머의 내용어(content word)들이 서로의 문맥이 되면서, 특히 희귀 단어 벡터의
품질이 정확도로 확인될 만큼 올라간다.
수치 예시: f("the")≈0.07, t=10−5이면 보존 확률 t/f≈1.2%.
“the”의 학습 쌍이 1/80로 줄어든다.
[4] 실험 — 방법끼리 비교
4.1 세팅
데이터: 내부 Google News 코퍼스 약 10억 단어. 빈도 5회 미만 단어 제거 후 vocabulary 692K.
함께 등장하는 빈도가 각자 등장 빈도 대비 높으면(임계값 초과) 구로 병합한다. δ는 초저빈도 쌍이
뽑히는 것을 막는 discount 항이다.
임계값을 낮춰가며 2~4회 반복 실행하면 이미 병합된 구가 다시 병합되어 더 긴 구
(“san francisco giants”)도 만들어진다.
이렇게 학습한 phrase까지 포함한 vocabulary는 수백만 토큰 규모가 된다.
5.2 Phrase Analogy 평가
phrase 버전 analogy 테스트셋을 새로 만들었다. 예: “New York : New York Times = Baltimore : Baltimore Sun”,
“Boston : Boston Bruins = Montreal : Montreal Canadiens”.
3만 개 이상 자주 등장하는 phrase로 구성. 결과 (300차원, 10억 단어):
방법
subsampling 없음
subsampling t=10−5
NEG-5
24% 수준
27% 수준
NEG-15
27% 수준
42% 수준
HS-Huffman
19% 수준
47% 수준
재밌는 역전: 단어 실험에서 밀리던 HS가 subsampling과 결합하면 phrase에서는 최강이 된다.
어떤 방법이 절대 우위가 아니라 태스크/세팅 의존적이라는 정직한 보고.
스케일을 밀어붙여 33B 단어 + 1000차원으로 학습하면 phrase analogy 정확도가 72% 까지 오른다.
데이터 스케일이 여전히 가장 큰 지렛대라는 결론.
5.3 Phrase 최근접 이웃 예시
Phrase
최근접 이웃
New York Times
Baltimore Sun, Toronto Star, LA Times
Steve Ballmer
Larry Page, Sergey Brin (동종 CEO/창업자들)
Boston Bruins
Montreal Canadiens, Buffalo Sabres (같은 리그 팀들)
Air Canada
Lufthansa, Delta Air Lines
[6] Additive Compositionality
단어 벡터의 덧셈이 의미의 AND처럼 동작하는 현상을 정리했다.
벡터 합
최근접 결과
vec(Russia) + vec(river)
Volga River
vec(Germany) + vec(capital)
Berlin
vec(Czech) + vec(currency)
koruna
vec(Vietnam) + vec(capital)
Hanoi
vec(French) + vec(actress)
Juliette Binoche
왜 되는가에 대한 논문의 설명: Skip-gram의 학습 목표 때문에 단어 벡터는 그 단어의 문맥 분포의 로그와
선형적으로 연결된다. 벡터 덧셈은 로그의 덧셈 = 두 문맥 분포의 곱에 대응하고, 분포의 곱은
“두 단어 모두와 잘 어울리는 문맥”만 남기는 AND 필터처럼 동작한다.
이 직관은 이듬해 Levy & Goldberg에 의해 정리로 승격된다 (아래 계보 참고).
[7] 기존 공개 임베딩과의 비교
당시 공개돼 있던 임베딩들(Collobert & Weston, Turian, Mnih의 벡터)과 희귀 단어 포함 최근접 이웃을
정성 비교한다. 예를 들어 “redfish”, “czarist” 같은 저빈도 단어에서:
기존 임베딩: 관련성이 약한 이웃들이 섞여 나옴.
SGNS(30B 단어 학습, phrase 포함): “czarist → czar, tsarist, imperial russia” 식으로 일관된 이웃.
포인트는 모델 구조의 우위 주장이 아니라 “단순한 모델로 30B 단어를 학습할 수 있다는 것 자체” 가
품질 우위의 원천이라는 것. 기존 방법들은 그 규모의 데이터를 물리적으로 소화할 수 없었다.
[8] 계보 — 어디서 왔고 어디로 갔나
영향 받은 것
← word2vec 계보 ② (2013.1):
Skip-gram 구조와 “벡터가 목적” 관점을 그대로 가져와서, ②의 hierarchical softmax를 NEG로 교체하고
subsampling/phrase를 얹었다. ②의 “표현력 낮춰서 데이터 키우기” 노선을 한 단계 더 밀어붙인 것.
← NCE (Gutmann & Hyvärinen 2012, Mnih & Teh 2012): NEG의 이론적 모체. [2]절 접기 증명 참고.
← Mikolov 박사논문 (2012):
“softmax 정규화가 병목”이라는 문제의식의 최종 해법이 이 논문의 NEG다.
(class 분해 → hierarchical softmax → 정규화 포기(NEG) 순서로 진화한 셈)
후속 연구에 준 영향
→ 이론적 재해석 (Levy & Goldberg, NIPS 2014): SGNS가 암묵적으로 shifted PMI 행렬을 분해하는 것과
동치임이 증명됐다.
vc′⊤vw=PMI(w,c)−logk=logP(w)P(c)P(w,c)−logk
신경망 임베딩과 전통 카운트 기반 방법(LSA 계열)이 같은 뿌리라는 것이 밝혀지면서
임베딩 이론 연구의 문을 열었다. [6]절의 “덧셈 = 분포 곱” 직관도 이 틀에서 정확해진다.
→ GloVe (Pennington et al. 2014): 전역 co-occurrence 통계를 명시적으로 쓰는 대안으로 등장,
word2vec과 함께 정적 임베딩의 양대 표준이 됐다.
→ everything2vec: “co-occurrence가 있는 곳엔 SGNS를 쓸 수 있다”는 레시피가 도메인을 넘어 퍼졌다 —
doc2vec(문서), item2vec(추천), node2vec/DeepWalk(그래프), prod2vec(상품) 등.
negative sampling 자체도 추천/검색/contrastive learning의 표준 부품이 됐다.
→ 문맥적 임베딩으로: 정적 벡터의 한계(다의어가 벡터 하나로 뭉개짐)가 ELMo, 그리고
Transformer 기반 BERT/GPT의 문맥적 표현으로 이어지는 동기가 된다.
Reference
[1] T. Mikolov et al., “Efficient Estimation of Word Representations in Vector Space” (ICLR Workshop 2013)
[2] M. Gutmann & A. Hyvärinen, “Noise-contrastive estimation of unnormalized statistical models” (JMLR 2012)
[3] A. Mnih & Y. Teh, “A fast and simple algorithm for training neural probabilistic language models” (ICML 2012)
[4] O. Levy & Y. Goldberg, “Neural Word Embedding as Implicit Matrix Factorization” (NIPS 2014)
[5] J. Pennington et al., “GloVe: Global Vectors for Word Representation” (EMNLP 2014)