본문 바로가기
  • 紹睿: 자유롭고 더불어 사는 가치있는 삶
Project/음악 가사 분석

[음악 가사 분석2] word2vec을 이용한 음악 가사 클러스터링(2) - word2vec이란?

by 징여 2018. 9. 14.
반응형

word2vec대하여 알아 생각이다.



word2vec

word2vec 간단하게 말하자면 2013년 구글이 제안한 방법을 구현한 알고리즘으로 word embedding 학습 모형이다. 먼저 word2vec 알아 보기전에 word2vec 전신이 되는 아이들 부터 살펴보도록 해보자.


word embedding? 우리가 다루어야할 음악 가사는 NLP(Natural Language Processing,자연어 처리) 컴퓨터가 인간이 사용하는 언어를 이해하고 분석할 있게 하는 분야를 이야기한다. 컴퓨터는 단어 자체를 사람처럼 개념적인 차이로 이해하는 것이 아니다. 컴퓨터가 어떤 단어인지 인지 있게 하기 위해서는 수치적인 방식으로 단어를 나타내 주여야 한다. 수화를 통해 단어의 개념적인 차이를 나타내기가 어려워, 기존의 NLP에서는 one-hot encoding 많이 이용했다. 그런데, one-hot encdoing에서도 단어의 본질적으로 다른 단어와 차이점을 가지는지 알수 없다는 단점이 존재한다.

단어 자체가 가지는 의미 자체를 다차원의 공간에서 벡터화하자
단어의 이미 자체를 벡터화할 있게 된다면?



 
위의 사진은 단어 추론에서 단어를 실험했을때, 나온 결과 예시이다
단어 추론 웹사이트는 나무위키와 한국 위키백과를 이용하여 word2vec 학습시켜, 단어들간의 관계를 찾아 있게 만들어 놓은 사이트로 가보면 여러가지로 재밋는 것을 해볼수 있다!


word vector


word embedding 관련 학습들은 기본적으로 Distributional Hypothesis라는 가정에 하에 이루어진다.

비슷한 분포를 가진 단어들은 비슷한 의미를 가진다.
비슷한 분포를 가졌다 = 단어들이 같은 문맥에서 등장한다


NNLM(Neural Net Language model) 

2003 bengio 의해 소개된 NNLM 연속적인 단어가 주어졌을 , 이전 단어로 현재 타깃 단어를 예측하는 Predictive based model 방식의 벡터화 방법이다.


NNLM Input Layer, Projection Layer, Hidden Layer, Output Layer 이루어진 Neural Network이다.

1. 현재 보고 있는 단어 이전의 단어들 개를 one-hot encoding으로 벡터화 시킨다.

2. 사전크기를 라고 하고 Projection Layer 크기를 라고 했을때, 각각의 벡터들은 크기의 Projection Matrix 의해 다음 레이어로 넘어가게 된다.

3. Projection Layer 값을 input이라 생각하고, 크기 짜리 Hidden Layer 거쳐 Output Layer에서  단어들이 나올 확률을 계산한다.

4. 이를 실제 단어의 one-hot encoding 벡터와 비교하여 에러를 계산하고

5. back-propagation 해서 네트워크의 weigh들을 최적화 해나가는

6. 최종적으로 사용하게 단어의 벡터들은 Projection Layer 값들로서 단어들의 크기  벡터가 된다.


NNLM 단점

단점1: 학습 셋의 단어 수에 비례하여 학습 성능이 매우 느리다.

단점2: 몇개의 단어를 볼건지에 대한 파라미터  고정되어있고, 정해주어야 한다.

단점3: 이전의 단어들에 대해서만 신경쓸 있고, 현재 보고있는 단어의 앞에 있는 단어는 고려하지 못한다.


RNNLM 
NNLM Recurrent Neural network 형태로 변형한
기본적으로 Projection Layer 없이 Input Layer, Hidden Layer, Output Layer로만 구성되는 대신, Hidden Layer Recurrent 연결이 있어 이전 시간의 Hidden Layer 입력이 다시 입력되는 형식으로 구성되어 있다.

1. NNLM 달리 몇개의 단어인지 정해줄 필요가 없다.

2. 학습을 진행하면서 Recurrent 부분이 일종의 Short-Term 메모리의 역할을 하면서 이전 단어들을 보는 효과를 낸다.

3. RNNLM NNLM보다 연산량이 적다.


RNNLM 단점

단점: 굉장히 많은 데이터가 필요하다.



드디어 word2vec

기존의 Neural Net기반 학습방법과 비슷하지만, 계산량을 엄청나게 줄여서 기존의 방법에 비해 몇배 이상 빠른 학습을 가능캐 하는 word embedding 모델로 2가지가 존재한다.


1) CBOW(Continuous Bag of Words)

CBOW 주어진 단어들을 가지고 빈칸 단어를 추론한다예를 들면 아래 사진의 주변 단어들을 이용해 네모네모를 찾는 것과 같다.



 이미지출처: http://www.masterkorean.com/community/koTogetherView.asp?tmpSeq=29&gotoPage=1&



