我试图在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使用ND4J,声称它的速度是Numpy的两倍:http://nd4j.org/benchmarking

我的代码有什么问题吗?

更新:它基于https://github.com/deeplearning4j/dl4j-0.4-examples.git(我没有碰任何依赖,只是试图读取Google预先训练的向量文件)。 Word2VecRawTextExample可以正常工作(但数据大小相对较小)。

最佳答案

为了提高性能,我建议您执行以下操作:

  • 设置环境变量OMP_NUM_THREADS等于您的逻辑核心数
  • 如果您使用Intel处理器,请安装Intel Math Kernel Library
  • 在您的路径中添加信息,英特尔数学内核库中的mkl_intel_thread.dll位于
  • 10-04 22:23