Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为给定值的张量生成线段标签,该值指示线段边界_Python_Pytorch_Tensor_Bert Language Model_Fairseq - Fatal编程技术网

Python 为给定值的张量生成线段标签,该值指示线段边界

Python 为给定值的张量生成线段标签,该值指示线段边界,python,pytorch,tensor,bert-language-model,fairseq,Python,Pytorch,Tensor,Bert Language Model,Fairseq,如果给定一个表示张量内线段边界的唯一值,有人知道为张量生成“线段标签”的方法吗 例如,给定一个1D输入张量,其中值1表示线段边界 x=torch.Tensor([5,4,1,3,6,2]) 生成的线段标签张量应具有与表示两个线段的值相同的形状: segment_label=torch.Tensor([1,1,1,2,2]) 同样,对于一批输入,例如批次大小=3 x = torch.Tensor([ [5, 4, 1, 3, 6, 2], [9, 4, 5, 1, 8, 10],

如果给定一个表示张量内线段边界的唯一值,有人知道为张量生成“线段标签”的方法吗

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

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

生成的线段标签张量应具有与表示两个线段的值相同的形状:

segment_label=torch.Tensor([1,1,1,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中,而不是修改用于翻译任务的现有数据集,如
语言对\u数据集

提前谢谢

您可以使用以下方法来玩把戏:

mask=(x==1).到(x)#仅使用边界的mask
段\标签=掩码.总和(dim=-1)-掩码+1

结果与所需的
片段标签一致

谢谢Shai!这是一个巧妙的解决方案。同时,我使用for循环方法实现了它,但是
.cumsum()
要快得多。