我在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?
答案 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')的高可能性。这有意义吗?该模型不会预测嵌入向量,嵌入向量是输入数据的中间表示,(希望)可用于预测与单词/字符/类相关的整数。