【问题标题】:Language translation using TorchText (PyTorch)使用 TorchText (PyTorch) 进行语言翻译
【发布时间】:2020-04-20 07:55:06
【问题描述】:

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

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

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

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

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

3) 上面的张量会传递给模型的forward方法进行平移

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

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

问题:

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

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

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

【问题讨论】:

  • 你好,苛刻!您是否找到了解决方案或解决方法?我也坚持这一点,我已经尽我所能但没有奏效。如果你不介意分享你为摆脱这个坑所做的代码。请把链接放在这里!!

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


【解决方案1】:

是的,在全球范围内,您所说的都是正确的,当然您可以使用任何词汇,例如由 spacy 提供。要将张量转换为自然文本,最常用的方法之一是同时保留一个将索引映射到单词的 dict 和另一个将单词映射到索引的 dict,下面的代码可以做到这一点:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多