2016-12-06 14 views
4

Я использую искру 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, но эта реализация также требует загрузки всех векторов в память драйвера.

+0

Редактировать: По рекомендации администраторов я сделал этот комментарий. Извините за спам. Мы работаем над реализацией на основе параметров на нашем следующем выпуске. Все, что я могу сказать, это следить за реализацией deeplearning4j. Эта новая реализация на основе параметров на основе параметров будет работать также с векторами глубокой ходьбы, перчаток и абзацев. Если вам интересен этот параметр сервер, мы основываем его на nd4j здесь: https://github.com/deeplearning4j/nd4j/tree/master/nd4j-parameter-server-parent Мы приветствуем обратную связь, если вы заинтересованы в том, чтобы рассказать нам больше о вашем случае использования. –

+0

@AdamGibson благодарит за входные данные. Я использую библиотеку 'word2vec' и сталкиваюсь с подобной проблемой. У меня огромный файл для загрузки (около 6 ГБ), что очень затруднит процесс чтения в память. Основываясь на вашем комментарии выше, похоже, что теперь у нас есть серверная реализация. Не могли бы вы указать мне на документацию/примеры для того же? –

ответ

3

Word2VecModel имеет функцию save, которая сохраняет ее на диск в собственном формате. Это создаст каталог с данными из паркета файлов и файл метаданных с человекообразными метаданными.

Теперь вы можете прочитать файл паркета и преобразовать его самостоятельно или вместо этого сделать spark.read.parquet, чтобы прочитать его в dataframe. Каждая строка будет содержать некоторую карту, и вы можете написать ее любым способом.

 Смежные вопросы

  • Нет связанных вопросов^_^