【发布时间】:2018-08-07 07:12:14
【问题描述】:
我有一些与 skipgram 模型相关的实验。于是我开始研究和修改tutorials/embedding/word2vec_kernels.cc的tensorflow/models仓库中的优化实现。突然,我来到了完成语料库子采样的部分。
根据 Tomáš Mikolov 论文 (https://arxiv.org/abs/1310.4546, eq.5),这个词应该保持有概率
其中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;
这种变化背后的动机是什么?是否只是将与语料库大小的“某种关系”建模到这个公式中?还是对原始公式的一些改造?是凭经验选择的吗?
编辑:链接到 github 上提到的文件 https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_kernels.cc
【问题讨论】:
标签: c++ tensorflow word2vec