使用TorchText(PyTorch)进行语言翻译

时间:2020-01-01 04:24:48

标签: deep-learning pytorch torch language-translation torchtext

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

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

但是,我对如何使用该模型在自定义输入上运行推理感到困惑。到目前为止,据我了解:

1)我们将需要使用德语(输入)和英语(输出)保存“ vocab”(使用torch.save()),以便以后可以用于运行预测。

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

3)上述张量将传递给模型的正向方法进行平移

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

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

问题:

1)如果上面的理解是正确的,那么如果我们知道源语言和目标语言并具有相同的vocab文件,那么可以将上述步骤视为在任何语言翻译模型上进行推理的通用方法吗?还是我们可以使用第三方库(如spacy)提供的vocab?

2)我们如何将模型返回的输出张量转换回目标语言?我找不到有关如何执行此操作的任何示例。上面的博客介绍了如何使用源语言vocab将输入文本转换为张量。

对于图像/视觉模型,我可以轻松找到各种示例和详细说明,而对于文本,则不多。

1 个答案:

答案 0 :(得分:1)

是的,在全球范围内,您说的都是正确的,当然您也可以使用任何词汇,例如由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

这里的序列是所有序列的列表(即数据集中的句子)。如果只包含单词或词尾列表,只需保留内部循环,即可轻松更改模型。