我想基于对tensorflow库中的skipgrams实施执行CBOW word2vec型号:跟踪计数在训练中使用
https://github.com/tensorflow/tensorflow/blob/v0.10.0/tensorflow/models/embedding/word2vec.py
我有previously implemented继TensorFlow教程的简化版本,所以我知道我将不得不修改数据批处理函数以及图的一小部分来获取上下文嵌入。
在skipgram实现中,数据批处理函数用于行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
:当前批次的培训标签
我已成功地复制了张量words
,counts
,words_per_epoch
, examples
和labels
。但是,self._epoch
和self._words
已经躲过了我。如果我的理解是正确的,我需要能够跟踪所用训练样例的数量。但是,这不是由sample batching function提供的。这些计数稍后以多线程方式用于终止训练循环,因此我不能简单地使用循环来合计计数。
我知道tensorflow ops的各个部分是用C++实现的。但是,由于我对C++不熟悉,我将不得不使用Python复制这些部分。
如果我能得到一些建议来获得self._words
的张量,那将是非常好的。张量基本上只在每次调用一批新的示例/标签时才增加。这样,我可以简单地使用self._epoch = self._words // words_per_epoch
来获得其他张量。