c++ - tensorflow/models 中的 Skip-Gram 实现 - 频繁词的子采样

标签 c++ tensorflow word2vec

我脑子里有一些与 skipgram 模型相关的实验。所以我开始研究和修改tutorials/embedding/word2vec_kernels.cctensorflow/models库中的优化实现。突然,我来到了语料库子采样完成的部分之上。 根据 Tomáš Mikolov 的论文(https://arxiv.org/abs/1310.4546,eq.5),这个词应该保留概率

eq1

其中t表示阈值参数(根据论文选为10^-5),f(w)词频w, 但是 word2vec_kernels.cc 中的代码如下:

float keep_prob = (std::sqrt(word_freq / (subsample_ * corpus_size_)) + 1) *
                  (subsample_ * corpus_size_) / word_freq;

可以将其转换为先前呈现的符号 eq2

这种变化背后的动机是什么?只是将与语料库大小的“某种关系”建模到这个公式中吗?或者它是对原始公式的一些改造?它是根据经验选择的吗?

编辑:链接到 github 上提到的文件 https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_kernels.cc

最佳答案

好吧,我想如果没有 corpus_size,该图看起来与原始公式有些相同。语料库大小在公式中添加了与语料库大小的关系,并且“它适用于大数字”,因此我们可以计算丢弃/保留概率,而无需将词频归一化为适当的分布。

关于c++ - tensorflow/models 中的 Skip-Gram 实现 - 频繁词的子采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012064/

相关文章:

c++ - 使用动态矩阵进行特征分解时出现错误

python - TensorFlow - `keys` 或 `default_value` 与表数据类型不匹配

java - 为多个模型指定 CPU 或 GPU tensorflow java 的工作

java - 是否可以在 deeplearning4j.word2vec 中使用 gensim word2vec 模型?

machine-learning - Word2Vec如何确保反义词在向量空间中相距较远

python - Tensorflow - 在 tensorflow.models.embeddings 中没有名为 'embeddings' 的模块

c++ - 涉及c++20概念时gcc和clang行为不一致

c++ - 为什么参数推导在这个模板模板参数中不起作用

c++ - 使用 B 树和 B+-树的范围查询

python - 如何使用连续列和分类列进行 tf.estimator