We-Co

[We-Co] word2vec - Tensorflow, 자연어처리 본문

Python/Tensorflow

[We-Co] word2vec - Tensorflow, 자연어처리

위기의코딩맨 2022. 2. 3. 16:16
반응형

안녕하세요. 위기의 코딩맨입니다.

오늘은 word2vec에 대해서 간단하게 알아보도록 하겠습니다.

 

[ word2vec ]

2013년도에 구글 직원인 토마스 미콜로프를 통해서 공개되었습니다.

단어 벡터간의 유사도를 반영할 수 있도록 단어의 의미를 수치화 하는 대표적인 방법의 모델이며

CBOW 방식과 Skpi-Gram의 2가지 방식으로 구현할 수 있습니다.

 

2가지 방식을 들어가기 앞서, 

http://w.elnn.kr/search/

해당 홈페이지를 들어가보면 단어에 대한 벡터 연산을 진행해 볼 수 있는 사이트 입니다.

단어를 더하고 빼며 유사도를 계산하여 답변을 추출하는 사이트입니다.

 

예를들면

'미국 - 뉴욕 + 서울 = 한국'

'한국 - 서울 + 도쿄 = 일본'

미국과 한국의 수도를 빼고 서울, 도쿄를 입력하게 되면 수도에 대한 나라의 답변을 추출할 수 있는 것을 확인할 수 있습니다. 

이런 방식이 가능한 것은 단어의 의미를 수치화 하여 모델링 한 것에 대한 결과입니다.

 

 

[ CBOW ]

Continuous Bag-Of-Words라고 하며,

소스 컨텍트에서 타겟 단어를 예측하는 방식으로 사용하며, 비교적 작은 규모의 데이터 셋에 적합 합니다.

예를들면, "The cat sat on the mat"의 문장에서 ['The', 'cat', 'sat', 'on', 'the' ]으로 'mat'를 예측하는 방식을 의미합니다.

주변 단어들을 통해서 타겟 단어를 예측하는 방식으로 생각하시면 됩니다.

 

이러한 타겟단어를 예측하기 위해서는 앞, 뒤의 단어를 선택해야하는데 이 범위를 윈도우(Window)라고 합니다.

 "The cat sat on the mat"  타겟 단어를 sat으로 잡고 윈도우 사이즈를 1로 설정하면 cat, on이  해당 범위로 설정이 됩니다.

만약 2로 설정하게 되면  "The cat sat on the mat"로 설정이 됩니다.

 

타겟 단어와 윈도우 사이즈에 해당하는 단어들을 변경해가며 학습을 진행하기 위한 데이터 셋을 만들게 되는데 이 방식을  슬라이딩 윈도우라고 합니다.

[출처: https://simonezz.tistory.com/35 ]

단어들을 one-hot encoding 방식으로 벡터화를 진행하고,

projection layer의 크기 N, 각 단어의 임베이딩하고 나온 벡터의 차원을 의미합니다.

input, projection layer의 사이의 가중치 W는 V * N의 행렬이며

V는 단어 집합의 크기를 의미합니다.

주변단어로부터 타겟 단어를 맞추기위해 W와 W'를 학습하며 나아가는 모델이라고 생각하시면 됩니다.

 

총 4개의 입력된 on-hot-vector와 가충치 행렬 W를 곱한 벡터 v가 4개의 값이 나오게 되는데 이러한 벡터의 평균을 구하기위해

v의 요소들을 더한 뒤, 2 * window size를 곱하고 나눠주면 됩니다. 그렇게되면 (합) / 4의 식이 진행됩니다.

 

출처: 딥러닝을 이용한 자연어처리

 

 

 

위에서 구한 평균 벡터 v를 출력층 가중치 행렬 W'와 곱하여 얻어진 값 z를 소프트맥스 함수를 사용하여 확률 값을 정하여 아웃풋을 출력하여 확률이 가장 높은 것이 예측한 결과로 나타납니다.

출처: 딥러닝을 이용한 자연어처리

 

[ skip- gram ]

Skip-gram은 CBOW와는 반대로 타겟 단어에서 주변 단어를 예측하는 방식입니다.

 

‘ABCDE’

 

윈도우 사이즈를 1로하고 타겟단어를 C로하면 BCD가 컨텍스트가 됩니다.

윈도우 사이즈를 2로하면 C를 기준으로 AB, DE 를 2개씩 기준으로 잡혀

ABCDE가 됩니다.

 

형태로는 ([B,D],C),([C,E],D)와 같은 형식으로 구성됩니다. 

Skip-Gram 모델은 타켓 단어로부터 컨텍스트를 예측합니다. 

(C,D),(C,B)(D,C)(D,E) 

해당 형태로 트레이닝 데이터를 구성합니다.

 

타겟단어를 통해서 주변단어를 예측하므로 투사층에서 벡터들의 평균을 구하는 과정은 없고,

Skip-gram방식이 CBOW방식보다 여러 논문에서 성능 비교를 했을때, Skip-gram방식이 좋다고 알려져 있습니다. 

 

 

오늘은 간단하게 word2vec의 CBOW와 skip-gram에 대해서 알아보았습니다!

반응형