나는 tensorflow 저장소에 skipgrams 구현에 따라 CBOW word2vec 모델을 구현하기 위해 노력하고 있습니다 :추적 카운트 훈련에 사용
https://github.com/tensorflow/tensorflow/blob/v0.10.0/tensorflow/models/embedding/word2vec.py
내가 TensorFlow 자습서 다음과 같은 단순화 된 버전을 previously implemented, 그래서 컨텍스트 임베딩을 얻기 위해 그래프의 작은 부분뿐만 아니라 데이터 일괄 처리 기능을 수정해야한다는 것을 이해합니다.
스킵 그램 구현에서 데이터 일괄 처리 함수는 행 348-351에서 사용됩니다. 다음과 같이
나의 이해에서(words, counts, words_per_epoch, self._epoch, self._words, examples,
labels) = word2vec.skipgram(filename=opts.train_data,
batch_size=opts.batch_size,
window_size=opts.window_size,
min_count=opts.min_count,
subsample=opts.subsample)
, 할당 된 변수는 다음과 같습니다
words
:counts
어휘의 조건 : 총 단어 : 코퍼스words_per_epoch
에서 사용하는 용어의 연결 수는 코퍼스에서 계산하십시오.self._epoch
: 사용 된 에포크의 현재 수 ,
self._words
은 : 사용 교육 사례의 현재 수는examples
: 교육 사례의 현재 배치labels
: 교육의 현재 배치,
내가 counts
, words_per_epoch
, words
의 텐서를 복제하는 데 성공했다 레이블 examples
및 labels
. 그러나 self._epoch
과 self._words
은 나를 벗어났습니다. 내 이해가 정확하다면, 나는 사용 된 훈련 예제의 수를 추적 할 수 있어야합니다. 그러나 이것은 sample batching function에서 제공하지 않습니다. 카운트는 나중에 멀티 스레드 방식으로 트레이닝 루프를 종료하는 데 사용되므로 루프를 사용하여 카운트를 더할 수 없습니다.
나는 tensorflow 연산의 비트가 C++로 구현된다는 것을 알고 있습니다. 그러나 C++에 익숙하지 않으므로 Python을 사용하여 이러한 부분을 복제해야합니다.
self._words
의 텐서를 얻으려는 제안이 있으면 좋겠습니다. 텐서는 기본적으로 예제/레이블의 새 배치가 호출 될 때마다 증가해야합니다. 이것으로 다른 텐서를 얻으려면 self._epoch = self._words // words_per_epoch
을 간단히 사용할 수 있습니다.