AI/자연어처리(NLP)

[NLP 논문] Distributed Representations of Words and Phrasesand their Compositionality

CSE 2025. 11. 20. 21:57

아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.

읽은 논문들 정리


이전 논문 리뷰와 마찬가지로 이 논문도 스탠포드 강의 1강에서 읽을거리로 언급되었다.

2025.11.19 - [논문읽기] - [NLP 논문] Efficient Estimation of Word Representations inVector Space

 

[NLP 논문] Efficient Estimation of Word Representations inVector Space

2025.11.10 - [자연어처리(NLP)] - [NLP 이론] Stanford CS224N - Lecture 1 : Intro and Word Vectors [NLP 이론] Stanford CS224N - Lecture 1 : Intro and Word Vectors친구와 같이 스탠포드 대학교의 자연어처리(NLP) 수업을 들어보기

april2901.tistory.com

이전 논문은 word2vec이 나온 배경과, 이 모델에 대한 소개가 주된 내용이었고,

이번 논문은 negative sampling에 대한 내용이다.

 


1. Introduction

이전 논문에서 얘기한 Skip-gram과 Continuous Bag-of-Words (CBOW) 모델은 복잡한 비선형 연산을 제거함으로써 학습 속도를 향상시켰지만, 여전히 전체 단어에 대한 확률을 softmax를 사용해 계산해야했다.


이 논문은 이러한 계산 복잡도 문제를 해결하기 위해 Negative Sampling이라는 최적화 기법을 도입하고, 자주 등장하는 단어들의 정보량 부족 문제를 Subsampling을 통해 해결함으로써, 수백억 개의 단어로 구성된 초대형 코퍼스에서도 고품질의 벡터를 효율적으로 학습이 가능하도록 만든 방법을 설명한다. 


2. The Skip-Gram Model

skip-gram모델은 중심 단어로 주변 문맥 단어를 예측하는 것이다.

스탠포드 강의 정리 글에서도 다뤘던 식을 다시 보자.

Skip-gram의 목표는 아래 값을 최대화하는 것이다.

c는 context window 크기, w_t는 중심단어

즉, 중심단어가 주어졌을 때 window안의 모든 단어의 등장 확률을 높이는 것이다.

기본적인 skip-gram은 $P(w_{t+j} | w_t)$를 아래처럼 정의한다.

여기서 문제는 분모이다. 

단어 규모가 매우 크면 분모를 계산하는데만 많은 시간이 소요된다.

 


2.1. Hierarchical Softmax

그래서 기존의 방법에서는 대안으로 계층적 softmax를 사용했다.

binary tree구조를 활용해 복잡도를 $O(W)$에서 $O(\log_2 W)$로 줄일 수 있었다.

 

이 트리구조는 모든 단어를 leaf node로 가지는 binary tree이다.

주로 빈도가 높으면 root에 가깝게 배치하는 huffman tree를 사용한다.

 

어떤 단어를 $w$라고 하면, $n(w,j)$는 root에서 $w$로 가는 길의 j번째 node를 의미한다.

$L(w)$는 이 경로의 길이이다.

$ch()$는 괄호 안의 노드의 임의의 자식노드를 의미한다.

[[ ]]는 if문같은 것인데, true면 1, 아니면 -1의 값을 가진다.

 

여기서 [[ ]]안을 해석해보면 j번째 노드의 입장에서 자신의 자식을 하나 가져오고 그게 정답경로의 j+1번째 노드라면(=자신이 가야할 바로 다음 노드) 1을 아니라면 -1을 반환하는 것이다.

 

따라서 식은 아래처럼 요약설명된다.

"어떤 단어에 대한 확률$P(w|w_I)$은 root에서 해당 단어가 있는 leaf까지 가는 길에 있는 internal node 마다의 이진 분류 확률을 곱해서 얻을 수 있다."

이 계층적 softmax는 좋지만, huffman tree의 빈도 기준 구성이 의미론적 유사성을 잘 반영하지 못하고, 곧 볼 negative sampling 보다 빈번한 단어/의미유추에서는 성능이 좋지 않다.


2.2. Negative Sampling

먼저 Noise Contrastive Estimation(NCE)에 대해 좀 알아야한다.

이 NCE의 아이디어는 실제 데이터에서 추출된 샘플을 일부러 만든 오답데이터인 noise으로부터 구별할 수 있는 Logistic Regression을 학습시키는 것이다.

 

이 NCE를 수학적으로 조금 단순하게 바꾼 Negative sampling(NEG)를 만들었다.

이 Negative Sampling은 다중클래스 분류→이진분류 로 문제를 바꾼다.

즉, "전체 단어 중 정답단어는 무엇인가?" → "이 단어쌍이 실제로 같이 나오는가 안나오는가?" 로 바꾸는 것이다.

 

