Machine learning 如何为火炬中心模型生成的翻译获取对齐或注意信息?
火炬中心提供预训练模型,例如: 这些模型可以在python中使用,也可以与CLI交互使用。 使用CLI,可以使用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
--print alignment
标志获取对齐。安装(和pytorch)后在终端工作
在python中,可以指定关键字argsverbose
和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]))