約 170K 行のファイルを使用して、1 行に 1 文ずつ、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)
つまり、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
私の質問は、これは (私のような) 利用可能な RAM があまりないマシンで予想されることですか? または、セットアップが正しく構成されていないように見えますか (またはコードが非効率的ですか)?
前もって感謝します。