2016-12-06 2 views
4

spark mllib를 사용하여 단어 벡터를 생성하고 있습니다. 모든 데이터를 저장 한 다음 훈련 된 단어 벡터를 가져 와서 파일로 덤프하고 싶습니다.word2vec 벡터를 파일에 덤프하십시오.

나는이 일을하고있다 :

I  0.03 0.53 0.12... 
love 0.31 0.14 0.12... 
Spark 0.41 0.18 0.84... 

후 : 내 훈련 데이터가

I love Spark 

같은 문장이 있다면

JavaRDD<List<String>> data = javaSparkContext.parallelize(streamingData, partitions); 
Word2Vec word2vec = new Word2Vec(); 
Word2VecModel model = word2vec.fit(data); 

그래서, 같은 파일에 출력을 저장하려면 교육, 나는이 같은 모델 개체에서 벡터를 받고있다

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.5TB)에 대해 이러한 단어 벡터를 생성하므로 반환 된 개체 Word2VecModel을 내 드라이버의 메모리에 저장하지 못할 수 있습니다. 드라이버 메모리에 전체 맵을 저장하지 않고 파일에 쓸 수 있도록이 wordvectors 맵을 rdd로 저장할 수 있습니까?

deeplearning4j의 word2vec 구현을 살펴 보았지만 드라이버 메모리에 모든 벡터를로드해야합니다.

+0

편집 : 관리자의 조언에 따라 의견을 작성했습니다. 스팸을 유감스럽게 생각합니다. 우리는 다음 릴리스를위한 매개 변수 서버 기반 구현에 대해 작업하고 있습니다. 내가 말할 수있는 전부는 deeplearning4j 구현을 주시하는 것입니다. 이 새로운 매개 변수 서버 기반 구현은 깊은 걷기, 글러브 및 단락 벡터에서도 사용할 수 있습니다. 이 매개 변수 서버에 대해 궁금한 점이 있으면 여기 nd4j를 기반으로합니다 : https://github.com/deeplearning4j/nd4j/tree/master/nd4j-parameter-server-parent 귀하의 유스 케이스에 대해 더 많이 알려주고 싶습니다. –

+0

@AdamGibson 귀하의 의견에 감사드립니다. 나는'word2vec' 라이브러리를 사용하고 있으며 비슷한 문제를 겪었습니다. 나는 거대한 파일을로드 (약 6GB)하여 '메모리로 읽어 들이기'과정을 매우 어렵게 만들 것입니다. 위의 귀하의 의견을 바탕으로 우리는 이제 서버 기반 구현을 가지고있는 것 같습니다. 당신은 나를 위해 문서/예제를 가리킬 수 있습니까? –

답변

3

Word2VecModel은 자신의 형식으로 디스크에 저장하는 save 기능이 있습니다. 데이터의 파킹 파일과 사람이 읽을 수있는 메타 데이터가있는 메타 데이터 파일이있는 데이터라는 디렉터리가 만들어집니다.

이제 파케 파일을 읽고 직접 변환하거나 spark.read.parquet을 사용하여 데이터 프레임을 읽을 수 있습니다. 각 행에는 일부지도가 포함되어 있으므로 원하는대로 작성할 수 있습니다.

관련 문제