@@ -1391,13 +1391,20 @@ def add_eos(ragged: k2.RaggedTensor, eos_id: int) -> k2.RaggedTensor:
13911391 return concat (ragged , eos_id , direction = "right" )
13921392
13931393
1394- def make_pad_mask (lengths : torch .Tensor , max_len : int = 0 ) -> torch .Tensor :
1394+ def make_pad_mask (
1395+ lengths : torch .Tensor ,
1396+ max_len : int = 0 ,
1397+ pad_left : bool = False ,
1398+ ) -> torch .Tensor :
13951399 """
13961400 Args:
13971401 lengths:
13981402 A 1-D tensor containing sentence lengths.
13991403 max_len:
14001404 The length of masks.
1405+ pad_left:
1406+ If ``False`` (default), padding is on the right.
1407+ If ``True``, padding is on the left.
14011408 Returns:
14021409 Return a 2-D bool tensor, where masked positions
14031410 are filled with `True` and non-masked positions are
@@ -1414,9 +1421,14 @@ def make_pad_mask(lengths: torch.Tensor, max_len: int = 0) -> torch.Tensor:
14141421 max_len = max (max_len , lengths .max ())
14151422 n = lengths .size (0 )
14161423 seq_range = torch .arange (0 , max_len , device = lengths .device )
1417- expaned_lengths = seq_range .unsqueeze (0 ).expand (n , max_len )
1424+ expanded_lengths = seq_range .unsqueeze (0 ).expand (n , max_len )
1425+
1426+ if pad_left :
1427+ mask = expanded_lengths < (max_len - lengths ).unsqueeze (1 )
1428+ else :
1429+ mask = expanded_lengths >= lengths .unsqueeze (- 1 )
14181430
1419- return expaned_lengths >= lengths . unsqueeze ( - 1 )
1431+ return mask
14201432
14211433
14221434# Copied and modified from https://github.com/wenet-e2e/wenet/blob/main/wenet/utils/mask.py
0 commit comments