Какую функцию потерь использовать для NMT Seq2Seq?
Я пишу LSTM Seq2Seq NMT (с английского на бенгальский), используя методологию, предложенную в https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html, Вот некоторые ключевые отличия: 1. Моя модель основана на словах, а не на символах 2. Для английских слов (входы в секцию кодировщика) я использовал предтренированное вложение Glove 3. Для бенгальских слов я использовал однократное кодирование
У меня есть 2 вопроса:
Я использовал "категорический_кросс_энтропий" в качестве функции потерь. Тем не менее, я не уверен, что это правильный подход, так как у меня есть два разных типа входов - последовательность целочисленных значений для входа кодера и горячая закодированная последовательность для ввода декодера (и выход softmax плотного слоя).
model.compile (оптимизатор ='Адам', потеря ='категорический_кросцентропи', метрики =['acc']) history = model.fit([encoder_input_data, oh_decoder_data], oh_target_data, batch_size=batch_size, epochs=100, 0.2 проверки)
Я чувствую, что эта функция потери (и точности) может быть ошибочной из-за различий во входном кодировании. Как я могу решить это?
- Вывод генерирует только одно слово, за которым следует EOS. Вывод одного слова - хороший перевод, хотя и неполный. Это из-за проблем с тренировками?