나는 word2vec 내에서 skip-gram 모델을 배우려고 노력하고있다. 그러나 나는 몇 가지 기본 개념에 혼란스러워한다. 시작하려면 여기에 예제로 동기 부여 된 모델에 대한 나의 현재 이해가 있습니다. 내가 가서 파이썬 gensim을 사용하고 있습니다.word2vec 훈련 과정 설명
여기에는 세 문장으로 된 코퍼스가 있습니다.
이에서sentences = [
['i', 'like', 'cats', 'and', 'dogs'],
['i', 'like', 'dogs'],
['dogs', 'like', 'dogs']
]
, 나는 나의 어휘, V = ['and', 'cats', 'dogs', 'i', 'like']
를 확인할 수 있습니다.
는
기본 스킵 g 배합 P (w_t w_t + J)을 정의
여기서 v_w 및 v'_w는 w의 "입력"및 "출력"벡터 표현이고 이고 W는 어휘의 단어 수. 내 이해하는
이, 스킵 그램 모델은 두 개의 행렬을 포함한다 (내가 그들을 전화 할게 I 및 O) "입력/센터"단어의 벡터 표현과 "의 벡터 표현입니다 출력/컨텍스트 "단어. d = 2 (벡터 차원 또는 '크기'를 genison에서 호출 한 것으로 가정) 은 2x5 행렬이어야하고 은 5x2 행렬이어야합니다. 훈련 과정의 시작에서,이 행렬은 무작위 값 (예?)으로 채워집니다. 그래서 우리는 지금이 단어를 "개" "고양이"의 맥락에서 나타나는 확률을 계산하려면
import numpy as np np.random.seed(2017) I = np.random.rand(5,2).round(2) # 5 rows by 2 cols [[ 0.02 0.77] # and [ 0.45 0.12] # cats [ 0.93 0.65] # dogs [ 0.14 0.23] # i [ 0.23 0.26]] # like O = np.random.rand(2,5).round(2) # 2 rows by 5 cols #and #cats #dogs #i #like [[ 0.11 0.63 0.39 0.32 0.63] [ 0.29 0.94 0.15 0.08 0.7 ]]
가있을 수 있습니다 나는
특급을 수행해야합니다 ([0.39, 0.15] * [0.45 0.12])/(...) = (0.1125)은/(...)
이에 대한 몇 가지 질문 :
- 알고리즘에 대한 이해는 지금까지 맞습니까? genism 사용
- 는, I는 주어진 어레이
import gensim model = gensim.models.Word2Vec(sentences, sg = 1, size=2, window=1, min_count=1) model.wv['dogs'] # array([ 0.06249372, 0.22618999], dtype=float32)
하여이 데이터에 대해 모델을 학습 할 수 있다는 입력 행렬의 "개"또는 출력 행렬 벡터 ? 최종 모델에서 두 행렬을 모두 볼 수있는 방법이 있습니까?
- 왜
model.wv.similarity('cats','cats')
= 1입니까? 나는 이것이 "고양이"라는 단어가 "고양이"라는 단어의 맥락에서 나타나지 않을 것이라는 것을 데이터가 나타 내기 때문에 이것이 0에 가까워 야한다고 생각했습니다.
리차드 소처 (Richard Socher) (https://www.youtube.com/watch?v=ASn7ExxLZws)의 41:00 - 42:30 경에 따르면 최종 * input * 및 * output * 벡터는 일반적으로 각 단어에 대한 최종 벡터를 생성하기 위해 함께 추가됩니다. – Ben