Я попытался выполнить следующий пример на DL4J (загрузка файла предварительно подготовленных векторов):DL4J супер медленно на GoogleNews-векторов файл
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 работает просто отлично (но размер данных относительно невелик).