Я просмотрел кодовую базу fairseq и нашел хакерский способ вывода информации о выравнивании. Поскольку это требует редактирования самого исходного кода fairseq, я не думаю, что это приемлемое решение. Но, возможно, это кому-то поможет (мне все еще очень интересен ответ о том, как это сделать правильно).
Отредактируйте функцию sample () и переписайте инструкцию return. Вот целая функция (чтобы помочь вам найти ее лучше в коде), но следует изменить только последнюю строку:
def sample(self, sentences: List[str], beam: int = 1, verbose: bool = False, **kwargs) -> List[str]:
if isinstance(sentences, str):
return self.sample([sentences], beam=beam, verbose=verbose, **kwargs)[0]
tokenized_sentences = [self.encode(sentence) for sentence in sentences]
batched_hypos = self.generate(tokenized_sentences, beam, verbose, **kwargs)
return list(zip([self.decode(hypos[0]['tokens']) for hypos in batched_hypos], [hypos[0]['alignment'] for hypos in batched_hypos]))