CBOW Input Layer, Projection Layer, Output Layer 이루어져있다.

  • Input Layer에서 Projection layer 갈때는 모든 단어들이 공통적으로 사용하는 ( Projection Layer 길이 = 사용할 벡터의 길이) 크기의 Projection Matrix W 있고 Projection Layer에서 Output Layer 갈때는 크기의 weight Matrix W 있다.

1. Input Layer에서는 NNLM모델과 똑같이 단어를 one-hot encdoing으로 넣어주고,

2. 여러개의 단어를 각각 Projection 시킨후, 벡터들의 평균을 구해서 Projection Layer 보낸다.

3. 그 weight Matrix 곱해서 Output Layer 보내고

4. Softmax 계산을 ,

5. 이 결과를 진따 단어의 one-hot encoding 비교하여 error 계산한다.

2) Skip-gram

Skip-gram 현재 주어진 단어 하나를 가지고 주위에 등장하는 나머지 가지의 단어들의 등장 여부를 유추한다.
가까이에 있는 단어일 수록 현재 단어와 관계가 많다.
(CBOW
반대의 경우라고 생각하면 된다.) 멀리 떨어진 단어를 낮은 확률로 선택하는 방법을 사용한다.


3) NCE(Noise-Contrastive Estimation)

  • CBOW Skip-gram 모델에서 사용하는 비용 계산 알고리즘
  • 전체 데이터셋에 대해 softmax함수를 적용하는 것이 아니라, 샘플링으로 추출한 일부에 대해서만 적용한다.
  • k개의 대비되는(contrastive) 단어들을 noisr distribution 구해서 평균을 구하는
  • 일반적으로 단어 갯수가 많을 사용


4) 계산량을 줄이기 위한 방법에 대하여

Output Layer에서 softmax 계산을 하기 위해서는 단어에 대해 전부 계산을 해서 Normalization 해주어야 하고, 이애 따라 추가적인 연산이 ~~ 나게 늘어나게 된다(단어의 수가 짱짱 많으니까요!). 이를 방지 하기 위해서 2가지의 방법을 제시하고 있다.


(1) Hierarchical Softmax

softmax function 대신 보다 빠르게 계산가능한 multinomial distribution function 사용하는 방법



이미지출처: https://blog.acolyer.org/word2vec-hierarchical-softmax/


  • 빈번하게 출현하지 않는 단어들에게 유리 단어들을 leaves 가지는 binary tree 하나 만들어 놓은 다음, 해당하는 단어의 학률을 계산할때, root에서 부터 해당 leaf 가는 path 따라서 확률을 곱해가는 식으로 해당 단어가 나올 최종 확률을 계산한다.

input word 일때, output word 일때조건부 확률을 maximize 하기 위해  위해서 objective function 완성될 것이다.



root에서부터 단어 까지 가는 길에 놓여있는 노드에 딸려 있는 벡터와 단어 leaf  연관된 벡터  내적하고, sigmoid 함수를 적용하여 확률로 만들고 확률을 곱하면서 leaf까지 내려가면 된다.


 


이미지출처: http://dalpo0814.tistory.com/7

word2vec 논문에서는 사용빈도가 높은 단어에 대해 짧은 경로를 부여하는 binary Huffman Tree 사용했다

Huffman Tree 사용할 경우 자주등장하는 단어들 보다 짧은 path 도달할 있기 때문에 전체적인 계산량이 낮아지는 효과를 있다!


(2) Negative Sampling

Negative Sampling Hierarchical Softmax 대체재로 사용할수 있는 방법
Softmax에서 너무 많은 단어들에 대해 계산을 해야하니, 몇개만 샘플링해서 계산하면 안될까?에서 출발한다.

  • 전체 단어들에 대해 계산을 하는 대신, 중에서 일부만 뽑아서 softmax계산을 하고 Normalization 한다.
  • positive sample = 실제 target으로 사용하는 단어의 경우 반드시 계산
  • negative sample = positive sample 제외한 나머지 
    negative sample 어떻게 뽑느냐에 따라 성능이 달라진다. -> 보통은 실험적으로 결정한다.

word2vec 경우 기존과는 다른 Error Function 정의해서 사용한다


 


이미지출처: http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf


위와 같은 목표를 maximize하도록 weight 조정한다. negative sampling 가면 확인 있다.

  1. 보고있는 단어  목표로 하는 단어  뽑아  둔다.
  2. positive sample 경우:  조합이 corpus 있을 확률 negative sample 경우조합이 corpus 없을 확률
  3. 각각을 더하고  취해 정리하면 위와 같은 식이 된다.

자세한 내용은 negative sampling 정리에서 확인하는게 좋을 같다.. 어렵넹 부들

  • 빈번하게 출연하는 단어들에게 적합하다.



참조

http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf

cs224n-2017-lecture2

http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/

http://dalpo0814.tistory.com/7 https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/word2vec/

https://brunch.co.kr/@goodvc78/16

https://shuuki4.wordpress.com/2016/01/27/word2vec-관련-이론-정리/

Efficient Estimation of Word Representations in Vector Space

https://www.slideshare.net/moraesfelipe/representation-learning-of


반응형

댓글