我尝试在 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 快两倍的 ND4J:http: //nd4j.org/benchmarking
我的代码有什么问题吗?
更新:它基于https://github.com/deeplearning4j/dl4j-0.4-examples.git(我没有触及任何依赖项,只是尝试阅读 Google 预训练向量文件)。Word2VecRawTextExample 工作得很好(但数据量相对较小)。