Я использую искру mllib для генерации векторов слов. Я хочу поместить все свои данные, а затем получить обученные словарные векторы и выгрузить их в файл.Демпинг spark word2vec векторы в файл
Я делаю это:
JavaRDD<List<String>> data = javaSparkContext.parallelize(streamingData, partitions);
Word2Vec word2vec = new Word2Vec();
Word2VecModel model = word2vec.fit(data);
Так что, если мои данные обучения были предложения, как
I love Spark
Я хочу, чтобы сохранить результаты в файлах как:
I 0.03 0.53 0.12...
love 0.31 0.14 0.12...
Spark 0.41 0.18 0.84...
После обучение, я получаю векторы от модельного объекта, подобного этому
Map<String, float[]> wordMap = JavaConverters.mapAsJavaMapConverter(model.getVectors()).asJava();
List<String> wordvectorlist = Lists.newArrayList();
for (String s : wordMap.keySet()) {
StringBuilder wordvector = new StringBuilder(s);
for (float f : wordMap.get(s)) {
wordvector.append(" " + f);
}
wordvectorlist.add(wordvector.toString());
if (wordvectorlist.size() > 1000000) {
writeToFile(wordvectorlist);
wordvectorlist.clear();
}
}
Я буду генерировать эти векторы слов для очень больших данных (~ 1,5 ТБ), и, таким образом, я мог бы не иметь возможности сохранить возвращенный объект Word2VecModel в память моего драйвера. Как сохранить эту карту wordvectors как rdd, чтобы я мог записывать файлы без сохранения полной карты в памяти драйвера?
Я изучил реализацию deeplearning4j в word2vec, но эта реализация также требует загрузки всех векторов в память драйвера.
Редактировать: По рекомендации администраторов я сделал этот комментарий. Извините за спам. Мы работаем над реализацией на основе параметров на нашем следующем выпуске. Все, что я могу сказать, это следить за реализацией deeplearning4j. Эта новая реализация на основе параметров на основе параметров будет работать также с векторами глубокой ходьбы, перчаток и абзацев. Если вам интересен этот параметр сервер, мы основываем его на nd4j здесь: https://github.com/deeplearning4j/nd4j/tree/master/nd4j-parameter-server-parent Мы приветствуем обратную связь, если вы заинтересованы в том, чтобы рассказать нам больше о вашем случае использования. –
@AdamGibson благодарит за входные данные. Я использую библиотеку 'word2vec' и сталкиваюсь с подобной проблемой. У меня огромный файл для загрузки (около 6 ГБ), что очень затруднит процесс чтения в память. Основываясь на вашем комментарии выше, похоже, что теперь у нас есть серверная реализация. Не могли бы вы указать мне на документацию/примеры для того же? –