Sto provando ad addestrare un modello word2vec usando un file con circa 170K linee, con una frase per riga.La formazione di Word2vec che utilizza gensim inizia lo scambio dopo 100.000 frasi
Penso che potrei rappresentare un caso di utilizzo speciale perché le "frasi" hanno stringhe arbitrarie piuttosto che parole di dizionario. Ogni frase (riga) ha circa 100 parole e ogni "parola" ha circa 20 caratteri, con caratteri come "/"
e anche numeri.
Il codice di formazione è molto semplice:
# 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)
Il fatto è che le cose funzionano molto velocemente fino a 100K frasi (la mia RAM costantemente andando verso l'alto), ma poi ho esaurito la memoria RAM e posso vedere il mio PC ha ha iniziato lo scambio e l'allenamento si è fermato. Non ho molta RAM disponibile, solo circa 4 GB e word2vec
consumano tutto prima di iniziare a scambiare.
penso di avere OpenBLAS correttamente legati a NumPy: questo è ciò che numpy.show_config()
mi dice:
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
La mia domanda è: è questo previsto su una macchina che non ha avuto un sacco di RAM disponibile (come il mio) e dovrei ottenere più RAM o allenare il modello in pezzi più piccoli? o sembra che la mia configurazione non sia configurata correttamente (o che il mio codice sia inefficiente)?
Grazie in anticipo.