Nlp 如何在PyTorch中将句子长度批量转换为掩码?
例如,从Nlp 如何在PyTorch中将句子长度批量转换为掩码?,nlp,pytorch,Nlp,Pytorch,例如,从 lens = [3, 5, 4] 我们想得到 mask = [[1, 1, 1, 0, 0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 0]] 这两种都是torch.LongTensors.我发现的一种方法是: torch.arange(max_len).expand(len(lens), max_len) < lens.unsqueeze(1) torch.arange(max_len).展开(len(lens),max
lens = [3, 5, 4]
我们想得到
mask = [[1, 1, 1, 0, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 0]]
这两种都是torch.LongTensors.我发现的一种方法是:
torch.arange(max_len).expand(len(lens), max_len) < lens.unsqueeze(1)
torch.arange(max_len).展开(len(lens),max_len)
如果有更好的方法,请分享
torch.arange(max_len)[None,:]
只是对@ypc的答案做一点解释(由于缺乏声誉,无法发表评论):
torch.arange(max_len)[None,:]
总之,答案使用广播
机制来隐式地扩展
张量,就像在接受的答案中所做的那样。逐步:
[0,1,2,3,4]
[None,:]
将第0维附加到张量,使其形状(1,5)
,从而提供[[0,1,2,3,4]
lens[:,None]
向张量lens
附加第一维度,使其形状(3,1)
,即[[3],[5],[4]
(1,5)
和(3,1)
的张量,遵循广播的规则,得到的张量将是(3,5)
,结果值将是结果[i,j]=(j
试着描述一下你的答案。它将帮助其他人轻松捕获您的代码。请参阅