2013년에 인공신경망 분야의 유명한 컨퍼런스인 신경정보처리시스템(NIPS, Nueral information processing systems)에 소개된 논문입니다. 단어나, 진단명, 음식명 등과 같이 어떤 개념들을 임베딩할 때 사용할 수 있을 것 같아, 공부겸 아래와 같이 국문번역을 진행해봤습니다.


원문: Mikolov, T., Sutskever, I., Chen, K., Corrado, G. S., & Dean, J. (2013). Distributed representations of words and phrases and their compositionality. In Advances in neural information processing systems (pp. 3111-3119).





Requirement Background knowledge



조밀행렬간의 곱(Dense matrix multiplication): 

(source : https://github.com/maxeler/Dense-Matrix-Multiplication)


Skip-gram:







Abstract


  최근 소개된 Continous Skip-gram 모델은 간결한 구문이나 의미론적 단어 관계를 활용할 수 있는 분산벡터표현모델이다. 본 연구에선는 벡터와 훈련속도를 향상시킬 수 있는 여러가지 모델들을 제안한다. 출현빈도가 높은 단어들을 샘플링함으로서,  본 연구에서는 좀 더 일반적인 벡터표현을 학습하고, 속도를 향상시킬수 있었다. 또한, 이에 계층적 네거티브 샘플링(Negative samping)이라고 부르는 소프트맥스(Hierachial softmax)에 대한 대한도 제시한다. 벡터표현에 대한 제한점은 단어의 순서에 대한 차이가 없단는 것과 관용구같은 표현이에 대해서는 표현이 불가능하다는 것이 있다. 예를 들어 'Canada' + 'Air'의 합친 의미는 'AirCanada'라고 할 수 없다. 이러한 예제로부터, 텍스트 내에 구의 의미를 찾는 간단한 방법을 제시하고, 많은 구에 대한 훌륭한 벡터표현을 학습하다는 것이 가능함을 보였다.




Introduction


  벡터공간에서의 단어의 분산표현(Distributed representation)은  유사한 단어를 그룹핑 하고, 벡터공간에 표현할 수 있게 함으로써 알고리즘을 학습시키는 것을 가능하게 자연어처리분야에 큰 진보를 가져왔다. Rumelhart 외 2인이 1986년에 제한 방법이 가장 초기에 제안된 방법인데, 이러한 방법은 통계적인 방법을 이용하였다. 이후에, 벡터표현은 기계번역이나 자동음성인식 등 자연어처리 여러분야에 응용되어 사용되었다.

  최근에 Mikolvo et al 은 Skip-gram 모델을 소개했는데, 많은 양의 비정형 텍스트에 대해서도 단어의 향상된 벡터표현을 가능하게 했다. 이전에 사용되었던 신경망구조와는 달리, Skip-gram은 조밀행렬간의 곱(dense matrix multiplications)을 하지 않는다. (역주: Requirment에 제시한 그림과 같이 행렬이 매우 큰 경우에 각 연산을 하려면 상당한 계산비용이 드는데 이러한 과정이 없다는 의미이다.) 반면 아래와 같이 (Figure 1), 각 벡터를 신경망으로 연결해서 표현하기때문에, 계산비용에 있어 요율적이다. 


 인공신경망을 이용한 단어의 표현은 학습된 벡터를 명시적으로 많은 패턴들로 인코딩해주기 때문에 매우 흥미롭다. 또한, 많은 패턴들이 선형해석으로 가능하다 (역주: 선형으로 연산하면 우리가 알고있는 연산처럼 생각할 수 있다는 의미로 생각됨. 다음의 예시를 참고) . 예를 들어, 벡터(Madrid) - 벡터(Spain) + 벡터(France)을 하면 벡터(Apple)과 같은 벡터보다, 나라-수도의 관계이기 떄문에, 벡터(Paris)가 나올 것이다.


 본 연구에서는 원래 Skip-gram 모델을 여러가지를 활용하여 발전시킨것을 소개한다. 본 연구는 훈련과정에서 출현빈도가 높은 단어들을 샘플링하여 훈련속도를 약 2배에서 10배까지 향상시킨 결과를 보여줄 것이고, 상대적으로 출현빈도가 낮은 단어에 대해서도 좀 더 향상된 단어의 표현이 가능했음을 보여줄 것이다. 또한, 노이즈대조추정(Noise Contrastive Estimation, NCE)의 간단한 변형을 제시하여, Skip-gram의 훈련속도를 향상시키고, 사전연구와 비교했을 때 출현빈도가 높은 단어의 표현이향상됨을 보여줄것이다.


 단어의 표현은 관용적표현구 각각 분리할 수 없는 것에 대해서는 불가능하다는 것에 제한점은 있다. 예를 들어, 'Boston Globe'는 신문인데, 이를 'Boston'과 'Globe'로 분리하여 의미를 조합하면 젆혀 다른의미가 되기 때문에 이러한 과정에는 제한이 있다. 그러므로, 단어를 나누지말고 전체 구(global phrases)을 한번에 벡터로 표현하는 것이 더 표현이 정확할 수 있다. 그외, 단어의 벡터를 구성하는 목적으로사용될 수 있는 Recursive autoencorder가 이러한 경우에 사용될 수 있다.


 단어기반부터 구 기반까지의 모델의 활용인 상대적으로 간단하다. 첫째로, 우리는 많은 구를 활용하여, 각각의 구를 토큰화(tokenization)하여 각각 토큰을 훈련에 사용하였다. 이렇게 사용된 구의 표현을 제대로 벡터에 표현되었는지 확인하기위해서, 단어와 구를 포함하는 유추문제를 테스트 세트로 개발하였다. 전형적인 유사적 쌍은 "Montreal":"Montreal Canadien"::"Toronto":"Toronto Maple leaf"인데, Montreal Canadien - Montreal + Toronto 를하면 Toronto Maple leaf가 나온다는 것을 확인했다. (역주: 몬트리얼 케너디언은 하키팀이고, 토론토 메이플 리프도 케나다팀이다. 따라서 몬트리얼이라는 지역을 제외하면, 하키팀이라는 개념만 암고, 토론토를 추가했으므로 토론토 하키팀이 되야하므로 Toronto maple leaf가 나온 것이다.)


 마지막으로, Skip-gram의 또다른 성질에 대해서 설명할 것이고, 간단하게 벡터를 더하는 것이 새로운 의미를 줄 수 있다는 사실을 확인했다. 예를 들어, '러시아'+'강(River)'는 ''볼가강"과 유사도가 높고, "독일"+"수도(Capital)"은 "베를린"과 유사도가 높음을 확인했다.



The Skip-gram model


Skip-gram 모델의 훈련 목적은 문헌 내에 주변단어들을 예측할 수 있는 단어의 표현을 찾는 것이다. 더 정확히는 어떤 문장이 w1, w2, w3... wt의 단어의 조합으로 이루어졌을때, Skip-gram의 훈련 목적은 평균 로그 확률(the average log probability)을 최대화 하는 것이다. 본 문헌에서는 축약된 내용이 너무 많아, "word2vec Explained: deriving Mikolov et al.'s negative-sampling word-embedding method." 논문을 따라서 설명하는 것이 더 편할 것 같아 다음과 같이 추가하였다. 


앞서, 몇가지 용어를 정의할 필요가 있다.

  • Corpus (말뭉치): 문장의 조합
  • Context : 현재 단어의 예측하고자하는 주변단어
Word2vec의 훈련단

 w을 단어의 뭉치(corpus)라고하고, 그 주변문맥을 c라고 하자. 그러면 이는 조건부 확률로 어떤 단어 w가 나오면, c가 나올 확률을 제시할 수 있는데 이를 표기하면 다음과 같다.


그리고, 어떤 문헌이 같이 주어졌을 때, 파라미터(ceta)을 찾기위해서는 아래와 같이 말뭉치의 확률을 최대화 하는 방향으로 최적화를 한다. 예를 들어, 원문이 "나는 사과를 먹는다"였다라고 하면, [   ] 사과를 [    ] 에서 앞단어와 뒷단어를 찾는 확률을 구하는 것이 Skip-gram의 주 목적인데, 여기서 w가 '사과를'을 의미하고 전/후 단어가 c을 의미한다. 위와 같은 상황에서, 텍스트 전체가 있고, 최적화하고싶은 파라미터가 있는 경우에는 다음과 같은 조건부 확률을 최대화 하는 방향으로 모델을 만들어야한다. 여기서 c(w)은 단어 w 에대한 세트이다. 




w는 단어를 의미하고. Wo는 출력될 단어, Wi는 입력되는 단어를 의미한다. 또한, p(w|w) 은 다시 아래와 같은 수식을 따른다.

(source:https://arxiv.org/pdf/1402.3722.pdf)



Vw는 입력 단어가 표현된 벡터를 의미하고 ,V'w은 출력단어에 대한 벡터의 표현값이다. 


위의 식과 아래 식을 종합해보면, 첫번째 식 1/T * sum (sum())을 최대화 하려면, 결국에 log p(w|w)가 최대화 되어야한다. 결국 p(w|w)가 최대화 되어야한다는 의미이다. p(w|w)가 크려면 결국 분자가 커지거나, 분모가 작아져야하는데 그러려면 아래와 같은 수식으로 다시 풀어서 쓸 수 있을 것 같다. 분자가 최대화 된다는 말은 









Q. Skip-gram의 가중치의 전치행렬이 다를수 있다는데, 이게 다를수가 있나?


food2vec을 만들어서 특정 원소를 보면, 가공식품에 대한 요소가 있을거고, 어떤 요소를보면 다이어트에 유리한 요소가 잇을 것인데 이러한 요소에 대한 차이를 확인해보자.

반응형

+ Recent posts