8

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 は問題なく動作します (ただし、データ サイズは比較的小さいです)。

4

2 に答える 2

0

この投稿はかなり古いものですが、今ではかなり改善されているはずです。私は次の設定 @ JVM レベルで本番環境で Word2vec モデルを使用して DL4J を実行しました。これは 8G RAM 以上の t2.large ボックスで動作します

java -Xmx2G -Dorg.bytedeco.javacpp.maxbytes=6G -Dorg.bytedeco.javacpp.maxphysicalbytes=6G

また、ミリ秒未満の応答を実行する独自のコサイン類似度を記述する代わりに、コーパスの埋め込みを事前に計算するという制限があるため、wordsNearest() メソッドは使用していません。

そのブログ記事はこちら

https://medium.com/sumvit/building-text-similarity-system-from-ground-up-using-word2vec-and-deeplearning4j-dece9ae4e433

最も近い単語やテキストの類似性などの他のアプリケーションを構築する方法を知りたい場合 (同じ基本原理)

于 2019-11-22T03:42:22.477 に答える