keras嵌入向量回到一热

时间:2017-04-22 05:44:44

标签: decode keras embedding one-hot-encoding

我在NLP问题中使用keras。当我尝试根据之前的单词预测下一个单词时,会出现关于单词嵌入的问题。我已经通过keras将单热词转换为单词向量嵌入这样的层:

export default {
    mounted () {
        if(this.$routes.params.page_type == "home"){
            // Load Homepage Here
            // ../../../page/HomePage.vue
        }
        else if(this.$routes.params.page_type == "speaker"){
            // Load Speakerpage Here
            // ../../../page/HomePage.vue
        }
        else if(this.$routes.params.page_type == 'html'){
            // Load HTML Page Here
            // ../../../page/HtmlPage.vue
        }
    }
}

使用这个word_vector做一些事情,模型最后给出另一个word_vector。但我必须看到预测词真的是什么。如何将word_vector转回word_one_hot?

1 个答案:

答案 0 :(得分:2)

这个问题已经陈旧,但似乎与关于嵌入是什么以及它们服务的目的的混淆有关。

首先,如果你要在之后嵌入,你永远不应该转换为单热。这只是一个浪费的步骤。

从原始数据开始,您需要对其进行标记。这只是为词汇表中的每个元素分配一个唯一整数的过程(数据中所有可能的单词/字符[您的选择]的集合)。 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中的每个整数提供概率估计。所以,'cat'是最有可能的下一个单词,而你的word_index有类似{cat:666}的东西,理想情况下该模型会提供666(不是'cat')的高可能性。这有意义吗?该模型不会预测嵌入向量,嵌入向量是输入数据的中间表示,(希望)可用于预测与单词/字符/类相关的整数。