spark mllibを使って単語ベクトルを生成しています。私はすべての自分のデータに合わせて訓練された単語ベクトルを取得し、それらをファイルにダンプします。word2vecベクトルをファイルにダンプする
は、私はこれをやっている:
I 0.03 0.53 0.12...
love 0.31 0.14 0.12...
Spark 0.41 0.18 0.84...
後:私のトレーニングデータが
I love Spark
のような文章があった場合
JavaRDD<List<String>> data = javaSparkContext.parallelize(streamingData, partitions);
Word2Vec word2vec = new Word2Vec();
Word2VecModel model = word2vec.fit(data);
だから、私のように、ファイルに出力を保存したいですトレーニング、私はこのようなモデルオブジェクトからベクトルを取得しています
Map<String, float[]> wordMap = JavaConverters.mapAsJavaMapConverter(model.getVectors()).asJava();
List<String> wordvectorlist = Lists.newArrayList();
for (String s : wordMap.keySet()) {
StringBuilder wordvector = new StringBuilder(s);
for (float f : wordMap.get(s)) {
wordvector.append(" " + f);
}
wordvectorlist.add(wordvector.toString());
if (wordvectorlist.size() > 1000000) {
writeToFile(wordvectorlist);
wordvectorlist.clear();
}
}
非常に巨大なデータ(〜1.5 TB)に対してこれらの単語ベクトルを生成するため、返されたオブジェクトWord2VecModelをドライバのメモリに保存できないことがあります。 ドライバのメモリに完全なマップを保存せずにファイルに書き込むことができるように、このワードベクトルマップをrddとしてどのように保存できますか?
私はdeeplearning4jのword2vecの実装を検討しましたが、その実装ではドライバのメモリにすべてのベクトルをロードする必要もあります。
編集:私はこれをコメントにしました。スパムのために申し訳ありません。我々は次回のリリースでパラメータサーバベースの実装に取り組んでいます。私が言うことができるのは、deeplearning4jの実装を見守っていることだけです。 この新しいパラメータサーバーベースの実装は、ディープウォーク、グローブ、および段落ベクトルでも機能します。 あなたがこのパラメータサーバについて興味があるなら、ここではnd4jに基づいています:https://github.com/deeplearning4j/nd4j/tree/master/nd4j-parameter-server-parent あなたのユースケースについて詳しく教えてください。 –
@AdamGibsonあなたの入力に感謝します。私は 'word2vec'ライブラリを使用しており、同様の問題を抱えています。私はロードするための膨大なファイル(約6GB)を持っており、 'メモリへの読み込み 'プロセスは非常に困難です。上記のあなたのコメントに基づいて、我々は今、サーバーベースの実装を持っているように見えます。あなたは同じもののドキュメンテーション/例を私に教えてください。 –