统计推理:tf.keras.preprocessing.sequence skipgrams 如何以及为什么以这种方式使用 sampling_table?
Statistical reasoning: how and why does tf.keras.preprocessing.sequence skipgrams use sampling_table this way?
sampling_table parameter
只在tf.keras.preprocessing.sequence.skipgrams
方法中使用了一次,测试sampling_table
中目标词的概率是否小于某个从0到1抽取的随机数(random.random()
).
如果你有一个很大的词汇量并且一个句子使用了很多不常用的词,这不会导致该方法在创建 skipgrams 时跳过很多不常用的词吗?鉴于 sampling_table 的值像 zipf 分布一样是对数线性的,这是否意味着您最终可以完全没有 skip grams?
对此很困惑。我正在尝试复制 Word2Vec tutorial 手不明白或如何使用 sampling_table
。
在 source code 中,这是有问题的行:
if sampling_table[wi] < random.random():
continue
这看起来像是 word2vec 实现中常见的频繁词下采样功能。 (原Googleword2vec.c
代码发布,PythonGensim库,通过sample
参数调整。)
在实践中,很可能 sampling_table
已经预先计算过,因此总是使用最稀有的词,跳过一些常见的词,跳过很多最常见的词。
这似乎是 comment for make_sample_table()
反映的意图。
您可以继续使用探测值来调用它,比如 1000 表示 100 个单词的词汇表,然后看看 sampleing_table
它返回了什么。我怀疑它会是早期接近 1.0
的数字(删除大量常用词),并且接近 0.0
后期(保留 most/all 稀有词)。
通过为中频和低频词保留更多的相对注意力,而不是过分 overtraining/overweighting 过多的词,这往往会提高词向量质量。
sampling_table parameter
只在tf.keras.preprocessing.sequence.skipgrams
方法中使用了一次,测试sampling_table
中目标词的概率是否小于某个从0到1抽取的随机数(random.random()
).
如果你有一个很大的词汇量并且一个句子使用了很多不常用的词,这不会导致该方法在创建 skipgrams 时跳过很多不常用的词吗?鉴于 sampling_table 的值像 zipf 分布一样是对数线性的,这是否意味着您最终可以完全没有 skip grams?
对此很困惑。我正在尝试复制 Word2Vec tutorial 手不明白或如何使用 sampling_table
。
在 source code 中,这是有问题的行:
if sampling_table[wi] < random.random():
continue
这看起来像是 word2vec 实现中常见的频繁词下采样功能。 (原Googleword2vec.c
代码发布,PythonGensim库,通过sample
参数调整。)
在实践中,很可能 sampling_table
已经预先计算过,因此总是使用最稀有的词,跳过一些常见的词,跳过很多最常见的词。
这似乎是 comment for make_sample_table()
反映的意图。
您可以继续使用探测值来调用它,比如 1000 表示 100 个单词的词汇表,然后看看 sampleing_table
它返回了什么。我怀疑它会是早期接近 1.0
的数字(删除大量常用词),并且接近 0.0
后期(保留 most/all 稀有词)。
通过为中频和低频词保留更多的相对注意力,而不是过分 overtraining/overweighting 过多的词,这往往会提高词向量质量。