앞에서 중요한 개념인 skipgram 과 negative sampling을 알아 보았다.
훈련 초기 상태에서 두개의 매트릭스를 생성한다. 하나는 Embedding 매트릭스, 또 하나는 Context 매트릭스이다.데이터세트(dataset)의 입력(input word)과 출력(outputword) 워드들의 embedding데이터가 들어 있다고 생각하자.디멘젼은 embedding_size x vocab_size 이고 embedding_size는 보통은 300인데 앞에 칼럼에서의 샘플은 50 배열을 가지고 있다. 학습 초기에는 Embedding 과 Context 매트릭스의 embedding은 랜덤값을 가지게 있게 되고 학습을 시작함에 따라 1개의 positive(target=1)와 2개의 negative(target=0) 의 샘플을 하나의 그룹으로 취하게 된다.target=1 이면 output word가 input word의 옆워드이고 0 이면 연관성이 없는 워드임을 의미한다.※ Embedding 과 Context 에는 같은 워드라도 다른 embedding값을 가지게 된다.
※ 각 매트릭스의 embedding값들이 파라미터에 해당되고 학습되는 과정에서 정답에 가까운 출력값을 얻기위해 계속해서 업데이트 될 것이다. 결국엔 Context 매트릭스는 버려지고 Embedding매트릭스를 선행학습된 파라미터로써 사용한다.
첫번째 그룹으로서 입력워드 "not" 의 embedding값을 Embedding 매트릭스에서 취하면 그에 따른 데이터세트의 출력워드 "thou", "aaron", taco" 의 embedding값을 Context 매트릭스에서 취한다.
"not" 과 각 True, False 출력워드간에 dot 연산을 하게 된다. dot 연산 -> numpy.dot(...)
이렇게 나온 + - 값이 섞인 값을 0 과 1사이의 확율값으로 sigmoid 연산으로 변환한다.
위의 결과에서 "not"의 옆단어가 "thou"이기 때문에 1 의 결과가 나와야 하는데 0.55 이므로 에러는 1-0.55=0.45 이고, "arron", "tao" 의 에러도 1-각sigmoid값 이 된다. 즉 error = target - sigmoid_scores 식이 성립된다.
여기서부터 학습 이 시작되는데 error scode 를 Embedding매트릭스의 "not"에 Context매트릭스의 "thou", "aaron", "taco" embedding값에 적용을 시키게 된다. 이렇게 하면 다음 학습에서는 좀더 타켓값에 근접(에러가 축소)하게 될 것이다.
위의 작업을 데이터셋의 다음 그룹으로 옮겨서 실행한다. 모든 그룹들이 실행되었을때 비로소 1 epoch 가 종료되게 된다.
다시 한번 상기 시키자면 word2vec의 중요한 2개의 파라미터로서 window_size 와 negative sample수를 둘 수 있다.
작은 window_size(2-15) 의 경우 높은 유사도의 의미는 서로 대체 가능하는 워드들을 뜻하며 특히 반대어(good, bad)들이 이에 해당된다.
큰 window_size(15-50) 의 경우 높은 유사도의 의미는 연관성을 중요시하는 결과를 가져온다.
논문에서의 Negative sample의 추천수는 5-20 이지만 많은 양의 데이터세트를 가지고 있다면 2-5 도 충분하다고 언급하고 있다.
'자연언어처리 (NLP)' 카테고리의 다른 글
stopwords (0) | 2024.03.13 |
---|---|
워드 토큰화 (0) | 2024.03.13 |
(Word2Vec) model training (1) | 2023.12.21 |
(Word2Vec) 2. 자연언어처리 모델 (1) | 2023.12.17 |
(Word2Vec) 1. 개념 (1) | 2023.12.17 |