Word2Vec 으로 단어 임베딩하기 (Word2Vec word embeddings)

kiana
3 min readJun 13, 2019

기존의 빈도 기반 임베딩 방법들은 단어 벡터 간 관계가 없거나 (one-hot encoding) 제한적이었다 (SVD). Word2Vec은 분산된 표상 (distributed representation) 이라는 아이디어에 기반해서, 벡터의 one-hot element 가 단어의 의미를 나타내는 것이 아니라, 벡터의 모든 element 들의 조합을 통해 단어의 의미를 표현하는 방법이다. Word2Vec 은 단어를 벡터 공간에 직관적으로 매핑한다. 단어의 의미나 문장의 문맥을 보존한다는 면에서는 이전의 방법들 보다 뛰어나다.

위 그림에 나오는 것처럼 명사나 대명사, 동사의 의미를 공간에 표현해준다.

Word2Vec 의 학습방법으로는 크게 CBOW 와 skip-gram 두 가지 알고리즘이 존재한다.

Skip-gram

Skip-gram 은 중심 단어를 기준으로 주위의 단어를 맞추는 방법이다. 단어가 중심 단어의 주위에 나올 확률을 계산한다. 계산식은 아래와 같다.

J`를 최대가 되게 하는 word embeding 모델 θ 를 찾아야 한다. 즉, J 를 최소화 하는 θ 를 찾는 것이다. 위 식을 풀이하자면 이렇게 된다:

  • 내(w(tj) )가 있을 때, 내 주위의 단어들이 (w(t±j)) 나올 확률이 최대가 되게 하는 θ 를 만들어라.

확률은 서로 곱해야 하는데 곱셈이 어려우니 덧셈으로 변형하기 위해 log 를 취해준다.

중심단어(w(t)) 가 있을 때, 주위 단어(w(t±j)) 가 나타날 로그 확률을 (식 앞에 마이너스가 붙었으므로) 최소화 하는 θ 를 구해라. 그리고 이를 정리하면 맨 아래 식이 나온다:

  • o: output list (주위 단어들)
    c: center word (중심 단어)
    V(c): 중심 단어를 나타내는 벡터
    U(o): 주위 단어를 나타내는 벡터
    u * v: 두 벡터의 내적으로, 유사도를 나타낸다 (코사인 유사도와 비슷한 개념)
  • softmax 로 확률을 계산한다.

각 단어의 p(o | c) 를 구해서 그 중 가장 높은 값을 가지는 단어가 중심단어와 함께 나타날 확률이 높은 단어가 된다. 중심 단어가 주어졌을 때, 어떤 단어가 주위에 오게 될지 알게 해준다.

중심 단어가 ‘ants’ 일 경우 주위에 ‘car’ 이라는 단어가 올 확률이 높은지를 알아보는 과정이다. ‘ants’ 를 300 차원의 임베딩으로 나타내고, ‘ants’ 와 ‘car’ 의 내적을 구한다.

다음은 간단한 코드로 Word2Vec 모델을 시행해본 결과이다.

--

--