딥러닝/이론

[NLP] word2vec ( CBOW , Skip-gram)

무룡룡 2022. 1. 27. 23:19

1. 기존 문제점

 

BOW, TF-IDF 등 빈도 기반의 임베딩 기법엔 큰 문제가 있다.

 

1) 대규모 데이터를 처리할때의 메모리 과부화 문제

 

2) 한번에 학습데이터 전체를 진행하여 학습을 통해 개선이 어려움

 

이 두가지 문제점은 ~~~ 에서 비롯된다.

 

 

 

 

 

 

2. Word2Vec

 

빈도기반의 임베딩 기법의 문제점을 추론 기반의 word2vec은 2가지 알고리즘을 이용한다

 

1) CBOW

 

-> 주변 단어를 이용해 중간 단어를 예측하는 방법으로 2개의 input과 1개의 output을 가진다

 

CBOW의 아키텍쳐

 

2) Skip-gram 

 

-> 주변 단어를 이용해 중간 단어를 예측하는 방법으로 1개의 input과 2개의 output을 가진다.

 

Skip-gram의 아키텍쳐

 

 

기본적인 과정은 두 알고리즘이 동일하다.

 

 

(1)  ~ (2) 입력층

 

벡터로 표현된 입력값을 받으며 이때 초기의 가중치값은 랜덤한 값으로 정해진다.

 

또한 이때 은닉층의 차원을 특정한 값으로 정해줌으로써 기존의 빈도기반 임베딩의 문제가 해결된다.

 

 

 

(3) ~ (4) 은닉층과 출력층

 

CBOW의 경우, 두 W_in 의 평균을 은닉층으로 가진다

 

(반대로 Skip-gram 은 출력층의 오차 역전파를 실시할때 이러한 과정을 거친다)

 

은닉층과 W_out 을 곱해 점수를 산출한다.

 

 

 

(5) Softmax와 cross entropy

 

앞서 얻은 점수를 0부터 1의 값을 갖는 확률로 변환하기 위해 softmax를 적용한다.

 

pred (예측 레이블) - [ 0.07, 0.122, 0.09, 0.11, 0.09 ... ]

 

vs

 

ans (정답 레이블) - [ 0, 1, 0, 0, 0 .... ]

 

두 레이블에 대한 cross entropy Loss 값을 계산한다.

 

 

 

(6) 오차 역전파

 

계산된 Loss 값을 오차 역전파를 통해 가중치를 갱신한다.

 

이때 softmax의 오차역전파 값은 pred 에서 ans 를 뺀 값이다 

 

W_in 까지 오차역전파를 적용하여 가중치를 갱신한다.

 

최종적으로 산출된 가중치값이 단어들의 임베딩값을 의미한다.

 

 

 

 

 

이러한 과정을 벡터의 각 토큰마다 실시한다.

 

doc[0] = [ 0 , 1, 0, 0 .... ] 에서 len( doc[n] ) 이 k 라고 했을때

 

이러한 과정을 1~ k 까지 반복한다.

 

word2vec의 반복과정

 

 

 

 

 

3. 결과 예시

 

 tSNE 시각화 - Word2Vec model

 

 

 

 

주변 단어가 비슷한 단어들은 유사한 배열이 될 것이다.

 

즉 배열은 단어들의 주변 맥락을 표현하는 것이고 이를 더하고 뺌으로서 단서의 관계를 파악 할 수가 있다.

 

 

 

 

 

 

 

 

3. 한계점

 

 

 

1) 단어 동시 등장 정보 (word’s of co-occurrence)

 

이러한 특성은 빈도수 기반의 기존 방법론들과 본질적으로 다르지 않다

 

" 나는 ___에 간다 "

위 예시에서 빈칸에는 ‘학교’, ‘집’, ‘회사’ 따위가 모두 들어갈 수 있다. ‘학교’, ‘집’, ‘회사’라는 단어가 위 예시 문장과 같은 경우에서만 쓰였다면 명백히 다른 단어임에도 불구하고 임베딩 벡터 공간에서 세 단어벡터의 유사도가 매우 높게 나타나게 됩니다.

물론 학습 말뭉치가 충분히 크다면 세 단어가 사용된 사례(문장)가 다양하기 때문에 ‘학교’, ‘집’, ‘회사’ 벡터 간 거리가 충분히 멀게(코사인 유사도가 작게) 임베딩이 된다. 하지만 의미상 아무런 관련이 없어 보이는 단어임에도 벡터공간에 매우 가깝게 임베딩되는 사례가 자주 발생한다.

 

반대로 유사한 단어임에도 멀게 임베딩이 되기도 한다. 예를들어, teach와 teacher, teachers 세 단어는 의미적으로 유사한 단어임이 분명하다. 그런데 단어의 의미는 고려하지 않아 이러한 단어들을 개별적으로 임베딩하기 때문에 셋의 임베딩값이 유사하게 구성되지 않을 수도 있다.

2) 출현 빈도가 낮은 단어 임베딩


Word2Vec등과 같은 기존의 방법들은 Distribution hypothesis를 기반으로 학습하는 것이기 때문에, 출현횟수가 많은 단어에 대해서는 잘 Embedding이 되지만, 출현횟수가 적은 단어에 대해서는 제대로 Embedding이 되지 않는다.
(Machine learning에서, Sample이 적은 단어에 대해서는 Underfitting이 되는 것처럼)

3) 단어사전에 없는 단어 처리


단어사진에 없는 새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야 한다

 

 

 

 

 

 

 

 

 

참고 :

 

[토크ON세미나] 컨텐츠 기반 모델 - Word2Vec - (SKplanet Tacademy)

[딥러닝 자연어처리] Word2Vec - (허민석)ㄹ

‍word2vec 실습 - (강승식(교원-소프트웨어전공))
파이썬으로 하는 텍스트마이닝 - 단어 임배딩 (Word2Vec) - (해탈하는다락방)

Learn TensorFlow, the Word2Vec model, and the TSNE algorithm using rock bands - (Patrick Ferris) (https://medium.com/free-code-camp/learn-tensorflow-the-word2vec-model-and-the-tsne-algorithm-using-rock-bands-97c99b5dcb3a)