统计推理: tf.keras.preprocessing.sequence skipgrams 如何以及为什么以这种方式使用sampling_table?

问题描述

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 晚期(保留大多数/所有稀有词)。

通过为中频和低频词保留更多的相对注意力,而不是过度训练/过度加权大量词,这往往会提高词向量的质量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...