본문 바로가기

데이터와 함께 탱고를/머신러닝

Word2Vec 과 Doc2Vec

1. W2V (Word2Vec)

개념

2013년 구글 연구팀이 발표한 단어 임베딩 모델이다.
주변에 있는 단어들끼리 코사인 유사도가 높도록 임베딩한다.

방법

기본적으로, 주위에 있는 단어들을 예측하는 과정에서 각 단어 벡터가 학습된다.
예측하는 방법에는 CBOW 와 Skip-gram 두 방식이 있다.

출처 : http://solarisailab.com

  • CBOW
    • 주위에 있는 단어들을 가지고 중간에 위치하는 하나의 단어를 예측한다.
  • Skip-gram
    • 중간에 위치하는 하나의 단어를 가지고 주위에 있는 단어를 예측한다.
    • 일반적으로 Skip-gram 이 학습 데이터가 더 많아서 CBOW 보다 임베딩 품질이 더 우수하다.

Skip-gram 에서 학습 데이터를 구축하는 방법은 다음과 같다.
형태소 분석이 끝난 문장 코퍼스(단어 단위로 띄어쓰기가 되어있는 글 모음)가 있을 때,
우리가 설정한 윈도우 사이즈만큼 해당 코퍼스 내 각 단어를 중심단어로 두고 단어 쌍을 만들며 학습데이터를 만든다.
예를 들어, [개울가 에서 속옷 빨래 를 하는 남녀] 는 다음과 같이 구성될 수 있다.

  • 윈도우 사이즈 : 2
  • 중심 단어 : 속옷
  • 구성되는 학습데이터 : [속옷, 개울가], [속옷, 에서], [속옷, 빨래], [속옷, 를]

이렇게 구성된 데이터는 포지티브 샘플이라고 한다.

다음으로 네거티브 샘플이라는 것을 구성할 건데, 위 중심단어와 주변 단어가 아닌 단어를 랜덤하게 뽑아서 단어쌍을 구성하는 것이다.
예를 들어, [속옷, 책상], [속옷, 사과] 등이 될 수 있다.

이런 네거티브 샘플은 1개의 포지티브 샘플당 k개로 구성한다. k 는 하이퍼 파라미터로, 작은 코퍼스에서는 5~20 , 큰 코퍼스에서는 2~5 가 적당하다고 한다.
예를 들어, k = 2 일 경우, [속옷, 개울가], [속옷, 책상], [속옷, 사과] 가 한 학습의 인풋 데이터가 되겠다.
W2V 은 더 나아가, 이 네거티브 샘플링을 할 때 보다 섬세하게 샘플을 뽑아낸다. 즉, 자주 등장하지 않는 희귀한 단어가 잘 뽑힐 수 있도록 단어 등장 확률을 설계했다.

한편, 서브샘플링이란 기법을 통해 모든 데이터(단어 쌍)을 학습하지 않고, 일부만 학습한다. 이 때, 자주 등장하는 단어를 자주 학습시키는 것은 비효율적이라고 보아, 자주 등장하지 않는 단어가 서브샘플에 들어가도록 단어의 서브샘플링 확률을 설계했다.

W2V 은 이제 이렇게 구성한 학습 데이터를 가지고 이진분류 학습을 한다. 즉 해당 쌍이 포지티브 샘플(+) 인지, 네거티브 샘플(-) 인지 학습한다.
이 때, 업데이트 되는 매트릭스는 2가지인데, 둘 다 d 차원을 단어 벡터의 행렬이다.
하나의 매트릭스 U는 각 중심 단어를 행으로 d 차원을 가지는 행렬이고,
다른 하나 V 는 각 주변 단어를 행으로 d 차원을 가지는 행렬이다.
여기서 d 차원은 하이퍼 파라미터다. 보통 100~300 정도가 적당하다고 한다.

결과적으로 이진분류를 학습하며 두 매트릭스는 업데이트 되간다.
학습이 완료되면 이 U 또는 V 를 단어의 임베딩으로 사용하면 된다.

핵심 키워드

  • Skip-gram, 포지티브 샘플링, 네거티브 샘플링, 서브 샘플링, 이진 분류

2. D2V(Doc2Vec) 이란?

개념

W2V 에 이어 2014년 구글 연구팀이 발표한 문서 임베딩 모델이다.
타겟 단어와 이전 단어 k 개가 주어졌을 때, 이전 단어들 + 해당 문서의 아이디로 타겟 단어를 예측하는 과정에서 문맥이 비슷한 문서 벡터와 단어 벡터가 유사하게(코사인 유사도) 임베딩된다.

방법

예측하는 방법에는 PV-DM 과 PV-DBOW 두 방식이 있다.

PV-DM 에서 학습 데이터를 구축하는 방법은 다음과 같다.
예를 들어, paragraph_1 이라는 문서에서 the cat sat on the mat 라는 문장이 있을 때, 다음과 같이 학습 데이터가 구성된다.

  • 윈도우 사이즈 : k = 3
  • [pragraph_1, the, cat, sat] - on
  • [pragraph_1, cat, sat, on] - the
  • [pragraph_1, sat, on, the] - mat

D2V은 paragraph 에서 단어를 예측하며 로그 확률 평균을 최대화하는 과정에서 학습된다.
paragraph_id 가 학습의 입력 데이터로 들어가기 때문에, 문맥이나 단어가 paragraph 벡터에 녹아든다는 생각을 해볼 수 있다.

각 문서 paragraph 는 별도의 문서의 수 x d 차원 의 행렬에 담기는데,
학습이 완료된 후 이 행렬을 이용하여 paragraph 의 임베딩된 벡터를 사용하면 된다.

PV-DBOW 는 반대로, 하나의 paragraph_id 로 해당 문서 내 단어들을 예측하는 과정에서 학습된다.

핵심 키워드

  • paragraph_id, 로그 확률 평균, PV-DM, PV-DBOW