python - 给定一个表示段边界的值,为张量生成段标签

标签 python pytorch tensor bert-language-model fairseq

有谁知道如何为张量生成“段标签”,并给出代表张量内段边界的唯一值?

例如,给定一个一维输入张量,其中值 1 表示段边界,

x = torch.Tensor([5, 4, 1, 3, 6, 2])

生成的段标签张量应该具有相同的形状,并且值代表两个段:

segment_label = torch.Tensor([1, 1, 1, 2, 2, 2])

同样,对于一批输入,例如批量大小 = 3,

x = torch.Tensor([
    [5, 4, 1, 3, 6, 2],
    [9, 4, 5, 1, 8, 10],
    [10, 1, 5, 4, 8, 9]
    ])

生成的段标签张量(使用 1 作为段分隔符)应如下所示:

segment_label = torch.Tensor([
    [1, 1, 1, 2, 2, 2],
    [1, 1, 1, 1, 2, 2],
    [1, 1, 2, 2, 2, 2]
    ])

上下文:我目前正在 PyTorch 中使用 Fairseq 的 Transformer 实现来执行 seq2seq NLP 任务。我正在寻找一种方法,在编码器的前向传递过程中将类似 BERT 的分段嵌入合并到 Transformer 中,而不是修改用于翻译任务的现有数据集,例如 language_pair_dataset

提前致谢!

最佳答案

您可以使用torch.cumsum耍花招:

mask = (x == 1).to(x)  # mask with only the boundaries
segment_label = mask.cumsum(dim=-1) - mask + 1

具有所需segment_label的结果。

关于python - 给定一个表示段边界的值,为张量生成段标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65175941/

相关文章:

python - CountVectorizer() 不适用于单字母单词

带有 math.sqrt 函数的 Python 计算器

python - 找不到满足要求的版本 torch==1.3.1

pytorch - 如何用 2D mask mask 3D 张量并保持原始向量的尺寸?

python - 在python中使用mysql获取最后两个查询

python - 在 Pandas 中访问多索引数据帧时出现 KeyError

machine-learning - 损失函数如何知道在 PyTorch 中为哪个模型计算梯度?

python - PyTorch 张量的零对角线?

java - Tensorflow-Java 图像比较

python - tf.estimator 需要 label_data 和 batch_size 进行预测 Tensorflow