Я видел много людей, работающих над нейронным машинным переводом. Обычно они представляют свое предложение между тегами <BOS><EOS>
, <START><END>
и т. д. перед обучением сети. Конечно, указывать начало и конец предложения логичное решение, но интересно, как нейросети понимают, что строка <END>
(или другие) означает конец предложения?
Указание предложения в задачах нейронного машинного перевода
Ответы (1)
Это не так.
Во время вывода существует жестко запрограммированное правило, согласно которому, если этот токен сгенерирован, последовательность выполняется, и базовая нейронная модель больше не будет запрашивать следующий токен.
source_seq = tokenize('This is not a test.')
print(source_seq)
На этом этапе вы получите что-то вроде:
[ '<BOS>', 'Thi###', ... , '###t', '.' , '<EOS>' ]
Теперь строим целевую последовательность в том же формате:
target_seq = [ '<BOS>' ]
while true:
token = model.generate_next_token(source_seq, target_seq)
if token == '<EOS>':
break
seq.append(token)
Сама модель только предсказывает наиболее вероятный следующий токен, дающий текущее состояние (входная последовательность и выходная последовательность на данный момент).
Он не может выйти из петли так же, как не может выдернуть вилку вашей машины из стены.
Обратите внимание, что это не единственное жестко заданное правило. Другой - это решение начать с первого токена и только когда-либо добавлять - никогда не добавлять, никогда не удалять... - как человек говорит.