def METHOD_NAME(self, profile: torch.Tensor, binary_labels: torch.Tensor, mask: torch.Tensor):
    bsz, dim = profile.shape[0], profile.shape[-1]
    profile_norm = torch.linalg.norm(profile, dim=-1, keepdim=False)
    spk_count = binary_labels.sum(dim=1)
    prob = np.random.rand(bsz)
    batch_indices = np.nonzero(prob < self.disturb_aug_prob)[0]
    for idx in batch_indices:
        pos_spk_idx = torch.nonzero(spk_count[idx] * mask[idx])
        valid_spk_idx = torch.nonzero(profile_norm[idx] * mask[idx])
        if len(pos_spk_idx) == 0 or len(valid_spk_idx) == 0:
            continue
        to_disturb_idx = pos_spk_idx[torch.randint(len(pos_spk_idx), ())]
        disturb_idx = valid_spk_idx[torch.randint(len(valid_spk_idx), ())]
        alpha = self.disturb_alpha * torch.rand(()).item()
        profile[idx, to_disturb_idx] = ((1 - alpha) * profile[idx, to_disturb_idx]
                                        + alpha * profile[idx, disturb_idx])
        profile[idx, to_disturb_idx] = F.normalize(profile[idx, to_disturb_idx], dim=-1)
        mask[idx, to_disturb_idx] = 0
    return profile, binary_labels, mask