sampling_table parameter仅在tf.keras.preprocessing.sequence.skipgrams方法中使用一次,以测试目标单词在sampling_table中的概率是否小于从0到1 (random.random())的某个随机数。
如果你有一个很大的词汇量,并且一个句子使用了很多不常用的单词,这不是会导致该方法在创建skipgrams时跳过很多不常用的单词吗?给定一个像zipf分布一样呈对数线性的sampling_table的值,这不意味着您可以完全不跳过gram吗?
对此感到非常困惑。我正在尝试复制Word2Vec tutorial的手,我不明白sampling_table是如何被使用的。
在source code中,下面是有问题的行:
if sampling_table[wi] < random.random():
continue发布于 2021-04-24 06:25:53
这看起来像word2vec实现中常见的频繁词下采样特性。(在最初的Google word2vec.c代码发行版和Python Gensim库中,它是由sample参数调整的。)
在实践中,很可能已经预先计算了sampling_table,所以总是使用最稀有的单词,跳过一些常用单词,跳过很多最常用的单词。
这似乎是comment for make_sample_table()所反映的意图。
您可以继续使用探针值调用它,比如100个单词的词汇表,比如1000,然后看看它返回了什么sampleing_table。我猜想它会是早期接近1.0的数字(省略许多常用单词),而接近0.0的数字(保留大部分/所有稀有单词)。
这往往会提高词向量的质量,因为它将更多的相对注意力保留在中频和低频单词上,而不是过度地过度训练/过度加权大量的单词。
https://stackoverflow.com/questions/67237327
复制相似问题