вектор встраивания keras обратно в горячий

Я использую keras в задаче НЛП. Возникает вопрос о встраивании слов, когда я пытаюсь предсказать следующее слово в соответствии с предыдущими словами. Я уже преобразовал одно горячее слово в вектор слова через слой keras Embedding следующим образом:

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

И используйте этот word_vector, чтобы что-то сделать, и модель, наконец, даст другой word_vector. Но я должен увидеть, что такое слово предсказания на самом деле. Как я могу превратить word_vector обратно в word_one_hot?


person MeteorKepler    schedule 22.04.2017    source источник


Ответы (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 (не «кошка»). Имеет ли это смысл? Модель никогда не предсказывает вектор внедрения, векторы внедрения являются промежуточными представлениями входных данных, которые (надеюсь) полезны для предсказания целого числа, связанного со словом/символом/классом.

person shallow_water    schedule 29.09.2017