我最近开始使用PyTorch进行ML / DL。以下pytorch示例说明了我们如何训练一个简单的模型,以将德语翻译成英语。
https://pytorch.org/tutorials/beginner/torchtext_translation_tutorial.html
但是我对如何使用该模型在自定义输入上进行推断感到困惑。从我的理解至今:
1)[我们需要为德语(输入)和英语(输出)保存“ vocab” [使用torch.save()],以便以后可以用于运行预测。
2)在对德语段落进行推断时,我们首先需要使用德语vocab文件将德语文本转换为张量。
3)上述张量将传递给模型的正向方法进行转换
4)该模型将再次返回在当前示例中,目标语言,即英语的张量。
5)我们将使用保存在第一步转换,这个张量回英文文本的英语词汇。
1)如果上面的理解是正确的,如果我们知道源语言和目标语言并具有相同的vocab文件,那么可以将上述步骤视为在任何语言翻译模型上进行推理的通用方法吗?还是我们可以使用第三方库(如spacy)提供的vocab?
2)如何将模型返回的输出张量转换回目标语言?我无法找到如何做到这一点的任何例子。上面的博客介绍了如何使用源语言词汇将输入文本转换为张量。
我可以轻松找到图像/视觉模型的各种示例和详细说明,但对于文本来说却不多。
是的,在全球范围内,您所说的都是正确的,当然您可以使用任何词汇,例如通过spacy提供。要将张量转换为自然文本,最常用的方法之一是保留一个将索引映射到单词的字典和另一个将单词映射到索引的字典,下面的代码可以做到这一点:
tok2idx = defaultdict(lambda: 0)
idx2tok = {}
for seq in sequences:
for tok in seq:
if not tok in tok2idx:
tok2idx[tok] = index
idx2tok[index] = tok
index += 1
此处的序列是所有序列(即数据集中的句子)的列表。您可以通过只保留内环轻易改变模型,如果你只有一个词或tokkens的名单。