0

来自https://github.com/RaRe-Technologies/gensim/blob/master/docs/notebooks/doc2vec-wikipedia.ipynb的 Doc2Vec 维基百科教程

for num in range(0, 20):
    print('min_count: {}, size of vocab: '.format(num), 
           pre.scale_vocab(min_count=num, dry_run=True)['memory']['vocab']/700)

输出是:

min_count: 0, size of vocab: 8545782.0
min_count: 1, size of vocab: 8545782.0
min_count: 2, size of vocab: 4227783.0
min_count: 3, size of vocab: 3008772.0
min_count: 4, size of vocab: 2439367.0
min_count: 5, size of vocab: 2090709.0
min_count: 6, size of vocab: 1856609.0
min_count: 7, size of vocab: 1681670.0
min_count: 8, size of vocab: 1546914.0
min_count: 9, size of vocab: 1437367.0
min_count: 10, size of vocab: 1346177.0
min_count: 11, size of vocab: 1267916.0
min_count: 12, size of vocab: 1201186.0
min_count: 13, size of vocab: 1142377.0
min_count: 14, size of vocab: 1090673.0
min_count: 15, size of vocab: 1043973.0
min_count: 16, size of vocab: 1002395.0
min_count: 17, size of vocab: 964684.0
min_count: 18, size of vocab: 930382.0
min_count: 19, size of vocab: 898725.0

在原始论文中,他们将词汇量设置为 915,715。如果我们设置 min_count = 19,词汇量似乎相似。(词汇量 = 898,725)

700似乎相当武断,我在docs中没有看到任何提及。

4

1 回答 1

1

这没有意义,但原因如下:

scale_vocab()(通过使用内部estimate_memory()函数)返回一个 dict ,其中包含一组粗略估计的模型所需内存量的值,以字节为单位,对于给定的min_count. 这些估计是基于模型vocab字典中的每个单词在 HS 模型中将占用大约 700 个字节(其中包含一些额外的霍夫曼编码信息),或者在负采样模型中仅占用 500 个字节的想法。看:

https://github.com/RaRe-Technologies/gensim/blob/5f630816f8cde46c8408244fb9d3bdf7359ae4c2/gensim/models/word2vec.py#L1343

(这些是基于我运行的一系列临时测试的非常粗略的估计,在其他环境中可能会有很大差异——但通常这vocab不是模型内存使用的最大因素,所以这里的精度并不那么重要.)

dry_run=True看起来这个笔记本正试图从内存估计中反算出在给定试验数字的情况下计算出的确切保留词汇大小。

但是,它真的不必那样做。包含内存估计的相同结果字典scale_vocab()在顶级retain_total键中还包括精确计算的保留词汇大小。看:

https://github.com/RaRe-Technologies/gensim/blob/5f630816f8cde46c8408244fb9d3bdf7359ae4c2/gensim/models/word2vec.py#L723

所以,笔记本可以改进。

于 2017-07-31T19:47:46.177 回答