📌 목차

1. preview
2. Dimension Reduction

3. 흔한 오해 1
4. word2vec [2013]
5. GloVe (Global Vectors for word representation)
6. word2vec 예제 (FastText 오픈소스)

😚 글을 마치며...

 

 

 


1. Preview

 

[Gain Study_NLP]02. Similarity. &. Ambiguity (one-hot encoding, feature, TF-IDF)

📌 목차 1. word sense 2. one-hot encoding 3. thesaurus(어휘분류사전) 4. Feature 5. Feature Extraction. &. Text Mining (TF-IDF) 6. Feature vector 생성 7. Vector Similarity (with Norm) 8. 단어 중의성 해소 (WSD) 9. Selection Preference 😚

chan4im.tistory.com

앞서 단어의 의미와 모호성을 살펴보았는데, 사람의 언어는 불연속적형태인 단어로 이뤄지며, 각 단어가 갖는 의미는 서로 연관성이 있을때도 있지만 겉으로는 파악하기 어렵다.

이런 NLP의 특징때문에 NLP에서 단어∙문장∙문서를 vector로 나타내는 것은 매우 큰 숙명이었다.
(컴퓨터가 이해하고 처리하기는 어렵기 때문)
따라서 컴퓨터가 이해하는 벡터로 변환이 가능한 함수나 mapping table을 만드는 과정이 중요하다.

이전시간에는 단어의 의미를 다루며 corpus로부터 단어의 feature를 추출해 벡터로 만드는 과정을 살펴보았지만
이번시간에는 단어를 컴퓨터가 이해하고 처리하기 쉬운 형태로 변환하는 과정인, "word embedding"을 다뤄볼 것이다.

 

 

 

 

 

 


2. Dimension Reduction

