Machine learning 如何为火炬中心模型生成的翻译获取对齐或注意信息?

Machine learning 如何为火炬中心模型生成的翻译获取对齐或注意信息?,machine-learning,pytorch,translation,torch,fairseq,Machine Learning,Pytorch,Translation,Torch,Fairseq,火炬中心提供预训练模型,例如: 这些模型可以在python中使用,也可以与CLI交互使用。 使用CLI,可以使用--print alignment标志获取对齐。安装(和pytorch)后在终端工作 在python中,可以指定关键字argsverbose和print\u alignment: import torch en2fr = torch.hub.load('pytorch/fairseq', 'transformer.wmt14.en-fr', tokenizer='moses', bp

火炬中心提供预训练模型,例如:

这些模型可以在python中使用,也可以与CLI交互使用。 使用CLI,可以使用
--print alignment
标志获取对齐。安装(和pytorch)后在终端工作

在python中,可以指定关键字args
verbose
print\u alignment

import torch

en2fr = torch.hub.load('pytorch/fairseq', 'transformer.wmt14.en-fr', tokenizer='moses', bpe='subword_nmt')

fr = en2fr.translate('Hello world!', beam=5, verbose=True, print_alignment=True)
但是,这将仅将对齐作为日志消息输出。对于fairseq 0.9,它似乎被破坏并导致错误消息()


有没有一种方法可以从python代码中访问对齐信息(甚至可能是完整的注意矩阵?

我浏览了fairseq代码库,找到了一种输出对齐信息的方法。 因为这需要编辑fairseq源代码本身,所以我认为这不是一个可接受的解决方案。但也许这对某些人有帮助(我仍然对如何正确地做到这一点非常感兴趣)

编辑并重写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]))
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]))