DL4Jで次の例を実行しようとしました(事前トレーニング済みのベクトルファイルをロードしています):
File gModel = new File("./GoogleNews-vectors-negative300.bin.gz");
Word2Vec vec = WordVectorSerializer.loadGoogleModel(gModel, true);
InputStreamReader r = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(r);
for (; ; ) {
System.out.print("Word: ");
String word = br.readLine();
if ("EXIT".equals(word)) break;
Collection<String> lst = vec.wordsNearest(word, 20);
System.out.println(word + " -> " + lst);
}
しかし、それは非常に遅いです(最も近い単語を計算するのに約10分かかりますが、それらは正しいです).
十分なメモリがあります(-Xms20g -Xmx20g
)。
https://code.google.com/p/word2vec/から同じ Word2Vec の例を実行すると
最も近い単語を非常に迅速に提供します。
DL4J は、Numpy の 2 倍の速さを主張する ND4J を使用します: http://nd4j.org/benchmarking
私のコードに何か問題がありますか?
更新: https://github.com/deeplearning4j/dl4j-0.4-examples.gitに基づいています(依存関係には触れず、Google の事前トレーニング済みベクター ファイルを読み取ろうとしました)。Word2VecRawTextExample は問題なく動作します (ただし、データ サイズは比較的小さいです)。