How does tf.random.log_uniform_candidate_sampler work while generating negative samples? I was trying to build a simple negative sampler for a Word2Vec model using TensorFlow by following the tutorial here.
From what I understand, the tf.random.log_uniform_candidate_sampler() takes as input the correct class to be exluded from sampling, the number of samples to return, and the size of the distribution to sample.
In the tutorial, the true_classes is 1, range_max is 8 and num_ns is 4. Which translates to, &quot;Return 4 samples from the distribution [0, 8), but skip 1, since it's a positive class.&quot;
However, in the tutorial, the sampler returns the following tensor: tf.Tensor([2 1 4 3], shape=(4,), dtype=int64).
My question is, why does the sampler return the class 1, even after being told to exclude it, since it doesn't constitute a negative sample?
Furthermore, in the following section of the tutorial:
target_index    : 7
target_word     : sun
context_indices : [1 2 1 4 3]
context_words   : ['the', 'wide', 'the', 'shimmered', 'road']
label           : [1 0 0 0 0]

We can see clearly that the first instance of class 1 (index 0 in context_indices) has been flagged as a positive skip-gram, whereas the second instance of 1 (index 2 in context_indices) has been labelled as a negative skip-gram.
I'd love some clarification or a correction in my understanding of this model or tutorial.
Thanks!
This parameter isn't used in this tutorial, is works other return values. you can understand this by read the 122ed line of the source code .
source code