이 sample code은 교육에 대한 몇 가지 독립적 인 스레드를 사용하는 그 이유는, "다중 스레드 word2vec 미니 일괄 스킵 그램 모델"이라고합니다. Word2Vec은 단일 스레드로도 교육 할 수 있지만이 튜토리얼에서는 word2vec가 병렬로 수행 될 때 더 빨리 계산된다는 것을 보여줍니다.
입력, 레이블 및 에포크 텐서는 tutorials/embedding/word2vec_kernels.cc
파일에 구현 된 word2vec.skipgram_word2vec
네이티브 함수에 의해 제공됩니다. 여기서 문장의 전체 모음이 처리되면 current_epoch
은 텐서 인 것을 알 수 있습니다.
당신에 대해 요구하는지 방법은 실제로 매우 간단하다
는
def _train_thread_body(self):
initial_epoch, = self._session.run([self._epoch])
while True:
_, epoch = self._session.run([self._train, self._epoch])
if epoch != initial_epoch:
break
첫째, epoch
이 증가 될 때까지이 훈련을 호출, 현재의 시대를 계산합니다. 즉,이 메서드를 실행하는 모든 스레드는 을 정확히 하나의 획을 띄게됩니다. 각 스레드는 한 번에 한 단계 씩 다른 단계와 병렬로 수행합니다.
self._train
은 (
build_graph
방법 참조)와 전류
examples
labels
로부터 계산 된 감소 함수 (
optimize
방법 참조), 최적화 연산이다. 이 텐서의 정확한 값은 네이티브 코드 (즉,
NextExample
)입니다. 기본적으로
word2vec.skipgram_word2vec
의 각 호출은 최적화 함수에 대한 입력을 형성하는 예제 및 레이블 세트를 추출합니다. 희망, 그것은 지금 그것을 명확하게한다.
그런데이 모델에서는 음수 샘플링이 아니라 연습 할 때 NCE loss을 사용합니다.