理解word2vec中的输入和标签(TensorFlow)

时间:2017-11-15 08:48:23

标签: arrays machine-learning tensorflow nlp word2vec

我正在尝试正确理解tensorflow "Vector Representations of Words"教程中的batch_inputbatch_labels

例如,我的数据

 1 1 1 1 1 1 1 1 5 251 371 371 1685 ...

...以

开头
skip_window = 2 # How many words to consider left and right.
num_skips = 1 # How many times to reuse an input to generate a label.

然后生成的输入数组是:

bach_input = 1 1 1 1 1 1 5 251 371 ....  

这是有道理的,从2(=窗口大小)后开始然后连续。标签:

batch_labels = 1 1 1 1 1 1 251 1 1685 371 589 ...

我不太了解这些标签。每个输入权限应该有4个标签(窗口大小2,每侧)。但batch_label变量的长度相同。

来自tensorflow教程:

  

skip-gram模型有两个输入。一个是一整批整数   表示源上下文单词,另一个表示目标   词语的

根据教程,我已将两个变量声明为:

  batch = np.ndarray(shape=(batch_size), dtype=np.int32)
  labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)

我应该如何解释batch_labels

1 个答案:

答案 0 :(得分:3)

  

每个输入权限应该有4个标签(窗口大小2,每侧)。但batch_label变量的长度相同。

关键设置为 num_skips = 1 。此值定义每个单词生成的(input, label)个元组的数量。请参阅下面不同num_skips的示例(我的data序列似乎与您的不同,对不起)。

示例#1 - num_skips=4

batch, labels = generate_batch(batch_size=8, num_skips=4, skip_window=2)

它为每个单词生成4个标签,即使用整个上下文;由于batch_size=8在此批次中只处理了2个字( 12 6 ),其余的将进入下一批:

data = [5239, 3084, 12, 6, 195, 2, 3137, 46, 59, 156, 128, 742, 477, 10572, ...]
batch = [12 12 12 12  6  6  6  6]
labels = [[6 3084 5239 195 195 3084 12 2]]

示例#2 - num_skips=2

batch, labels = generate_batch(batch_size=8, num_skips=2, skip_window=2)

在这里,您希望每个单词在batch序列中出现两次;从4个可能的单词中随机抽取2个标签:

data = [5239, 3084, 12, 6, 195, 2, 3137, 46, 59, 156, 128, 742, 477, 10572, ...]
batch = [ 12  12   6   6 195 195   2   2]
labels = [[ 195 3084   12  195 3137   12   46  195]]

示例#3 - num_skips=1

batch, labels = generate_batch(batch_size=8, num_skips=1, skip_window=2)

最后,此设置与您的设置相同,每个字只生成一个标签;每个标签都是从4字上下文中随机抽取的:

data = [5239, 3084, 12, 6, 195, 2, 3137, 46, 59, 156, 128, 742, 477, 10572, ...]
batch = [  12    6  195    2 3137   46   59  156]
labels = [[  6  12  12 195  59 156  46  46]]
  

我应该如何解释batch_labels?

每个标签都是从上下文预测的中心词。但生成的数据可能会使用并非所有 (context, center)元组,具体取决于生成器的设置。

另请注意,train_labels张量是1维的。 Skip-Gram训练模型以预测来自给定中心词的任何上下文词,而不是所有4个上下文词一次。这解释了为什么所有培训对(12, 6)(12, 3084)(12, 5239)(12, 195)都有效。