Обучение RNN для вывода встраивания word2vec вместо логитов

Традиционно кажется, что RNN используют логики для прогнозирования следующего шага в последовательности. В моем случае мне нужен RNN для вывода векторного предсказания word2vec (50 глубин). Это означает, что функция стоимости основана на двух векторах: Y фактический вектор следующего слова в серии и Y_hat, предсказание сети.

Я пробовал использовать функцию стоимости cosine distance, но сеть, похоже, не учится (я разрешил ей работать еще 10 часов на AWS P3, а стоимость всегда равна 0,7)

Возможно ли такая модель? Если да, то какую функцию затрат следует использовать?

Косинусное расстояние в TF:

cosine_distance = tf.losses.cosine_distance(tf.nn.l2_normalize(outputs, 2), tf.nn.l2_normalize(targets, 2), axis=2)

Update: Я пытаюсь предсказать слово2vec, поэтому во время выборки я мог бы выбрать следующее слово, основанное на ближайших соседях прогнозируемого вектора.

Ответ 1

В чем причина того, что вы хотите предсказать вложение слов? Откуда вы взяли слово "земля правда"? Для моделей word2vec вы, как правило, будете повторно использовать обученные слова-вложения в будущих моделях. Если вы обучили модель word2vec с размером внедрения 50, то у вас есть 50-дюймовые вложения, которые вы могли бы сохранить и использовать в будущих моделях. Если вы просто хотите воссоздать существующую модель истинного слова word2vec, то вы можете просто использовать эти значения. Типичный word2vec будет иметь регулярные выходы softmax через непрерывный пакет слов или пропустить грамм, а затем сохранить полученные в результате слова вложения.

Если у вас действительно есть причина попытаться создать модель, которая создает попытки сопоставления word2vec, то, глядя на вашу функцию потерь, вы найдете несколько предложений. Я не верю, что вы должны нормализовать свои результаты или свои цели - вы, вероятно, хотите, чтобы они оставались незатронутыми (цели уже не являются целями "истины истины", если вы их нормализуете. Кроме того, похоже, вы используете dim=0, который теперь устарел и заменен на axis. Вы пытались использовать разные значения для dim? Это должно представлять измерение, по которому нужно вычислить расстояние от косинуса, и я думаю, что измерение 0th было бы неправильным измерением ( так как это, вероятно, должно быть размером партии. Я бы попытался со значениями axis=-1 (последний размер) или axis=1 и посмотреть, не наблюдается ли какая-либо разница.

Отдельно, каков ваш коэффициент оптимизации/обучения? Если скорость обучения слишком мала, вы, возможно, не сможете двигаться достаточно в правильном направлении.