첫번째 항은 관측된 단어 쌍 $(w_I, w_O)$에 대해 모델이 '진짜(True)'라고 예측할 확률을 최대화하는 것이다.

두번째 항은 잡음 분포 $P_n(w)$에서 추출한 $k$개의 가짜 단어 $w_i$들에 대해 모델이 '가짜(False)'라고 예측할 확률을 최대화한다.

시그모이드 안에 - 를 넣어서 구현했다.

 

<k 값 선정>

작은 데이터 셋 : 5~20

큰 데이터 셋 : 2~5

논문은 위처럼 데이터셋의 규모에 따라 다른 값을 추천한다.

 

이 방식은 매 훈련 단계마다 전체 어휘 $W$가 아닌 $k+1$개의 단어에 대해서만 가중치를 업데이트하면 되므로, 계산 복잡도를 $O(W)$에서 $O(k)$로 크게 감소시킨다.

 

<잡음 분포 $P_n(w)$>

단어의 빈도를 그대로 사용해 샘플을 추출할 경우, 'the', 'a', 'of'와 같은 고빈도 단어들이 부정 샘플로 지나치게 자주 선택되는 문제가 있다.

그렇다고 모든 단어의 빈도를 동일하게 취급하면 너무 희귀한 단어들이 많이 선택되는 문제가 생긴다.

 

이후 실험으로 3/4제곱을 실제 빈도에 취하는 것이 최적의 결과를 낸다는 것을 발견했다.

이렇게 하면 고빈도 단어는 상대적으로 적게, 저빈도 단어는 상대적으로 빈도가 높게 나오게 된다.

 

 


2.3 Subsampling of Frequent Words

너무 빈번한 단어들을 제거하는 subsampling기법이 있다.

여기서 $f(w_i)$는 단어의 빈도이고, $t$는 임계값(threshold, 보통 $10^{-5}$ 정도)이다.

단어의 빈도가 t를 넘으면 $P(w_i)$값은 0~1사이의 값을 가진다.

이 $P(w_i)$는 단어를 삭제할 확률을 의미한다.

 

이 방법은 단순히 단어를 줄여 학습을 빠르게 하는 것을 넘어서는 장점이 있다.

'the'같은 단어가 빠지면서 이 단어의 좌우에 있던 단어가 인접하게 된다.

이는 context window가 커지는 효과를 가지게 된다.

 


3. Empirical Results

이 부분에서는 Hierarchical Softmax(HS), Noise Contrastive Estimation(NCE), Negative Sampling(NS), 단어 빈도 기반 Subsampling이 Skip-gram 모델 성능에 미치는 영향을 평가한다.

 

평가방식은 단어 유추(analogical reasoning)방식이다.

“ Germany : Berlin :: France : ? ”같은 문제를 푸는 것이다.

 

 

아래 표를 통해 평가 결과를 볼 수 있다.

 

Negative Sampling이 HS보다 더 높은 성능을 보였고 NCE보다도 약간 더 좋다.

빈도 높은 단어의 Subsampling은 학습 속도를 몇 배 향상시키고 단어 벡터의 품질도 눈에 띄게 향상시킨다.


4. 구(Phrase) 학습

여러 단어가 붙어서 의미를 이루는 '구'는 여태까지의 모델에서 해결되지 않는다.

단어 하나하나를 따로따로 분석해서 학습하기 때문이다.

 

논문은 해결책으로 꽤 단순한 방법을 제안했다.

두 단어 $w_i, w_j$ 같이 등장하는 빈도를 계산하는 방식이다.

$\delta$는 discounting coefficient라고 불리는데 별 관련 없는 단어가 우연히 붙은 경우는 제외해주기 위해 존재한다.

 

이 학습은 여러번 반복될 수 있다.

new 와 york이 더해져 new york라는 단어가 되고, 다음번 학습에서 new york times가 나올 수 있다.

 


5. Additive Compositionality

이 word2vec이 유명해진 이유는 벡터연산이 성립한다는 것일 것이다.

$$v(\text{King}) - v(\text{Man}) + v(\text{Woman}) \approx v(\text{Queen})$$

이런 연산이 가능하다는 것이 단어의 의미관계가 학습된다는 것을 의미한다.

 

아래 표는 두 단어를 더한 벡터와 가장 가까운 벡터 4개를 나타낸 것이다.

 

<직관적 설명>

이 논문의 저자들은 이런 현상이 발생하는 이유를 skip-gram의 목적 함수와 관련지어 설명한다.

두 단어 벡터의 합은 두 단어의 문맥 분포(Context distribution)의 곱(Product)과 관련이 있다고 설명하고,

이게 논리 연산의 'AND' 작용을 하기 때문이라는 해석이다.

 

 

AND 속성 때문에 아래처럼 된다.

두 단어가 모두 높은 확률을 주는 단어 → 높은 값

한 단어라도 낮은 확률을 주는 단어 → 낮은 값