Как использовать вложения слов для предсказания в Tensorflow

Я пытаюсь пройти обучение по Tensorflow и застрял, пытаясь улучшить Учебник по RNN / языковой модели, чтобы я мог предсказать следующее слово в предложении. В учебнике используются вложения слов в качестве представления слов.

Поскольку модель учится на словах «вложения», я предполагаю, что любое добавленное мной предсказание приведет к тем же вложениям. Я не могу понять, как преобразовать эти вложения обратно в идентификаторы слов из набора данных. Единственный пример, который я видел, сохранил структуру данных в памяти с обратным отображением wordid -> embedding и использовал это для поиска. Очевидно, это не сработает для всех проблем. Есть ли способ лучше?


person mmarklar    schedule 15.05.2016    source источник


Ответы (1)


Предполагая, что у вас есть и word_to_idx, и idx_to_word из словаря, это псевдокод того, что вы делаете.

Представьте, что ввод для прогноза - «это образец».

batch_size = 1
num_steps = 3 # i.e each step for the word in "this is sample"
hidden_size = 1500
vocab_size = 10000
translate the `word_to_idx` for the input `"this is sample"`
get the word embeddings for the each word in the input
Input to model will be word embedding of size 1x1500 at each time step
Output of model at each time step will be of size 1x1500
y_pred is output at last step from model for the given input 
adding projection to output (i.e y_pred x Weights(hidden_size, vocab_size) + bias(vocab_size, )  = 1x10000)
now sample the output through the below function to get the index with max probability
generate idx_to_word from the index we just got
use the generated word along with the previous input to generate next word until you get `<eos>` or some predefined sentence stopping.

Вот пример выборки из здесь:

def sample(a, temperature=1.0):
    # helper function to sample an index from a probability array
    a = np.log(a) / temperature
    a = np.exp(a) / np.sum(np.exp(a))
    return np.argmax(np.random.multinomial(1, a, 1))
person Aravind Pilla    schedule 16.05.2016
comment
Спасибо за Ваш ответ! Думаю, я понимаю, но на то, чтобы попробовать это, уйдет день или два. Я отмечу это как ответ после того, как попробую. - person mmarklar; 17.05.2016