2017-04-27 6 views
1

Ich versuche, eine vortrainierte Word2Vec (oder Glove) -Einbettung in meinem Tensorflow-Code zu laden, aber ich habe einige Probleme zu verstehen, wie ich viele Beispiele nicht finden kann. Es geht nicht darum, die Einbettungsmatrix zu bekommen und zu laden, was ich verstehe, sondern darum, das Wort IDs nachzuschlagen. Momentan verwende ich den Code von https://ireneli.eu/2017/01/17/tensorflow-07-word-embeddings-2-loading-pre-trained-vectors/. Dort wird zuerst die Einbettungsmatrix geladen (verstanden).Load Pretrained Word2Vec Einbettung in Tensorflow

vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length) 
#fit the vocab from glove 
pretrain = vocab_processor.fit(vocab) 
#transform inputs 
x = np.array(list(vocab_processor.transform(your_raw_input))) 

Dies funktioniert und gibt mir eine Liste von Wort Ide, aber ich weiß nicht, ob dies richtig ist: Dann wird ein Vokabular Prozessor einen Satz x auf eine Liste von Wort IDs konvertieren verwendet. Am meisten stört mich die Frage, wie der Vokabelprozessor aus der gerade gelesenen Einbettung die richtigen Wort-IDs bekommt (da sonst das Ergebnis der Einbettung falsch wäre). Ergibt der Fit-Schritt das?

Oder gibt es einen anderen Weg, wie machst du diese Suche?

Danke! Oliver

Antwort

1

Ja, der fit Schritt sagt den vocab_processor die Index jedes Wortes (ausgehend von 1) in dem vocab Array. transform hat diese Suche umgekehrt und erzeugt den Index aus den Wörtern und verwendet 0, um den Ausgang auf die max_document_size aufzufüllen.

Sie können, dass in einem kurzen Beispiel siehe hier:

vocab_processor = learn.preprocessing.VocabularyProcessor(5) 
vocab = ['a', 'b', 'c', 'd', 'e'] 
pretrain = vocab_processor.fit(vocab) 

pretrain == vocab_processor 
# True 

np.array(list(pretrain.transform(['a b c', 'b c d', 'a e', 'a b c d e']))) 

# array([[1, 2, 3, 0, 0], 
#  [2, 3, 4, 0, 0], 
#  [1, 5, 0, 0, 0], 
#  [1, 2, 3, 4, 5]]) 
# 
+0

OK, nach der Post zweimal lesen, habe ich die Idee. Wenn man eine Einbettungsmatrix von w2v oder grove liest, gibt es eine Datenmatrix und eine Liste von Wörtern (in diesem Fall der Vokab), benutze einfach vocab_processor, um diesen Vokabular anzupassen. –

Verwandte Themen