이전 시간(https://chan4im.tistory.com/196)에서 높은차원에서 data를 표현하는 과정에서 희소성 문제가 많이 나타남을 확인했다.

따라서 같은정보 표현 시, 더 낮은차원을 사용하는 것이 중요 하다.

2.1 PCA
가장 대표적 차원축소방법인 주성분 분석(PCA)은 고차원데이터를 더 낮은차원으로 표현할 수 있다.
주로 특이값분해(SVD)를 통해 주성분분석이 가능하다.
위의 사진에서 다음과 같은 조건을 만족해야 한다.
파란점에서 빨간점으로 투영된 거리가 최소가 되어야 하고
빨간점들의 분산이 최대가 되어야 한다.

다만, 저차원으로 투영하게되면 정보의 손실이 불가피하게 발생하며, 이는 복구불가능하다.
따라서 고차원에 표현된 정보를 지나치게 낮은 차원으로 축소해 표현하기 어렵다.
특히, data가 비선형적으로 구성될수록 더욱 어려워진다.

 

2.2 Manifold Hypothesis
위의 가설로 차원축소에 더 효율적으로 접근해볼 수 있다.

매니폴드 가설: 고차원의 데이터의 경우, 해당 데이터들을 아우르는 저차원의 다양체(manifold)역시 존재 한다.
3차원 공간상의 2차원 manifold를 2차원 공간에 표현 시, 각 점사이 최단경로, 공간에 따라 최단경로가 바뀐다.
위와 같이 3차원 공간에 분포하는 data를 아우르는 2차원 manifold가 존재할 수도 있으며 이런 manifold를 찾아 2차원 평면에 data point들을 mapping할 수 있다.
따라서 manifold를 찾을 수만 있다면, PCA처럼 고차원평면에 data를 선형적으로 투사하며 생기는 손실을 최소화할 수 있다.

또다른 흥미로운 특징 하나는 위의 그림처럼 고차원상에서 가까운 거리의 point라 할 지라도
manifold보다 저차원으로 mapping하면 오히려 거리가 멀어질 수 있다.

또한, 저차원의 공간상에서 가까운 점끼리는 실제로도 가까운 특징을 갖는다는 것이다.

따라서 각 공간의 차원축은 고차원에서 비선형적으로 표현될 것이며, 데이터의 특징을 각각 표현할 것이다.

 

2.3 딥러닝이 잘 작동하는 이유
대부분, 딥러닝이 문제를 풀기 위해 차원축소를 수행하는 과정이
바로 데이터가 존재하는 고차원상에서 manifold를 찾는 과정이다. (다만 가설임.)

 

2.4 Auto Encoder
 ∙ 고차원의 sample_data를 입력으로 받음
 ∙ 입력을 토대로 manifold를 찾고, 저차원으로 축소하는 encoder를 거침
 ∙ encoder를 거친 후 bottel-neck구간에서의 hidden 벡터로 표현한다.
 ∙ decoder는 자차원벡터를 받아 고차원 데이터로 복원하는 작업을 수행한다.
    복원된 데이터는 고차원상 manifold위에 위치하게 된다.

이때, 고차원의 data를 저차원으로 압축 후 복원하는 과정에서 AE의 bottle-neck차원은 매우 낮기에
복원에 필요한 정보만 남기고 필요없는 정보부터 버려진다.

이전시간(https://chan4im.tistory.com/196)에서의 TF-IDF등을 활용, 계산한 희소단어특징벡터를 입력으로 넣고
같은 출력값을 갖도록 훈련 시, AE의 bottle-neck층 결과값을 dense word embedding vector로 사용할 수 있다.

 

 

 

 

 

 

 


3.  흔한 오해 1.

Skip-Gram, GloVe를 사용해 훈련한 단어 임베딩 벡터가 딥러닝 모델입력으로 사용된다?

No! 이 임베딩 벡터는 pre-train된 임베딩 벡터로 word2vec을 통해 얻은 단어임베딩벡터가 훌륭하게 단어의 특징을 잘 반영은 하지만 모델훈련을 통한 문제해결에 대한 최적의 벡터임베딩은 아니다.

따라서 다른 목적함수를 통해 훈련한 임베딩 벡터는 기존목적에 맞지않을 가능성이 높기에 문제의 특징을 고려하지 않은 단어임베딩벡터는 그다지 좋은방법이 될 수 없다.

 

 

 

 

 

 


4. word2vec [2013]

4.1 word2vec
word2vec은 단어를 임베딩하는 2가지 알고리즘 CBOW와 Skip-Gram을 제시한다.
두 방법 모두 함께 등장하는 단어가 비슷할수록 비슷한 벡터값을 가질 것이라는 공통된 가정을 전제로 진행한다.

앞에서처럼 두 방법 모두 window_size가 주어지면 특정 단어를 기준으로 window 내의 주변 단어들을 사용, word embedding을 학습한다.
다만, window내에서의 위치는 고려하지 않지만 그렇다고 위치정보를 무시하지는 않는다.
이는 window 자체에 단어의 위치정보를 내포하기에 가능한 일이다.

 

4.2 CBOW .&. Skip-Gram 
📌 CBOW (Continuous Bag Of Words)
  - 신경망 주변에 나타나는 단어들을 one-hot encoding된 벡터로 입력받음
  - 입력을 토대로 해당 단어를 예측

📌 Skip-Gram 
  - 대상 단어를 one-hot encoding벡터로 입력을 받음
  - 입력을 토대로 주변단어들을 예측하는 신경망을 구성, word embedding vector를 학습
  - 보통 CBOW보다 성능이 뛰어나 더 널리 사용됨

 

4.3 상세 (Skip-Gram) 훈련방식
① MLE를 통해 아래 수식의 argmax내의 수식을 최대화하는 파라미터 θ를 찾음.
② 이를 통해 wt가 주어지면, 앞뒤 n개의 단어(wt-(\frac{n}{2}), ... ,wt+(\frac{n}{2}))를 예측하도록 훈련. (window_size=n)
③ one-hot vector를 dense vector인 word embedding vector로 변환


∙ 위의 수식을 그림으로 표현하면 아래와 같다.
수식에서 볼 수 있듯, 매우 간단한 구조로 softmax계층이 출력층이다.

∙ 흥미로운 점은 신경망 내부에 sigmoid같은 비선형함수가 없다는 것이다.

 

 

 


5. GloVe (Global Vectors for word representation)

5.1 알고리즘
 ∙ word2vec과 같은 단어임베딩방식 중 하나인 GloVe는 "대상 단어에 대해 corpus에 함께 나타난 단어별 출현빈도를 예측"한다.
 ∙ GloVe 알고리즘의 parameter를 구하는 수식은 아래와 같다.

Skip-Gram을 위한 신경망과 거의 유사한 형태인데,다만 이는 classification문제가 아닌
"출현빈도를 근사하는 regression"문제이기에 MSE를 사용한다.


∙마찬가지로 원핫벡터 x를 입력으로 1개의 은닉층 W를 거쳐 출력층 W'을 통해 출력벡터를 반환하는데, 
이 출력벡터는 단어 x와 함께 corpus에 출현한 모든 단어의 동시출현빈도들을 나타낸 벡터 Cx를 근사해야한다.
따라서 이 둘의 차이값인 손실을 최소화하도록 역전파 및 SGD를 통해 학습할 수 있다.

∙ 이때, 단어 x 자체의 출현빈도(= prior probability; 사전확률)에 따라 MSE Loss값이 매우 달라진다.
❗️ Cx값 자체가 클수록 손실값이 매우 커질것이기 때문!!
 ∴ f(x)는 단어의 빈도에 따라 아래와 같이 손실함수에 가중치를 부여한다.

이와 관련해 GloVe논문[https://aclanthology.org/D14-1162.pdf]에서는 threshold=100, a=3/4일 때, 최적의 결과라 명시

 

5.2 Skip-Gram. vs. GloVe
∙ GloVe는 처음에 corpus를 통해 단어별 동시출현빈도를 조사,
그에대한 출현빈도행렬을 만들고 이후 해당 행렬을 통해 동시출현빈도를 근사한다.
따라서 corpus 전체를 훑으며 대상단어와 주변 단어를 가져와 학습하는 과정을 반복하는 skip-gram보다 훨씬 학습이 빠르다.

또한, skip-gram은 corpus를 훑으며(window특성) 학습하기에
사전확률이 낮은(= 출현빈도자체가 적은) 단어에 대해서는 학습기회가 부실하다.
결과적으로 skip-gram은 비교적 부정확한 단어임베딩벡터를 학습하게 된다.

하지만 GloVe의 경우, skip-gram에 비해 이런 단점이 어느정도 보완된다.

 

5.3 정리
GloVe가 가장 뛰어난 단어임베딩방식임을 주장했지만,
skip-gram의 window_size, learning_rate, epoch수 등 hyper-parameter tuning에 따라 성능적으로 큰 차이가 없기에
적절한 방식을 시스템 구성의 제약에 따라 선택하는 것이 좋다.

 

 

 

 

 

 

 

 


6. word2vec 예제 (FastText 오픈소스)

6.1 FastText를 활용한 word embedding 학습

 

6.2 시각화
위의 방법으로 얻은 벡터들을 시각화 툴로 시각화하면 훈련결과에 대해 쉽게 살펴볼 수 있다.
아쉽게도 pytorch는 자체시각화툴을 제공하지 않기에 tensorflow의 tensorboard를 활용하면 좋은 시각화가 가능하다.

pytorch 1.1 version부터 tensorboard를 공식적으로 지원하기에 사용가능!!

 

 

 

 

 


마치며...

이전시간에는 특징벡터를 TF-IDF방식으로 구성해 사용했지만, "희소성"문제등으로
이번시간, 차원축소에 대해 살펴보았다.

기존의 선형적 차원축소방법에 비해 Neural Network는 비선형적 차원축소를 통한 특징추출이 효과적이기에 딥러닝이 기존 머신러닝보다 월등한 성과를 내는 것을 알 수 있었다.


하지만 이런 딥러닝의 비선형적 차원축소는 Cost가 높고 최적화가 어렵다.
이런 점에서 word2vec은 비선형적방법을 사용하지 않고도 매우 좋은 단어임베딩구현이 가능하며
GloVe는 더 빠르고 정확한 단어임베딩방법을 제안하였다.

위의 방법들을 사용하여 단어간 유사도를 data기반으로 효과적이면서 정확하게 계산할 수 있게 되었다.


하지만 앞으로 소개할 text classification, Language generation과 같은 기법에서는 
오늘 설명한 word embedding algorithm보다 단순히 embedding 계층을 사용하는 편이 더 정확하고 효율적이다.

이제, 문장단위로 자연어를 처리하는 방법들에 대해 본격적으로 알아보자!!

 

+ Recent posts