Vector Semantics

2019. 12. 4. 16:16nlp

반응형

1) word sense : 단어의 의미

2) synonym (ex) couch와 sofa

* principle of contrast : 형태 다르면 의미도 다르다 

3) word similarity (ex) dog와 cat 

3) relatedness (또는 association) (ex) cup과 coffee

4) lexical fields (어휘장) (ex) 의사와 매쓰 

 

단어의 의미란? 단어의 사용(use), 즉 문맥에 따라 달라진다.

(ex) Labov : 컵이란 무엇인가?

 

∴ 단어의 의미는 neighboring word를 통해 알 수 있다. "한 단어 = 그 단어의 이웃 단어를 벡터로 나타낸 것" 

 

 

[ Vector Semantics ]

1. Long, sparse vector : count로 벡터 만듦

1.1. Tf-idf (Term frequency-Inverse document frequency) 

1.2. PPMI (Positive Pointwise Mutual Information)  

 

2. Short, dense vector : binary classifier(이웃 단어냐 아니냐)의 weight로 벡터 만듦 

2.1. Word2Vec : CBOW(Continuous Bag Of Words), Skip-gram

2.2. Fasttext

2.3. Glove

 


 

1. Long, sparse vector

 

1.1. Tf-idf

 

두 단어(또는 두 벡터)의 유사성 계산하기 < Cosine Similarity > 

- 두 벡터를 내적하여 유사성 구함 (같은 방향을 향하면 유사한 단어)

- 두 벡터의 길이로 나눠 표준화 (길이로 나누지 않으면 빈도 높은 단어가 온갖 단어랑 다 similarity 매우 높음)

- 각 벡터의 요소들은 모두 frequency, 따라서 0 이상. 그러므로 cosine 값은 0과 1 사이 

- 0이면 의미 유사하지 않음, 1일수록 의미 유사한 단어 

그러나 단순 빈도는 효과적이지 않음. 

Frequency Paradox : 빈도 높은 단어일수록(많이 쓰이는 단어일수록) 별 의미 없다 (ex) a, the

 

Tf-idf = tf * idf

* idf는 흔히 쓰이는 단어일수록 0에 가까워지고, 잘 안 쓰이는 단어일수록 값이 커짐

빈도 100이라고 100배 더 likely하지 않으므로 log 취함. +1 한 이유는 log 진수는 0이 될 수 없기 때문
전체 글 개수 / 특정 단어를 갖고 있는 글 개수

 

1.2. PPMI 

 

x는 word, y는 context

두 단어가 독립적이라고 가정했을 때보다 둘이 같이 등장하는 경우가 더 많은가? 

 

PMI 값이 음수면 해석 어려움. 그래서 음수면 다 0으로 퉁치자 → PPMI

 

PPMI의 문제점 

1) 두 단어가 완전 독립일 경우 : 분자 P(x,y) = P(x) * P(y), 분모와 같음 ∴ PMI 값이 0이 됨 

2) 두 단어가 완전 종속일 경우 : 분자 P(x,y) = P(x) ∴ PMI 값은  log(1/P(y)) → y의 빈도가 낮을수록 PMI값 커짐(biased)

 

PPMI 해결방법

1) Add-one (Laplace) Smoothing

2) Weighting PMI : 빈도 낮은 단어는 좀 더 높은 확률로, 빈도 높은 단어는 좀 더 낮은 확률로 만들기 

 

알파 = 0.75면 good 

 

2. Short, dense vector

 

2.1. Word2Vec

 

Word2Vec의 2가지 방식 : CBOW와 Skip-gram

1) CBOW : context word가 주어졌을 때 target word를 예측함

2) Skip-gram : target word가 주어졌을 때 이 단어가 context가 맞는지 아닌지 예측함 

 

Skip-gram 

1) V개(단어 개수)의 300 차원 벡터 만들기 (랜덤한 숫자로 initial embedding)

2) Positive Example : target word + 이웃하는 단어 (window size에 따라 어디까지 이웃하는 걸로 볼지 달라짐)

* window size가 작으면 target word와 의미 유사하고 품사도 같은 단어(syntax), window size가 적당히 크면 문장의 topic과 유사한 단어가 나온다(semantics)

3) Negative Example : target word + 이웃하지 않는 아무 단어(noise word) *

4) Logistic Regression으로 Positive / Negative 구분하는 classifier 학습시키기 + Gradient Descent Algorithm

5) Classifier의 weight를 embedding으로 사용

 

* noise word 선택 방법 

1) unigram frequency : 단순 빈도로 랜덤하게 뽑기 

2) P_a(W) : 빈도 낮은 단어는 좀 더 높게, 높은 단어는 좀 더 낮게 보정 후 랜덤하게 뽑기 

 

 

Skip-gram 학습하기 

 

* t = target word, c = context word 

* target과 context가 positive example일 확률 = 두 단어의 similarity 정도 

* 두 단어 벡터의 내적으로 similarity 구할 수 있음. 그러나 확률은 아님. 확률로 만들어주기 위해 시그모이드 함수에 내적값을 넣어줌 

 

 

목표는 positive example에서 나온 것을 +로, negative example에서 나온 것을 -로 분류하는 것. 따라서 아래 수식의 값을 최대화해야 한다

 

 

하나의 target word에 관한 식은 다음과 같이 쓸 수 있다. 하나의 positive example에 여러 negative example이 대응된다. 

 

 

Word2Vec과 Fasttext의 차이점 : token 단위 vs character 단위

"the cat"이라는 스트링을 word2vec은 "the"와 "cat"으로 나누어 생각하는 반면, Fasttext는 "th", "he", "ca", "at" 으로 나누어 생각한다. sub-word 정보로 형태학적 분석이 가능하다. 따라서 처음 본 단어도 분석할 수 있다.

(ex) unlikely를 un-, like-, -ly로 분석하여 원래 알던 의미를 조합하여 이해할 수 있다. 

 

Word2Vec과 Glove의 차이점 : local vs global co-occurence 

 

 

※ 출처

1) 글 버전

2) PPT 버전

반응형

'nlp' 카테고리의 다른 글

Maximum Entropy Model  (0) 2019.12.04
Entropy  (0) 2019.12.04
Naive Bayes and Text Classification  (0) 2019.12.04
Language Modeling  (0) 2019.12.04
Minimum Edit Distance  (0) 2019.12.04