2016-11-26 3 views
1

Ich habe ein vortrainiertes word2vec-Modell für meine Muttersprache heruntergeladen. Es hatte eine „news.model.bin“ Datei und wenn ich es entpackt, eine txt Datei oder pickle sehen erwartet, aber ich fand einen anderen .bin Datei in es mit einem Chaos consistat wie folgt aus:Laden von ".bin" in Theano oder TensorFlow

\09\b9\.,-;sdfkf %some really strange symbols and seem to be invalid symbols% 

I kann es nicht einmal kopieren, weil ich die Datei normalerweise nicht öffnen kann - es ist schwer und mein Laptop stirbt einfach. Die Frage ist: Kann dieser Beispielcode ein Pre-Tranes-Modell sein oder nicht? Wenn ja - wie soll ich damit umgehen?

P.S. Der Link, wo ich das Modell bekam aus (Modelle sind am unteren Rand der Seite): http://ling.go.mail.ru/dsm/ru/about

+0

Eine schnelle Google drehte [diese] (http://mccormickml.com/2016/04/12/googles-pretrained-word2vec- Modell-in-Python /). Ich denke, es ist ein spezialisiertes Format für Word2vec. Ich hoffe es hilft. – Kh40tiK

+0

Mögliches Duplikat von [Word2vec-Bin-Datei in Text umwandeln] (http://stackoverflow.com/questions/27324292/convert-word2vec-bin-file-to-text) –

Antwort

0

Zwei Lösungen:

  1. die .bin Umrechnen in .txt: Convert word2vec bin file to text
  2. Direkt das lesen. Bin wie unten gezeigt.

https://gist.github.com/j314erre/b7c97580a660ead82022625ff7a644d8 enthält einen Code, der .bin und laden sie in eine TensorFlow Variable zu lesen:

# Initialize all variables 
    sess.run(tf.initialize_all_variables()) 
    # Initialize all variables 
    sess.run(tf.initialize_all_variables()) 
    if FLAGS.word2vec: 
     # initial matrix with random uniform 
     initW = np.random.uniform(-0.25,0.25,(len(vocab_processor.vocabulary_), FLAGS.embedding_dim)) 
     # load any vectors from the word2vec 
     print("Load word2vec file {}\n".format(FLAGS.word2vec)) 
     with open(FLAGS.word2vec, "rb") as f: 
      header = f.readline() 
      vocab_size, layer1_size = map(int, header.split()) 
      binary_len = np.dtype('float32').itemsize * layer1_size 
      for line in xrange(vocab_size): 
       word = [] 
       while True: 
        ch = f.read(1) 
        if ch == ' ': 
         word = ''.join(word) 
         break 
        if ch != '\n': 
         word.append(ch) 
       idx = vocab_processor.vocabulary_.get(word) 
       if idx != 0: 
        initW[idx] = np.fromstring(f.read(binary_len), dtype='float32') 
       else: 
        f.read(binary_len)  

    sess.run(cnn.W.assign(initW)) 

Sie diesen Code in diesem text classification example in TensorFlow verwenden können.

FYI:

Verwandte Themen