2017-04-22 45 views
0

我在使用keras處理NLP問題。根據之前的單詞,當我嘗試預測下一個單詞時,出現了一個關於單詞嵌入的問題。我已經通過keras嵌入層打開一個熱詞詞彙向量是這樣的:keras嵌入矢量回到一個熱門

word_vector = Embedding(input_dim=2000,output_dim=100)(word_one_hot) 

,並使用此word_vector做一些事情,模型給出了另一個word_vector最後。但我必須看到預測詞的真實含義。我怎樣才能把word_vector變回word_one_hot?

回答

1

這個問題很古老,但似乎與關於嵌入是什麼以及它們的目的是什麼混淆有關。

首先,如果您打算事後嵌入,您絕對不應該轉換爲one-hot。這只是一個浪費的步驟。

從您的原始數據開始,您需要標記它。這只是爲您的詞彙表中的每個元素(數據中所有可能的單詞/字符[您選擇的])分配一個唯一整數的過程。 Keras有這方面的便利功能:

from keras.preprocessing.sequence import pad_sequences 
from keras.preprocessing.text import Tokenizer 
max_words = 100 # just a random example, 
# it is the number of most frequently occurring words in your data set that you want to use in your model. 
tokenizer = Tokenizer(num_words=max_words) 
# This builds the word index 
tokenizer.fit_on_texts(df['column']) 

# This turns strings into lists of integer indices. 
train_sequences = tokenizer.texts_to_sequences(df['column']) 

# This is how you can recover the word index that was computed 
print(tokenizer.word_index) 

嵌入生成一個表示。模型中的後續圖層使用較早的表示來生成更多抽象表示。最終表示法用於根據可能類的數量(假設分類)生成概率分佈。

當您的模型進行預測時,它會爲word_index中的每個整數提供概率估計值。所以,'貓'最有可能是下一個詞,而你的word_index就像{cat:666},理想情況下這個模型對於666(非'貓')提供了很高的可能性。這有意義嗎?該模型並不能預測嵌入向量,嵌入向量是輸入數據的中間表示,這對於預測與字/字符/類相關的整數(希望)是有用的。