我对 ML 相当陌生,因此作为熟悉 Keras 的学习练习,我正在尝试从数据集中学习一些 word2vec 样式的嵌入。我对skipgram 实用程序的行为感到困惑,特别是应该从make_sampling_table填充的采样表参数。我理解它背后的想法,但我看到了一些奇怪的输出。
作为一个玩具示例,假设我们有以下参数:
vocab_size = 3
sequence = [0,1,0,1,1,0]
所以一个包含 3 个单词的小词汇表,其中只有 2 个出现在序列中。生成skipgrams和标签完全没有采样表可以正常工作:
pairs, labels = skipgrams(sequence, vocab_size)
print("pairs: " + str(pairs) + " labels: " + str(labels))
OUTPUT: pairs: [[1, 1], [1, 2], [1, 1], [1, 2], [1, 1], [1, 1], [1, 1], [1, 2], [1, 1], [1, 1], [1, 1], [1, 1]] labels: [0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1]
但是当我尝试传入一个采样表以免对常用词进行过度采样时,我根本没有得到任何输出:
pairs, labels = skipgrams(sequence, vocab_size, sampling_table=make_sampling_table(vocab_size))
print("pairs: " + str(pairs) + " labels: " + str(labels))
OUTPUT: pairs: [] labels: []
我的问题是:这里发生了什么?为什么将采样表传递给 skipgrams 方法的行为会使其不产生任何输出?
谢谢您的帮助!