Ich versuche, ein Word2Vec-Modell mit einer Datei mit etwa 170K Zeilen, mit einem Satz pro Zeile zu trainieren.Word2vec Training mit Gensim beginnt nach 100K Sätze swapping
Ich denke, dass ich einen speziellen Anwendungsfall darstellen kann, weil die "Sätze" willkürliche Zeichenfolgen anstelle von Wörterbuchwörtern haben. Jeder Satz (Zeile) hat ungefähr 100 Wörter und jedes "Wort" hat ungefähr 20 Zeichen, mit Zeichen wie "/"
und auch Zahlen.
Der Code Ausbildung ist sehr einfach:
# 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)
Das Ding ist, die Dinge funktionieren ganz schnell bis zu 100K Sätze (mein RAM steigen stetig), aber dann aus dem RAM ich laufen und ich kann mein PC sehen ist fing an zu tauschen, und das Training kam zum Stillstand. Ich habe nicht viel RAM zur Verfügung, nur etwa 4 GB und word2vec
verbraucht alles, bevor Sie anfangen zu tauschen.
Ich glaube, ich habe OpenBLAS richtig numpy verbunden: das ist, was numpy.show_config()
sagt mir:
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
Meine Frage ist: wird diese voraussichtlich auf einer Maschine, die eine Menge verfügbaren RAM nicht hat (wie meiner) und ich sollte mehr RAM bekommen oder das Modell in kleineren Stücken trainieren? oder sieht es so aus, als wäre mein Setup nicht richtig konfiguriert (oder mein Code ist ineffizient)?
Vielen Dank im Voraus.