seq2seq для NMT: почему декодер продолжает предсказывать повторяющиеся токены? - PullRequest
0 голосов
/ 18 июня 2019

Я построил архитектуру кодера-декодера для машинного перевода. Во время вывода я обнаружил, что декодер генерирует повторяющиеся слова, что-то вроде:

tensor([[ 2,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6, 13,
      5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,
      6, 13,  5,  4,  6, 13,  5, 12,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6,
     13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,
      4,  6, 13,  5,  4,  6, 13,  5],
    [ 2,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6, 13,
      5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,
      6, 13,  5,  4,  6, 13,  5, 12,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6,
     13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,
      4,  6, 13,  5,  4,  9, 10,  4],
    [ 2,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6, 13,
      5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,
      6, 13,  5,  4,  6, 13,  5, 12,  5,  4,  6, 13,  5,  4,  9, 11,  4,  6,
     13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,  4,  6, 13,  5,
      4,  6, 13,  5,  4,  6, 13,  7]], device='cuda:0')

В этом случае я установил размер луча равным 3. Для отладки я тренирую модель только 2 эпохи. Модель принимает последовательность символов в качестве входных данных, и декодер предсказывает на каждом временном шаге символ. Я не знаю, почему это происходит. Поскольку он продолжает предсказывать таким образом, он никогда не предскажет токен для завершения вывода. Любая помощь будет отличной!

...