Tensorflow实现word2vec

lol*_*ter 13 python word2vec tensorflow

该Tensorflow教程这里指的是他们的基本实现,你可以在github上找到这里,这里的Tensorflow作者实现word2vec矢量嵌入培训/评估与Skipgram模型.

我的问题是关于generate_batch()函数中(目标,上下文)对的实际生成.

这一行上, Tensorflow作者从单词滑动窗口中的"中心"单词索引中随机抽取附近的目标索引.

但是,他们还保留了一个数据结构targets_to_avoid,他们首先添加"中心"上下文单词(当然我们不想采样),但在我们添加它们之后还要添加其他单词.

我的问题如下:

  1. 为什么不从这个滑动窗口围绕这个词进行采样,为什么不只是有一个循环并使用它们而不是采样?他们担心性能/内存word2vec_basic.py(他们的"基本"实现)似乎很奇怪.
  2. 无论1)的答案是什么,为什么他们都在抽样并跟踪他们选择的内容targets_to_avoid?如果他们想要真正随机,他们会使用替换选择,如果他们想确保他们获得所有选项,他们应该只使用一个循环并首先获得所有选项!
  3. 内置的tf.models.embedding.gen_word2vec也是这样工作的吗?如果是这样我在哪里可以找到源代码?(在Github repo中找不到.py文件)

谢谢!

use*_*382 1

有一个名为的参数num_skips,表示从单个窗口生成的(输入,输出)对的数量:[skip_window targetskip_window]。因此,num_skips限制我们用作输出单词的上下文单词的数量。这就是generate_batch函数的原因assert num_skips <= 2*skip_window。该代码只是随机选取num_skip上下文单词来构建与目标的训练对。但我不知道如何num_skips影响性能。