Fel*_*ida 10 python numpy blas gensim word2vec
我正在尝试使用大约170K行的文件训练word2vec模型,每行一个句子.
我想我可能代表一个特殊的用例,因为"句子"有任意字符串而不是字典单词.每个句子(行)有大约100个单词,每个"单词"有大约20个字符,字符像"/"和数字.
训练代码非常简单:
# as shown in http://rare-technologies.com/word2vec-tutorial/
import gensim, logging, os
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
class MySentences(object):
def __init__(self, dirname):
self.dirname = dirname
def __iter__(self):
for fname in os.listdir(self.dirname):
for line in open(os.path.join(self.dirname, fname)):
yield line.split()
current_dir = os.path.dirname(os.path.realpath(__file__))
# each line represents a full chess match
input_dir = current_dir+"/../fen_output"
output_file = current_dir+"/../learned_vectors/output.model.bin"
sentences = MySentences(input_dir)
model = gensim.models.Word2Vec(sentences,workers=8)
Run Code Online (Sandbox Code Playgroud)
事情是,事情真正快速达到100K句子(我的RAM稳步上升)然后我用完RAM而且我可以看到我的PC已经开始交换,并且训练停止了.我没有很多可用的RAM,只有大约4GB并word2vec在开始交换之前耗尽了所有内存.
我想OpenBLAS正确地链接到numpy:这就是numpy.show_config()告诉我的:
blas_info:
libraries = ['blas']
library_dirs = ['/usr/lib']
language = f77
lapack_info:
libraries = ['lapack']
library_dirs = ['/usr/lib']
language = f77
atlas_threads_info:
NOT AVAILABLE
blas_opt_info:
libraries = ['openblas']
library_dirs = ['/usr/lib']
language = f77
openblas_info:
libraries = ['openblas']
library_dirs = ['/usr/lib']
language = f77
lapack_opt_info:
libraries = ['lapack', 'blas']
library_dirs = ['/usr/lib']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
openblas_lapack_info:
NOT AVAILABLE
lapack_mkl_info:
NOT AVAILABLE
atlas_3_10_threads_info:
NOT AVAILABLE
atlas_info:
NOT AVAILABLE
atlas_3_10_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
mkl_info:
NOT AVAILABLE
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是在一台没有大量可用内存(如我的)的机器上预期的,我应该获得更多内存或以更小的部分训练模型?或者看起来我的设置配置不正确(或者我的代码效率低下)?
先感谢您.
小智 2
看起来我的设置配置不正确(或者我的代码效率低下)?
1)一般来说,我会说不。但是,鉴于您只有少量 RAM,我会使用较少数量的工作人员。它会减慢训练速度,但也许你可以通过这种方式避免交换。
2)您可以尝试词干提取或更好的方法:词形还原。您将减少单词数量,因为例如单数和复数形式将被视为同一个单词
3)但是,我认为 4 GB RAM 可能是您的主要问题(除了您的操作系统之外,您可能只有 1-2 GB 可以实际供进程/线程使用。我真的会考虑投资更多 RAM . 例如,现在您可以以 < 100 美元的价格购买优质的 16 GB RAM 套件,但是,如果您有钱投资购买合适的 RAM 来执行常见的 ML/“数据科学”任务,我建议您使用 > 64 GB