ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Word Embedding 01 (One-hot Encoding / Word2Vec ) 정리
    AI/NLP 2021. 12. 31. 19:54
    728x90

     

     

     

    [논문 목록]

     

     

    1. Word2Vec : Efficient Estimation of Word Representations in Vector Space (https://arxiv.org/abs/1301.3781)

     

     

     

     

    들어가기 앞서

     

     

    컴퓨터는 텍스트 그 자체보다는 숫자를 더 잘 처리합니다

    따라서, 자연어 처리에서는 텍스트를 숫자로 바꾸는 여러 기법을 사용합니다.

     

     

     

     

    가장 기본적인 방법으로 원 핫 인코딩이 있습니다.

     

     

     

    원 핫 인코딩은 표현하고자 하는 단어를 1, 그렇지 않은 단어들은 0으로 표현하며 한 단어를 의미하는 벡터의 차원은 단어 집합의 크기가 됩니다. 각 단어는 하나의 고유한 원 핫 벡터로 표현됩니다.

     

    하지만 원 핫 인코딩에는 각 단어 벡터 간의 관계, 즉 의미상의 유사성을 표현할 수 없다는 한계가 있습니다.  

    원 핫 인코딩 방식은 단어를 표현하는 방법 중 희소 표현 방식에 속하기 때문입니다.

     

     

     

     

    단어를 벡터로 표현하는 방식, Word Representation은 위 그림과 같이 크게 희소 표현과 밀집 표현으로 나눌 수 있습니다.

     

     

    희소 표현은 해당 단어 그 자체만 보고, 특정 값을 맵핑하여 단어를 표현하는 방법으로, 앞서 살펴 본 원 핫 인코딩 등이 여기에 속합니다. 
    밀집 표현은 "비슷한 문맥 상의 단어들은 비슷한 의미를 가지고 있다"라는 가정 하에, 한 단어를 표현하고자 그 주변을 참고하여 단어를 표현하는 방법으로, 앞으로 살펴 볼 Word2Vec, Glove, FastText가 여기에 속합니다. 밀집 표현은 단어 간의 유사성을 계산할 수 있으며 단어 간의 관계를 추론할 수 있다는 장점이 있습니다.

     

     

     

     

     

     

     

    Word2Vec ( 논문명 Efficient Estimation of Word Representations in Vector Space ) 

     

     

     

     

    * Previous Study 

     

    : 물론 Word2Vec 이전에도 NNLM, RNNLM과 같이 단어를 연속된 벡터의 형태로 나타내는 방식은 있었습니다! 다만, 대량의 단어를 처리해야 하는 NLP 특성상, Computational Complexity가 중요했습니다. 따라서 Word2Vec 논문에서는 복잡도를 줄이면서도 높은 수준의 word vector를 학습하는 기술을 제안합니다. 아래에서 기존 모델들의 한계를 살펴보겠습니다! 

     

     

     

     

     

    1. NNLM (Feed-Forward Neural Net Language Model)

     

     

    NNLMfeedforward 방식으로 projection layer( = LookUp Table ) 사용합니다. 하지만 중심 단어 등장 이전의 단어들만으로 단어를 계산한다는 단점이 있습니다. 

     

     

     

     

     

     

     

     

     

     

    2. RNNLM (Recurrent Neural Net Language Model)

     

     

    RNNLM은 projection layer 대신 hidden layer를 사용하여 과거의 단어들을 보는 short term memory의 역할을 합니다.  history 단어 개수를 설정할 필요 없이 순서대로 input를 받는다는 장점이 있지만 시간 복잡도가 매우 높다는 단점이 있습니다.   

     

     

     

     

     

    => 따라서 Word2Vec에서는 .... 

     

    : 자연어 처리 특성상, 많은 단어를 보게 할수록 성능이 올라가는데 이는 필연적으로 대량의 데이터를 다뤄야 한다는 ㄸ뜻입니다. 따라서 학습 속도를 줄이는 것이 매우 중요한 문제가 됩니다. 그래서 Word2Vec에서는 RNNLM의 Complexity는 hidden layer에서 오기 때문에 Hidden Layer를 사용하지 않는 NNLM 구조를 사용합니다. 

     

     

    : 즉, Word2Vec 논문에서는 복잡도를 줄이면서도 높은 수준의 word vector를 학습하는 기술을 제안합니다. 

     

     

     

     

     

     

     

    * Word2Vec의 두 가지 모델  

     

     

    1. Continuous Bag-of-Words Model (CBOW)

     

     

     

    : 첫번째로 continuous bag of words 주변의 단어들 Context Words로부터 중심 단어의 word vector 값을 반환합니다. 몇 개의 주변 단어를 볼 것인가에 대한 범위를 윈도우라고 합니다.

     

    : Bag of Words라는 이름이 붙은 이유는 history에 있는 단어들의 순서가 projection에 영향을 주지 않기 때문! 

    -> 다만 기존의 bag-of-words 모델과 달리 CBOW는 context에 대한 continuous distributed representation을 사용합니다!  

     

     

    ※ projection matrix ( V x D / input과 project layer 사이에 있는 weight matrix)는 NNLM과 동일한 방식으로 모든 단어들의 위치를 공유하고 있다! 

     

     

    먼저 1) Projection Matrix, lookup tableinput one hot vector들과 곱해준 후

    2) 그의 평균 값을 내어

    3) 다시 두번째 Weight Matrix와 곱하여 softmax를 취하고

    4) Cross Entropy를 통해 정답 원 핫 벡터와의 오차 값을 구합니다.  

     

     

     

    1. (Input Layer) context에서 기준 단어를 제외한 문맥 단어 각각에 대해 one-hot vector를 만들어 input에 넣습니다.

    window size를 m으로 했을 경우, 2m개의 one-hot vector를 만들어 넣습니다.




    2. (Input Layer → Hidden Layer) Input에 input word matrix를 곱해, N차원 embedding vector를 얻습니다.

    문맥 단어 개수(2m)만큼의 N차원 embedding vector가 얻어집니다.




    3. (Hidden Layer) 2의 결과인 N차원 embedding vector들을 평균 내 하나의 N차원 embedding vector를 만듭니다.



    4. (Hidden Layer → Output Layer) 3의 결과를 output word matrix에 곱해, 입력 차원과 같은 vector를 만듭니다.



    5. (Output Layer) 4에서 얻어진 vector를 균등한 확률로 표현하기 위해 softmax 함수를 취합니다.



    6. (Loss) y hat을 기준 단어의 one-hot vector인 y와 오차 측정합니다.

    오차 측정 시 Cross-entropy loss가 사용되며,

    학습할 word가 one-hot vector의 i 번째 위치한다면, i 번째 값만 1 이고 나머진 0 이기 때문에, 아래와 같이 나타낼 수 있습니다.



    모든 가중치 집합을 θ라고 한다면 CBOW는 다음을 푸는 것과 같습니다.



    이어서 L을 자세히 살펴보겠습니다.




    Deep Learning과 마찬가지로 기울기 강하법으로 학습을 할 수 있습니다.
    하지만 |V|가 커지면 계산량이 굉장히 커집니다.
    이를 해결하기 위한 방법으로 negative sampling, hierachical softmax 방법이 제안되었습니다.

     

     

     

     

     

     

    2. Continuous Skip-Gram Model (Skip Gram)

     

     

    : 두 번째로 skip gram은 반대로 중심 단어를 input으로 하여 context word들을 예측하는 방식입니다.

     

     

    : Skip(건너뛰다)-Gram(몇 칸)이 이름이 된 이유는, orange를 중심으로 가까히 있는 glass를 예측(학습)할 수도 있고, 멀리 있는 my를 예측(학습)할 수도 있습니다. 만약 윈도우 크기 6을 사용한다면 (-6~orange~+6) 크기 안에서 단어를 선택할 수 있습니다. 즉 orange+6의 위치에 있는 my를 학습 범주 안으로 가져올 수 있는 것입니다. 이처럼 몇 칸식 건너뛰어서 학습하기 때문에 Skip(건너뛰다)-Gram(몇 칸)이라고 명칭합니다.

     

     

    : Window size를 정하는 데 있어서 random sampling을 사용합니다. C라는 단어 최대거리를 설정하면 1~C 중에서 랜덤하게 뽑은 자연수 R을 선택하여 current word의 history word R개, future word R개 즉 최대 2*R개의 context vector가 correct label이 됩니다.

     

    => 즉, 기준 단어를 입력으로 사용하여, 기준 단어에 대해 앞 뒤로 N/2개 씩, 총 N개의 문맥 단어를 맞추기 위한 네트워크를 만듭니다.

    • 예를 들어, 다음 문장의 빈칸을 채우는 모델입니다.
      • _ _ _ _ 음식을 _ _ _ _ .

     

     

     

     

     

     

    방식은 CBOW와 유사하게

     

    1) 중심 단어를 input으로 넣어 projection matrix와 계산한 후

    2) random sampling을 통해 선정한 앞뒤(주변) 단어 각각 c개를 예측하기 위해 weight matrix를 곱하여 softmax를 취하고

    3) Cross Entropy를 통해 정답 원 핫 벡터와의 오차 값을 구합니다.

     

     

     

    ※ Random Sampling 이유 ! 

     

    Skip-gram의 단점은 계산량이 많아 시간이 오래 걸린다는 점입니다. 아무런 처리가 없을 때, VV개의 단어를 가진 말뭉치를 NN차원의 임베딩 벡터로 학습하려면 2×V×N2×V×N 만큼의 가중치를 학습해야 합니다. 위 그림처럼 “brown”이 타깃 단어이고 주변 단어에 “fox”가 있을 때 (brown, fox)로 학습하고, “fox”가 타깃 단어이고 주변 단어에 “brown”이 있을 때에는 (fox, brown)을 학습하기 때문입니다. 이를 위해 고안된 샘플링(Sampling) 기법은 중요도가 떨어지는 단어의 개수를 줄임으로써 임베딩 벡터의 성능을 떨어뜨리지 않으면서도 계산량을 줄일 수 있도록 하는 방법입니다.

     

     

     

     덧붙여 일반적으로 skipgram 방식이 CBOW보다 중심단어의 학습 기회를 더 많이 가져가기 때문에 성능이 좋다고 합니다.

    중심 단어를 기준으로 앞뒤 단어 총 C개를 Sampling하여 계산한다!

     

     

     

     



    1. (Input Layer) context에서 기준 단어에 대한 one-hot vector를 만들어 input 에 넣습니다.



    2. (Input Layer → Hidden Layer) Input에 input word matrix를 곱해, N차원 embedding vector를 얻습니다.



    3. (Hidden Layer → Output Layer) 2의 결과인 N차원 embedding vector에 2m개의 output word matrix를 곱해, 입력 차원과 같은 vector를 만듭니다.




    4. (Output Layer) 3에서 얻어진 vector를 균등한 확률로 표현하기 위해 softmax 함수를 취합니다.




    5. (Loss) y hat을 각 문맥 단어들의 one-hot vector인 y와 오차 측정합니다.

    오차 측정 시 CBOW와 동일하게 Cross-entropy가 사용되며,


    위 그림에서 문맥 단어는 2m개가 있으며, 각 문맥 단어는 c-j 번째 index가 1인 one-hot vector로 나타낼 수 있습니다.

    Skip-Gram은 CBOW와 동일하게 아래 공식을 통해 가중치를 학습할 수 있습니다.






    이어서 L을 자세히 살펴보겠습니다.



    Skip-Gram은 CBOW와 달리 문맥 단어들은 서로 독립이라는 가정이 추가됩니다.
    하지만, |V|가 커지면 계산량이 굉장히 커진다는 점은 CBOW와 동일합니다.


     

     

     

    * Word2Vec의 계산 속도 문제! 

     

    [해결방안]

    1. hierarchical softmax

    2. subsampling frequent words

    3. negative sampling : 이것을 많이 사용함.

     

     

    * Negative Sampling 

     

     

    ※ 학습 자체를 아예 스킵하는 subsampling과는 차이가 있다! 

     

     

    Word2Vec 모델의 마지막 단계를 보면, 출력층 Layer에 있는 softmax 함수는 사전 크기 만큼의 Vector의 모든 값을 0과 1사이의 값이면서 모두 더하면 1이 되도록 바꾸는 작업을 수행합니다. 그리고 이에 대한 오차를 구하고, 역전파를 통해 모든 단어에 대한 임베딩을 조정합니다. 그 단어가 기준 단어나 문맥 단어와 전혀 상관 없는 단어라도 마찬가지입니다.

     

    -> 그런데 만약 사전의 크기가 수백만에 달한다면, 이 작업은 굉장히 무거운 작업입니다.

    => 따라서, 이를 조금 더 효율적으로 진행하기 위해, 임베딩 조절시 사전에 있는 전체 단어 집합이 아닌, 일부 단어집합만 조정합니다. 이 일부 단어 집합은, positive sample(기준 단어 주변에 등장한 단어)와 negative sample(기준 단어 주변에 등장하지 않은 단어)로 이루어져 있습니다. 즉, 기준 단어와 관련된 parameter들은 다 업데이트 해주는데, 관련되지 않은 parameter들은 몇 개 뽑아서 업데이트 해주겠다는 것입니다. 

     

    (이 때, 몇 개의 negative sample을 뽑을지는 모델에 따라 다르며, 보통 문맥 단어개수 + 20개를 뽑는다고 합니다. 또한, negative sample은 말뭉치에서 빈도수가 높은 단어가 뽑히도록 설계되어 있으며, 공식은 아래와 같습니다.)

     

    -> Just like we discussed in the CBOW model, we need to model this Skip-gram architecture now as a deep learning classification model such that we take in the target word as our input and try to predict the context words.

     

    ->  We simplify this further by breaking down each (target, context_words) pair into (target, context) pairs such that each context consists of only one word. Hence our dataset from earlier gets transformed into pairs like (brown, quick), (brown, fox), (quick, the), (quick, brown) and so on. 

     

    -> For this, we feed our skip-gram model pairs of (X, Y) where is our input and is our label.

     

    -> We do this by using [(target, context), 1] pairs as positive input samples where target is our word of interest and context is a context word occurring near the target word and the positive label 1 indicates this is a contextually relevant pair. 

     

    -> We also feed in [(target, random), 0] pairs as negative input samples where target is again our word of interest but random is just a randomly selected word from our vocabulary which has no context or association with our target word. Hence the negative label 0indicates this is a contextually irrelevant pair. 

     

     

     

     

    * Conclusion

     

     

     

     

    Reference

     

    https://wikidocs.net/69141

     

    04) 네거티브 샘플링을 이용한 Word2Vec 구현(Skip-Gram with Negative Sampling, SGNS)

    네거티브 샘플링(Negative Sampling)을 사용하는 Word2Vec을 직접 케라스(Keras)를 통해 구현해봅시다. ## 1. 네거티브 샘플링(Negative S ...

    wikidocs.net

    https://warm-uk.tistory.com/10

     

    [NLP 개념정리] Word Embedding : Word2Vec

    * 자료출저 및 참고논문 - 강의 Coursera, Andrew Ng 교수님 인터넷 강의 - 논문 Word2Vec: 2013, Effcient Estimation of Word Representations in Vector Space * Word Representation 관점 : Word Embedding 만..

    warm-uk.tistory.com

     

    https://wooono.tistory.com/244

     

    [DL] Word2Vec, CBOW, Skip-Gram, Negative Sampling

    One-Hot Vector 기존의 자연어처리 분야에서는, 단어를 One-Hot Vector 로 표현했습니다. One-Hot Vector란, 예를 들어 사전에 총 10000개의 단어가 있고, Man이라는 단어가 사전의 5391번째 index에 존재한다면 M..

    wooono.tistory.com

    https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/03/30/word2vec/

     

    Word2Vec의 학습 방식 · ratsgo's blog

    이번 포스팅에서는 최근 인기를 끌고 있는 단어 임베딩(embedding) 방법론인 Word2Vec에 대해 살펴보고자 합니다. Word2Vec은 말 그대로 단어를 벡터로 바꿔주는 알고리즘입니다. Neural Network Language Model(

    ratsgo.github.io

    https://yngie-c.github.io/nlp/2020/05/28/nlp_word2vec/

     

    Word2Vec · Data Science

    지난번 게시물에 있었던 확률기반 신경망 언어 모델(NPLM)은 처음으로 단어 임베딩을 언어 모델에 사용하였습니다. 이번에는 단어 임베딩에서 가장 많이 쓰이는 모델인 Word2Vec에 대해서 알아보겠

    yngie-c.github.io

     

     

     

     

    728x90
Designed by Tistory.