* Weekly nlp 5에 해당하는 내용

 

본문 링크: https://jiho-ml.com/weekly-nlp-5/

 

Week 5 - 얘랑 나랑 얼마나 비슷해?

여러분은 어떤 사람과 얼마나 비슷한지 숫자로 표현할 수 있으신가요? "친구 A보다 B가 나와 좀 더 비슷한거 같아.." 라는 어찌어찌 할 수 있을거 같은데, 아무래도 절대적인 숫자를 생각해내기는

jiho-ml.com

 

  • BoW vector 또는 tf-idf vector는 문장을 단어의 빈도수를 계산해 N차원의 column vector로 표현 (N = # of vocabulary)
  • Word embedding은 각 단어들을 GloVe나 skipgram같은 알고리즘으로 각 단어들을 비교적 작은 차원의 vector로 줄여서 만들 수 있음

word embedding에서는 문장, 문서, 단어를 vector로 만들어 N차원의 공간의 하나의 점으로 바꾸어 표현함

2차원 word embedding space

 

벡터간 거리 재는법 (단어간 유사도 구하는법):

Euclidean Distance

두 점 사이에 줄을 긋고, 그 줄의 길이를 계산하는 것 --> 그렇기때문에 문서 길이에 영향을 받을 수 있음 (Limitation)

2차원 Euclidean Distance



Cosine Similarity

두 개의 vector들 사이의 각도를 계산하는 방법 --> magnitude는 무시, 방향의 차이만 계산 --> 크기(빈도수)의 절대값이 아닌 상대값을 봄

A, B 둘 다 벡터, theta는 사이각 / 제로벡터만 아니면 유사도 계산 가능

Cosine Distance = 1 - Cosine Similarity

 

theta A & B cosine similarity cosine distance
0 같은 방향 1 0
90 (orthogonal) 독립적 (두 벡터의 dot product = 0) 0 1
180 반대 방향 -1 2

 

 

e.g. 문서 A, B, C가 있을 때

문서 길이 주제
A & B 2배 같음
A & C 거의 차이나지 않음 다름

 

  • 이때 euclidean distance를 사용하여 거리를 계산하면 문서 A가 문서 B보다 문서 C와 유사하다고 나올 수 있음
  • cosine similarity를 사용했을 때는 벡터 간의 방향에 초점을 두기 때문에 문서의 길이가 다르더라도 비교적 공정하게 유사도 측정 가능 (https://heytech.tistory.com/357)

 


Jaccard Similarity

(위클리 NLP에는 나오지 않는 유사도 기법, 계산 방법이 약간 다름 --> 벡터 사용 x)

 

A와 B 두개의 집합이 있다고 할 때

  • 교집합(intersection)은 두 개의 집합에서 공통으로 가지고 있는 원소들의 집합
  • 즉, 합집합(union)에서 교집합의 비율을 구한다면 두 집합의 유사도를 구할 수 있을 것 --> Jaccard Similarity

자카드 유사도, 0과 1사이의 값을 가짐

두 집합 Jaccard Similarity
동일 1
공통 원소 = 0 0

ref: https://wikidocs.net/24654

 


 

둘 중 뭘 써야할까?

A와 B의 euclidean distance랑 cosine similarity

 

  • NLP 문제에서는 cosine similarity가 주로 쓰임
    • vector를 단어의 빈도 수로 계산하는 경우가 많기 때문

 

e.g. 긴 글에 "bank"라는 단어가 100번 등장 하고 짧은 글에는 20번 등장한다고 가정

  • 이 두 글이 경제라는 비슷한 주제라는 것을 알아내기 위해서는 euclidean distance(절대적 거리 계산)보다는 cosine similarity(각도 계산)를 쓰는 게 더 적합할 것
    • 빈도수 차이는 이미 알고있고, 두 글이 얼마나 비슷하냐를 알고싶은 것이기 때문에

 

--> 문제마다 다르기때문에 계산하려는 vector의 수학적 성격을 잘 파악하는 것이 중요

 

 

Word2Vec 공간을 cosine distance로 살펴보기

  • Tensorflow에 포함된 embedding projector라는 tool을 사용하면 visualization 가능

  • diamond와 가까운 단어
    • diamonds
    • mineral
    • graphite
    • gem
    • stone
    • iron 등등
  • skipgram 알고리즘의 원리로 결과 이해가능 (skipgram은 타겟단어를 놓고 주변 단어들을 예측함)