Контекст
Я использую MarianMT von Huggingface через Python, чтобы переводить текст из источника на целевой язык.
Ожидаемое поведение
Я ввожу последовательность в модель MarianMT и получаю ее обратный перевод. Для этого я использую соответствующую языковую модель и токенизатор. Все предложения, которые я ввожу, также возвращаются. Предложения рассматриваются как последовательность.
Текущее поведение
В зависимости от языковой модели модель не переводит все, а только возвращает части. В этом примере отсутствует последнее предложение:
Оригинал (немецкий): Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.
Результат (английский): бегемот бегал по джунглям и вынужден был сходить в туалет. Был какаду и спросил дорогу. Он сказал, что если тебе нужно кака, то берегись минутку. Я скажу вам, куда вам нужно идти, я здесь знаю свой путь.
Результат (голландский): Een nijlpaard liep rond in de jungle en moest naar het toilet ... en een kaketoe vroeg naar de weg ... die zei dat als je Kaka moest, ik even moest oppassen.
Текущий код
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
def translate_text(input, source, target):
# Prepare output
output = ""
model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-" + source + "-" + target)
tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-" + source + "-" + target)
inputs = tokenizer.encode(input[:512], return_tensors="pt", padding='longest')
outputs = model.generate(inputs, max_length=4000, num_beams=4, early_stopping=True)
for t in [tokenizer.convert_ids_to_tokens(s) for s in outputs.tolist()[0]]:
output = output + t.replace("▁", " ").replace("</s>", "")
output.replace("<pad>", "")
return output
print(translate_text("Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.", "de", "nl"))
print(translate_text("Ein Nilpferd lief im Dschungel rum und musste aufs WC. Da traf es einen Kakadu und fragte nach dem Weg. Der sagte wenn du Kaka musst, dann pass mal ganz kurz auf. Ich sag dir wo du hingehen musst, ich kenn mich hier gut aus.", "de", "en"))
Нужна помощь
Что я скучаю? Почему отсутствуют некоторые части последовательности?
"Ein Nilpferd ...
вместо"in Nilpferd ...
? - person Adam Bittlingmayer   schedule 22.12.2020