word2vec에 대하여
03 Dec 2018 | NLP Deep learning cs224n word2vec[단어 임베딩]
텍스트 데이터를 컴퓨터가 인식할 수 있게 바꿔주는 방법 중 하나가 임베딩(Embedding)인데, 말이 어렵지 그냥 단어(Word)를 벡터(Vector)로 변환시키는 방법이다. 단어들을 임베딩하는 방법들은 여러 가지가 있는데, 그 중 가장 쉽게 생각할 수 있는 방법은 주어진 텍스트에 있는 단어 수만큼의 차원을 만들어 one-hot-encoding으로 만드는 방식이다. 이 방법은 자연어 처리 초창기에 등장한 NNLM(Neural Network Language Model)은 이러한 방식으로 벡터를 만들어 임베딩을 하였지만, one-hot-encoding이었기 때문에 비슷한 단어들끼리의 유사성을 나타내기 어려웠고, 또 너무 많은 차원 수가 필요했으므로 매우 느렸다. (자세한 내용은 Beomsu Kim님의 블로그 로)
[word2vec의 등장]
그래서 등장한 것이 word2vec이다. word2vec은 2013년 구글의 Mikolov를 필두로 발표된 모델로, 논문은 여기에서 볼 수 있다. word2vec은 각 단어들을 “P(o|c) : 중심단어 c가 등장했을 때 주변단어 o가 등장할 조건부 확률” 로 정의한다.
그림으로 나타내면 요렇다. 출처 : cs224n 2강
이 때 P(o|c)를 수식으로 나타내면 다음과 같다 :
$u_{o}$는 주변단어들의 벡터, $v_{c}$는 중심단어의 벡터, $u_{w}$는 말뭉치 내의 모든 단어를 나타낸다. (V의 범위는 설정하기 나름이다 -> hyperparameter) 이 값을 최대한 크게 해야 모델로부터 생성되는 벡터들의 매핑이 보다 정확하게 된다. 이 값을 크게 하려면 분자를 최대화, 분모를 최소화 시켜야 하는데,
분자의 최대화 : 주변에 등장한 단어와 중심 단어의 내적을 크게
분모의 최소화 : 주변에 등장하지 않은 단어와 중심 단어의 내적값을 작게
요런 뜻을 가지고 있다.
이 값을 최대화시키는 방법은 해당 식을 $v_{c}$에 관하여 편미분하여 극점이 되는 부분을 찾으면 가능하다. 자세한 유도는 아래와 같다 :
최종 결과 식에서 $u_{o}$는 바꿀 수 없는 값이고(이미 observed된 것), 바꿀 수 있는 것은 minus 부호 뒤의 값들인데, 이들은 V의 범위를 조정함으로써 바꿀 수 있다. 이 식의 값을 딥 러닝 기법을 통해 최적화 하는 것이 word2vec 모델에서 쓰인 수학적 기법이라 할 수 있겠다.
Comments