2017-05-09 8 views
1

(スカラを使用して)スパークさせるために事前計算(バイナリ)モデルを読み込むことは可能ですか?私はこのようなGoogleによって生成されたバイナリモデルの1つをロードしようとしました:SparkでWord2Vecモデルをロード

import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel} 


    val model = Word2VecModel.load(sc, "GoogleNews-vectors-negative300.bin") 

しかし、メタデータディレクトリを見つけることができません。私はまた、フォルダを作成し、そこにバイナリファイルを追加しましたが、解析することはできません。この問題のラッパーは見つかりませんでした。

答えて

0

それは未解決の問題である: https://issues.apache.org/jira/browse/SPARK-15328

いずれかの特定のコードを見て、自分のために何かを再作成するか、多分そこからのデータと作業をtxtをバイナリに変換するためにPythonやCスクリプトを使用してみてください。

Convert word2vec bin file to text

+1

ビンをテキストファイルに変換した後、モデルをどのようにロードする必要がありますか? – LonsomeHell

0

私はスパークword2vecモデルにGoogleのニュースpretrainedモデルにロードするために迅速な機能を書きました。楽しい。

def loadBin(file: String) = { 
    def readUntil(inputStream: DataInputStream, term: Char, maxLength: Int = 1024 * 8): String = { 
    var char: Char = inputStream.readByte().toChar 
    val str = new StringBuilder 
    while (!char.equals(term)) { 
     str.append(char) 
     assert(str.size < maxLength) 
     char = inputStream.readByte().toChar 
    } 
    str.toString 
    } 
    val inputStream: DataInputStream = new DataInputStream(new GZIPInputStream(new FileInputStream(file))) 
    try { 
    val header = readUntil(inputStream, '\n') 
    val (records, dimensions) = header.split(" ") match { 
     case Array(records, dimensions) => (records.toInt, dimensions.toInt) 
    } 
    new Word2VecModel((0 until records).toArray.map(recordIndex => { 
     readUntil(inputStream, ' ') -> (0 until dimensions).map(dimensionIndex => { 
     java.lang.Float.intBitsToFloat(java.lang.Integer.reverseBytes(inputStream.readInt())) 
     }).toArray 
    }).toMap) 
    } finally { 
    inputStream.close() 
    } 
} 
関連する問題