본문 바로가기

데이터 다루기/Textmining

[Text mining] 2. Word2vec (1) CBOW

728x90
반응형

안녕하세요. 이번 포스팅에서는 Word2vec에 대해서 배워보도록 하겠습니다.

Word2vec은 Mikolov가 2013년에 제안한 방법론으로, 현재 인용 수가 17000이나 됩니다.

"Distributed Representations of Words and Phrases and their Compositionality" 가 논문 제목입니다.

Word embedding에 있어서, 근처에 나오는 단어들은 유사한 벡터를 가지도록 하기 위해서 Mikolov는 신경망 구조를 채택했습니다.

"I like studying data analysis." 라는 문장이 주어져있다고 합시다.

저희는 studying 이라는 단어의 정보를 주변의 단어의 정보로부터 얻고자 합니다.

Word2vec에는 window size라는 hyperparameter가 있는데, 이는 주변 단어에 대한 정의를 가르킵니다.

window size = 2 인 경우, 관심 단어의 근접한 2개의 단어까지 주변 단어로 정의하겠다는 것입니다.

위의 문장에서 "studying"의 주변 단어는 "I", 'like", "data", "analysis" 가 되는것이지요.

이제 학습과정을 알아볼텐데요.

Word2vec에는 두 가지 학습 방법이 있습니다.

첫 번째로, 방금전의 예시처럼 주변 단어의 정보로부터 중심 단어의 정보를 유추하는 CBOW 방법과 반대로 중심 단어의 정보로부터 주변 단어의 정보를 유추하는 Skip-gram 두 가지가 존재합니다.

우선 간단한 CBOW 방법부터 말씀드리고자 합니다.

CBOW 방법은 "studying" 을 주변 단어인 "I", 'like", "data", "analysis" 로 부터 유추됩니다.

우선 첫 번째 과정으로, "I", 'like", "data", "analysis" 단어들에게서 정보를 추출해야합니다.

정보를 추출한다는 것은 각 단어들을 vector화 시키는 것입니다.

각 단어들을 vector화 시키기 위해서 우선 가장 기본적인 방법으로 one-hot encoding을 사용합니다.

그리고, look-up table 이라고 불리는 행렬에 곱함으로써 원하는 차원으로의 embedding이 진행됩니다.

그림으로 직접 보고 이해해보도록 하겠습니다.

5개의 단어에 해당하는 one-hot vector들이 존재합니다.

저희는 주변단어들로부터 중심단어를 예측하는 것이 목표입니다.

이를 위해서 우선 Look-up table을 정의해주어야 합니다.

Look-up table의 행은 word embedding 을 위한 전체 단어의 개수 (여기서는 5개)와 같은 값을 가지며, 열의 개수는 word embedding에서 변환하고자 하는 차원의 개수와 같은 값을 가집니다.

저희는 간단하게 5개의 단어들을 3차원으로 embedding 하는 것이 목적이라고 해보겠습니다.

그러면 Look-up table은 (5x3) 행렬로 정의됩니다.

이 때, 초기 행렬 값은 랜덤하게 생성해줍니다.

이제 각 단어들을 Look-up과 곱하여야 합니다.

이 때, 각 단어들이 one-hot vector이기 때문에 벡터와 행렬의 곱에서 특별한 성질을 가집니다.

그 것은 바로 Look-up table의 각 행이 연산의 결과로 나타나는 것입니다.

이러한 특징이 Look-up table 이라고 불리는 이유입니다.

주변 단어로 부터 중심 단어인 'studying'은 단순히 평균에 의해서 유추가됩니다.

여기까지가 주변단어들의 정보로부터 중심단어의 정보를 유추하는 과정입니다.

하지만 여기서 끝을 내면 안됩니다.

이 추출된 단어의 정보가 실제로 정말 studying을 잘 나타내는지를 같이 학습해주어야 합니다.

즉, 이것이 저희의 목표입니다.

3차원 벡터를 5차원 벡터로 바꿔주기 위해서 W`는 3x5 행렬의 형태를 가집니다.

초기에는 W`을 랜덤한 값으로 배정해줍니다. (계산의 용이성을 위해 예시로는 단순한 행렬을 부여했어요.)

그리고 계산된 값을 확률로 변환하기 위해서 Sigmoid화 시키면 다음과 index 3이 가장 높은 확률을 가지며, (0,0,1,0,0)으로 예측되게 됩니다.

분류 문제이다보니, Cross entropy를 최소화하는 방향으로 학습이 진행됩니다.

Word2vec은 신경망 학습을 사용하다보니, 많은 양의 데이터를 필요로하고, 데이터가 많아지면, 학습이 진행됨에 따라, embedding 성능이 좋아지는 것으로 알려져있습니다.

이 때, embedding vector는 Look-up table의 row-vector들로 정의됩니다.

Skip-gram에 대해서는 다음 포스팅에서 배워볼게요.

반응형