问题描述
sampling_table parameter
只在 tf.keras.preprocessing.sequence.skipgrams
方法中使用一次,以测试 sampling_table
中目标词的概率是否小于某个从 0 到 1 的随机数({ {1}})。
如果你有一个很大的词汇量并且一个句子使用了很多不常用的词,这会不会导致方法在创建skipgrams时跳过了很多不常用的词?给定对数线性的采样表的值,就像 zipf 分布一样,这是否意味着您最终可以完全没有跳跃克数?
对此感到非常困惑。我正在尝试复制 Word2Vec tutorial 手不明白或如何使用 random.random()
。
在 source code 中,这是有问题的行:
sampling_table
解决方法
这看起来像 word2vec 实现中常见的频繁词下采样功能。 (在原始 Google word2vec.c
代码版本和 Python Gensim 库中,它由 sample
参数调整。)
实际上,很可能已经预先计算了 sampling_table
,以便始终使用最稀有的词,跳过一些常用词,跳过一些最常用的词。
这似乎是 comment for make_sample_table()
所反映的意图。
您可以继续使用探测值调用它,例如对 100 个单词的词汇表说 1000,然后看看它返回什么 sampleing_table
。我怀疑它会在早期接近 1.0
(删除大量常用词),并接近 0.0
晚期(保留大多数/所有稀有词)。
通过为中频和低频词保留更多的相对注意力,而不是过度训练/过度加权大量词,这往往会提高词向量的质量。