如何反转 PyTorch 嵌入?

How to invert a PyTorch Embedding?

我在 PyTorch 中有一个多任务 encoder/decoder 模型,在输入端有一个(可训练的)torch.nn.Embedding 嵌入层。

在一项特定任务中,我想预训练自监督模型(以重新构建屏蔽输入数据)并将其用于推理(以填补数据空白)。

我想对于训练时间,我可以将损失测量为输入嵌入和输出嵌入之间的距离...但是为了推理,我如何反转 Embedding 以重建正确的 category/token 输出对应?我看不到例如嵌入 class...

上的“最近”函数

你可以很容易地做到:

import torch

embeddings = torch.nn.Embedding(1000, 100)
my_sample = torch.randn(1, 100)
distance = torch.norm(embeddings.weight.data - my_sample, dim=1)
nearest = torch.argmin(distance)

假设您有 1000 个具有 100 维度的标记,这将是 return 基于欧氏距离的最近嵌入。您也可以以类似的方式使用其他指标。