2

我最近开始使用 PyTorch 进行 ML/DL。以下 pytorch 示例说明了我们如何训练一个简单的模型来将德语翻译成英语。

https://pytorch.org/tutorials/beginner/torchtext_translation_tutorial.html

但是,我对如何使用模型对自定义输入进行推理感到困惑。据我目前的理解:

1) 我们需要保存德语(输入)和英语(输出)的“词汇”[使用 torch.save()],以便以后可以使用它们进行预测。

2)在对德语段落进行推理时,我们首先需要使用德语词汇文件将德语文本转换为张量。

3) 将上述张量传递给模型的forward方法进行翻译

4) 模型将再次返回目标语言的张量,即当前示例中的英语。

5)我们将使用第一步保存的英语词汇将此张量转换回英文文本。

问题:

1)如果上述理解是正确的,如果我们知道源语言和目标语言并且拥有相同的词汇文件,上述步骤是否可以被视为在任何语言翻译模型上运行推理的通用方法?或者我们可以使用像 spacy 这样的第三方库提供的词汇吗?

2)我们如何将模型返回的输出张量转换回目标语言?我找不到任何关于如何做到这一点的例子。上面的博客解释了如何使用源语言词汇将输入文本转换为张量。

我可以很容易地找到图像/视觉模型的各种示例和详细说明,但对于文本来说却不多。

4

1 回答 1

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

这里的序列是所有序列的列表(即数据集中的句子)。如果您只有一个单词或标记列表,您可以通过仅保留内部循环轻松更改模型。

于 2020-01-01T09:47:38.153 回答