我试图在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可以正常工作(但数据大小相对较小)。
最佳答案
为了提高性能,我建议您执行以下操作: