我尝试在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)。
当我从Word2Vec运行相同的https://code.google.com/p/word2vec/示例时
它很快就给出了最接近的单词。
DL4J使用ND4J,它声称速度是Numpy:http://nd4j.org/benchmarking的两倍
我的密码有什么问题吗?
更新:它基于https://github.com/deeplearning4j/dl4j-0.4-examples.git (我没有接触任何依赖项,只是试着读取Google预训练过的向量文件)。Word2VecRawTextExample工作得很好(但数据大小相对较小)。
发布于 2017-11-21 12:01:00
为了提高业绩,我建议你做以下工作:
发布于 2019-11-22 03:42:22
这篇文章确实很旧,但现在它应该有了很大的改进。我已经在生产中使用了以下设置@ JVM级别运行了带有Word2vec的Word2vec模型,并且它可以在一个t2上运行,并带有8GRAM和更高的内存。
java -Xmx2G -Dorg.bytedeco.javacpp.maxbytes=6G -Dorg.bytedeco.javacpp.maxphysicalbytes=6G
另外,我还没有使用wordsNearest()方法,因为它附带了预先计算语料库嵌入的限制,而不是编写自己的余弦相似度,后者执行亚毫秒响应。
那篇博文在这里
如果您想知道如何构建最近的单词或任何其他应用程序,如文本相似性(相同的基本原则)
https://stackoverflow.com/questions/32290819
复制相似问题