Dev.log

Word2Vec 본문

자연어처리

Word2Vec

포켓몬빵 2022. 2. 18. 16:27

Word2vec은 ‘word to vector’로, 단어를 벡터의 형태로 나타내려는 의미를 담고 있는데, 이는 단어를 벡터화하는 임베딩(embedding) 방법론이며 추론 기반의 분석기법이다. 단어를 추론하는 과정에서 신경망을 이용하고 이러한 과정에서 ‘Word2vec’방법론이 등장하였습니다.

 

Vector

데이터를 다룰 때 데이터는 크게 스칼라(scalar)와 벡터 (vector)로 나누어집니다. 스칼라와 벡터는 물리학에서 어떠한 값의 ‘속성’을 나타 내는 개념이다. 스칼라는 수치로 표현할 수 있는 값으로, 대표적으로 넓이, 시간 온도 등이 있다. 벡터는 크기와 동시에 방향을 갖는 값으로 보통 좌표계에서 x,y,z 축으로 설명되며, 속도, 힘 등이 벡터 값이라 할 수 있다. 우리가 흔히 알고있는 머신러닝에서는 선형대수의 지식이 많이 포함되므로 데이터를 주로 벡터 형태로 다루게 됩니다. Python에서 벡터는 주로 C++ 기반인 NumPy를 통해서 데이터를 행렬(array)로 변환한 후 주로 다루고 있습니다.

 

Word2Vec

Word2Vec은 2013년 구글 연구 팀이 발표한 기법으로 현재까지도 가장 널리 쓰이고 있는 단어 임베딩 모델입니다. Word2Vec 기법은 두 개의 논문으로 나누어 발표가 되었는데, 첫 번째 논문에서는 CBOW와 Skip-gram이라는 모델이, 두번째 논문에서는 네거티브 샘플링 등 학습을 최적화하는 기법이 제안되었습니다.

 

CBOW

CBOW는 word2vec의 사용되는 모델 중 하나로, 맥락으로부터 중심 단어를 추론하는 용도의 신경망입니다. 예를 들어 “he says manners makes man” 이라는 문장에 서 manners를 중심 단어로 보고 윈도우 크기가 2일 때, ‘맥락’인 주변 단어 he, says, makes, man을 갖고 중심 단어인 ‘manners’를 추론하는 방식입니다.

 

CBOW 모델 구조는 크게 Input layer, Projection layer, Output layer가 있고, 입력층에서 투영 층을 거쳐 출력층에 도달한다. 가운데 층이 투영 층인 이유는 입력층 에서 투영 층으로 값이 전해질 때 가중치 값이 곱해지는 것이 아닌, 단순히 그대로 전 달되는 과정에 가까우므로 투영층이라고 불린다. 입력값은 ‘중심 단어’ 전후 2개씩 4 개의 단어가 입력되고 출력값은 ‘중심 단어’ 한 개가 출력됩니다.

Skip-gram

word2vec에서 사용되는 또 다른 모델로, CBOW 모델이 주변 단어로부터 중 심 단어를 추론하는 신경망이었다면, Skip-Gram 모델에서는 반대로 중심 단어 가 주어지고 주변 단어를 예측하는 신경망이다. 예를 들어, “he says manners make the man”이라는 문장에서 ‘manners’를 중심 단어로 본다면, ‘manners’ 로부터 주변 단어를 추론하는 방식이다.

Skip-gram 모델은 CBOW 모델을 이해했다면, 매커니즘 자체는 동일 하기 때문에 쉽게 받아들일 수 있습니다. 구조는 CBOW 모델과 같이 Input layer, projection layer, output layer가 있고 값은 입력층에서 투영층 을 거쳐 출력층으로 전달된다. 중심 단어로부터 주변 단어를 추론하는 방식 이므로 위 예에서는 입력값이 한 개의 중심 단어가 되며, 윈도우크기를 2라 고 가정했을 때 출력값은 4개가 됩니다. 또한 여러 논문에서 Word2vec의 CBOW와 Skip-gram을 비교하였을 때,

대게 Skip-gram의 성능이 좋게 나온걸 확인 할 수 있습니다. 

 

Word2vec을 사용하기 위해서는 파이썬 기반의 텍스트 마이닝 라이브러리인 Gensim을 다운 받아 사용할 수 있습니다. Gensim은 여러 문장이나 문서에 내재되어있는 규칙, 또는 토픽들을 찾아낼 수 있는 토픽 모델링 및 Word2vec을 지원 합니다.

from gensim.models import Word2Vec
from gensim.models import KeyedVectors

model = Word2Vec(sentences=result, size=100, window=5, min_count=5, workers=4, sg=0)

여기서 Word2Vec의 파라미터들을 살펴보면 size는 차원의 수, window는 포함할 주변 단어의 수, min_count 는 총 빈도수가 이보다 낮은 제외시킨 다는 것을 의미하며, worker는 CPU의 코어수를 의미합니다. 그리고 마지막으로 sg의 0 과 1을 선택하여 Word2Vec내 CBOW 모델 혹은 Skip-gram 모델을 선택 할 수 있습니다

(CBOW 모델 : 0 , Skip-gram 모델 :1).

 

Comments