Dataloader, collector, loss and metric for multiscale diarization decoder 
State: closed | Pull request: yes

# What does this PR do ?

This PR adds dataloaders, collectors, loss functions and accuracy metric for multiscale diarization decoder to NeMo. Multiscale diarization decoder is a model that accepts cluster-average embedding and multiscale embeddings to infer diarization output. Before push the model files and inference scripts, these files better be reviewed and merged to reduce the bandwidth of PR review.



**Collection**: ASR (speaker tasks)
# Changelog 

- `nemo/collections/asr/data/audio_to_label.py`

Added the following classes:

`AudioToSpeechDiarTrainDataset()`
`_AudioDiarTrainDataset()`

The above classes are built for diarization training and validation.
The input is raw audio waveform with segmentation timestamp information.
Diarization inference procedure involves clustering process for varying number of speakers. 
Therefore, training is done only for two speaker dataset. For inference, we need 
a separate dataloader that takes clustering results and cluster-average embedding as inputs.

`AudioToSpeechMSDDDataset()`
`_AudioMSDDDataset()`

The above classes are built for diarization inference. The input is speaker embeddings and cluster-average embeddings.

Added the following functions:

`get_scale_mapping_list()`
`_extract_seg_info_from_rttm()`
`_assign_frame_level_spk_vector()`
`_get_diar_target_labels()`
`_msdd_collate_fn()`
`_diar_train_collate_fn()`

- `nemo/collections/common/parts/preprocessing/collections.py`

The following functions are added to collect audio_filepath, rttm_filepath and number of speakers.

DiarizationSpeechLabel()
DiarizationLabel()

- `nemo/collections/asr/losses/bce_loss.py`

This file is newly created. Contains binary cross entropy loss that is needed for training overlap-aware diarization models since one unit timestep output vector should be able to contain more than one label.

- `nemo/collections/asr/metrics/multi_binary_acc.py`

Multi-binary accuracy that currently includes F1 accuracy. This file is named as "multi-binary accuracy" since other accuracy measures such as area under curve can be added in the future.

# Usage

These are newly added class and functions. The yaml file and inference script will be provided later when model files are uploaded.


# Before your PR is "Ready for review"
**Pre checks**:
- [x] Make sure you read and followed [Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md)
- [ ] Did you write any new necessary tests?
- [ ] Did you add or update any necessary documentation?
- [ ] Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)
  - [ ] Reviewer: Does the PR have correct import guards for all optional libraries?
  
**PR Type**:
- [x] New Feature
- [ ] Bugfix
- [ ] Documentation

If you haven't finished some of the above items you can still open "Draft" PR.


## Who can review?

Anyone in NeMo ASR.

# Additional Information

For more details about multiscale diarization decoder, check out the following paper:
https://arxiv.org/pdf/2203.15974.pdf