Я пытаюсь обучить модель word2vec, используя файл с примерно 170 К строк, с одним предложением в строке.
Я думаю, что я могу представить специальный случай использования, потому что "предложения" имеют произвольные строки, а не слова слова. Каждое предложение (строка) содержит около 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)
Дело в том, что все работает очень быстро до 100 тыс. предложений (моя оперативная память постоянно растет), но затем у меня заканчивается оперативная память, и я вижу, что мой компьютер начал заменять, и обучение прерывается. У меня нет большого количества оперативной памяти, только около 4 ГБ и 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
Мой вопрос: ожидается на машине, которая не имеет много доступной оперативной памяти (как моя), и я должен получить больше оперативной памяти или обучить модель меньшим частям? или похоже, что моя настройка не настроена должным образом (или мой код неэффективен)?
Спасибо заранее.