2017-03-28 4 views
4

나는 Gensim으로 훈련 된 Word2Vec 모델을 가지고 있습니다. 에 Word Embeddings을 어떻게 사용할 수 있습니까? Tensorflow에서 Embedding을 처음부터 교육하고 싶지 않습니다. 누군가가 예제 코드로 어떻게하는지 알려 줄 수 있습니까?Tensorflow에서 pretrained Word2Vec 모델을 사용하는 방법

답변

6

의 당신이 가장 일반적인 단어에 해당하는 목록에서 인덱스로, 사전 및 inverse_dict 목록을 가정 해 봅시다 다음 inverse_dict 지수는 사전 값에 해당하는 방법을

vocab = {'hello': 0, 'world': 2, 'neural':1, 'networks':3} 
inv_dict = ['hello', 'neural', 'world', 'networks'] 

공지 사항. 이제 임베딩 매트릭스를 선언하고 값을 얻으십시오.

vocab_size = len(inv_dict) 
emb_size = 300 # or whatever the size of your embeddings 
embeddings = np.zeroes((vocab_size, emb_size)) 

from gensim.models.keyedvectors import KeyedVectors       
model = KeyedVectors.load_word2vec_format('embeddings_file', binary=True) 

for k, v in vocab.items(): 
    embeddings[v] = model[k] 

임베딩 매트릭스가 있습니다. 좋은. 이제 샘플을 훈련시키고 자한다고 가정 해 봅시다 : x = ['hello', 'world']. 그러나 이것은 우리의 신경망에는 효과가 없습니다.

x_model = tf.placeholder(tf.int32, shape=[None, input_size]) 
with tf.device("/cpu:0"): 
    embedded_x = tf.nn.embedding_lookup(embeddings, x_model) 

지금 embedded_x 당신의 회선 또는 무엇이든에 들어가는 즉석에서 우리의 샘플을 내장하여 이동
x_train = [] 
for word in x: 
    x_train.append(vocab[word]) # integerize 
x_train = np.array(x_train) # make into numpy array 

이제 우리는 좋은 : 우리는 정수화해야합니다. 나는 또한 당신이 embeddings를 재교육하고 있지 않다고 가정하고 있지만 단순히 그것을 사용하고 있습니다. 희망이 도움이

+0

'embeddings [v] = model [k]'줄이'embeddings [v] = model.word_vec (k)'로 대체되어야한다는 것을 확신합니다. – bluesummers

+0

나는이 매뉴얼을 더 생각했습니다. 접근 (즉, 전체 어휘를 ​​반복하고'model.word_vec (k)'를 사용하여 하나씩 찾아 보는 것). 그러나 더 효율적인 것으로 보이는'tf.nn.embedding_lookup'을 사용하는 방법이 있습니까? GloVe를 사용하여 Tensorflow를 사용하여 게시 https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html는 기본적으로 직접 색인 생성을 수행하는 데 사용할 수있는 사용자 정의 GloVe 파일을 생성했습니다. Word2Vec (바이너리) 파일과 비슷한 것. –

관련 문제