Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/windows-phone-7/3.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
Text 在python中读取word2vec txt的更快方法_Text_Binary_Word2vec - Fatal编程技术网

Text 在python中读取word2vec txt的更快方法

Text 在python中读取word2vec txt的更快方法,text,binary,word2vec,Text,Binary,Word2vec,我有一个标准word2vec输出,它是一个.txt文件,格式如下: [number of words] [dimension (300)] word1 [300 float numbers separated by spaces] word2 ... 现在我想从这个文件中最多读取Mword表示。一种简单的方法是循环文件中的第一行M+1,并将M向量存储到numpy数组中。但是这太慢了,有没有更快的方法?你说的“太慢”是什么意思?和什么相比 因为它是给定的文本格式,所以无法逐行读取文件、解析浮动并

我有一个标准word2vec输出,它是一个.txt文件,格式如下:

[number of words] [dimension (300)]
word1 [300 float numbers separated by spaces]
word2 ...
现在我想从这个文件中最多读取
M
word表示。一种简单的方法是循环文件中的第一行
M+1
,并将
M
向量存储到numpy数组中。但是这太慢了,有没有更快的方法?

你说的“太慢”是什么意思?和什么相比

因为它是给定的文本格式,所以无法逐行读取文件、解析浮动并将其分配到可用的结构中。但是你可能做的事情效率很低——如果没有看到你的代码,很难说

Python中的
gensim
库包含用于处理这种格式的字向量的类。而且,它的例程包括一个可选的
limit
参数,用于从文件前面读取一定数量的向量。例如,这将从名为
vectors.txt的文件中读取前1000个:

word_vecs = KeyedVectors.load_word2vec_format('word-vectors.txt', 
                                              binary=False,
                                              limit=1000)
我从来没有注意到它是一个特别慢的操作,即使在加载像谷歌发布的3GB+文字向量集这样的东西时也是如此。(如果它看起来确实非常慢,可能是因为RAM不足,而尝试的加载依赖于虚拟内存分页——这种情况在这样的随机访问数据结构中是绝对不会发生的。)

如果然后通过
.save()
gensim
的本机格式保存向量,并且如果组成的numpy数组足够大,可以保存为单独的文件,则可以选择使用
gensim
的本机
.load()
和可选的
mmap='r'
参数。这将完全跳过对磁盘上原始numpy数组的任何解析,只需将它们映射到可寻址空间的内存即可–使
.load()
非常快地完成。然后,当数组的范围被访问时,它们将被分页到RAM中。您仍然需要支付从磁盘读取所有数据的费用——但需要时,以增量的方式,而不是预先批量读取

例如

word_vecs.save('word-vectors.gensim')
……后来

word_vecs2 = KeyedVectors.load('word_vectors.gensim', mmap='r')
(本机
.load()
没有“限制”选项)