Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Word2Vec时间复杂度_Python_Time Complexity_Big O_Gensim_Word2vec - Fatal编程技术网

Python Word2Vec时间复杂度

Python Word2Vec时间复杂度,python,time-complexity,big-o,gensim,word2vec,Python,Time Complexity,Big O,Gensim,Word2vec,我在谷歌上搜索过这个问题,但我找不到任何可靠的解决方案(一些来源提供了log(V)一些log(V/2)。但是,具有以下参数的word2vec模型的时间复杂度是多少: Word2Vec(语料库,大小=4000,窗口=30,最小计数=1,工人=50,iter=100,alpha=0.0001) 我的词汇量相当于10000个单词(唯一单词)。在没有正式分析/证明的情况下,在实践中以及默认的“负采样”情况下,执行时间主要取决于语料库的大小,并且随着语料库的大小大致呈线性增长。唯一单词的数量(词汇量V)这

我在谷歌上搜索过这个问题,但我找不到任何可靠的解决方案(一些来源提供了log(V)一些log(V/2)。但是,具有以下参数的word2vec模型的时间复杂度是多少:

Word2Vec(语料库,大小=4000,窗口=30,最小计数=1,工人=50,iter=100,alpha=0.0001)


我的词汇量相当于10000个单词(唯一单词)。

在没有正式分析/证明的情况下,在实践中以及默认的“负采样”情况下,执行时间主要取决于语料库的大小,并且随着语料库的大小大致呈线性增长。唯一单词的数量(词汇量V)这不是一个主要因素

Gensim的实现使用词汇表大小的数组上的二进制搜索来实现负面示例的采样,因此其时间复杂性在技术上可能是:

O(N * log(V))
  • 其中N是语料库的总大小和
  • V是唯一的词汇数
但实际上,这种特殊的O(log(V))操作通常比原始Google/Mikolov word2vec.c使用的内存不足的O(1)采样查找更快——这可能是由于CPU缓存效率的提高

因此,对于默认值:

  • 换句话说,如果一个语料库的长度是另一个语料库的两倍,那么在更大的语料库上训练模型所需的时间大约是另一个语料库的两倍
  • 但是,如果一个语料库在词汇上与另一个语料库大小相同,但词汇量是另一个语料库的两倍,那么在运行时您可能不会注意到太多的变化
在非默认的
Hierarchy softmax
情况下–
hs=1,negative=0
–单词的编码方式不同,并且随着词汇表的增长,编码时间更长,这增加了每个语料库单词的平均训练操作次数–我认为是log(V)的一个因数,因此我们在技术上也有一个*O(N*log)(五) )时间复杂性

但是,这种词汇驱动的增长在实践中往往比消极抽样的基于二进制搜索的抽样更为显著


因此,如果您有两个长度相同的小体,但其中一个具有两倍于唯一单词数的小体,您可能会注意到在分层softmax模式下运行时间更长。

非常感谢@gojomo。这部杰作应包含在gensim官方文档中:)