Pytorch:如何实现嵌套转换器:单词的字符级转换器和句子的单词级转换器?

数据挖掘 nlp 火炬 变压器
2022-02-18 23:16:29

我有一个模型,但我很难弄清楚如何在 Pytorch 中实际编码它,尤其是在训练模型时(例如如何定义小批量等)。首先让我快速介绍一下上下文:

我正在研究 VQA(视觉问答),其中的任务是回答有关图像的问题,例如:

在此处输入图像描述

所以,抛开许多细节不谈,我只想在这里关注模型的 NLP 方面/分支。为了处理自然语言问题,我想使用字符级嵌入(而不是传统的单词级嵌入),因为它们更健壮,因为它们可以轻松适应单词的形态变化(例如前缀、后缀、复数、动词变位、连字符等)。但同时我又不想失去单词层面推理的归纳偏见。因此,我想出了以下设计:

在此处输入图像描述

正如您在上图中所见,我想使用变压器(甚至更好的通用变压器),但需要稍加改动。我想使用 2 个转换器:第一个将单独处理每个单词字符(字符级转换器),为问题中的每个单词生成一个初始单词级嵌入。一旦我们有了所有这些初始的词级嵌入,第二个词级转换器将细化这些嵌入,以用上下文丰富它们的表示,从而获得上下文感知的词级嵌入。

整个 VQA 任务的完整模型显然更复杂,但我只想在这里集中讨论这个 NLP 部分。所以我的问题基本上是关于在实现这个时我应该注意哪些 Pytorch 功能。例如,由于我将使用字符级嵌入,我必须定义一个字符级嵌入矩阵,但随后我必须对该矩阵执行查找以生成字符级转换器的输入,对每个单词重复此操作在问题中,然后将所有这些向量输入到单词级别变压器。此外,单个问题中的单词可以有不同的长度,单个 mini-batch 中的问题也可以有不同的长度。因此,在我的代码中,我必须以某种方式在单个小批量中(在训练期间)同时考虑单词和问题级别的不同长度,而且我不知道如何在 Pytorch 中做到这一点,或者它是否甚至可能.

任何关于如何在 Pytorch 中实现这一点的提示,如果可以引导我朝着正确的方向前进,我们将不胜感激。

0个回答
没有发现任何回复~