[TTS] Implement new TextToSpeech dataset
State: closed | Pull request: yes
Labels: name: TTS

# What does this PR do ?

Add initial implementation of new TTS data loader which supports multi-manifest training and uses mostly preprocessed features.

The data loader is intended to be for TTS acoustic model and as such includes some specific functionality for text processing. Other models like vocoder will need another data loader, with most of the common code being shared in the features & tts_dataset_utils.

**Collection**: [TTS]

# Changelog 
- Implement TextToSpeechDataset class (following ASR naming convention of having separate X to X datasets for each task). 
- Add example FastPitch config for using new dataset.
- Modify feature.yaml files to use relative paths so they can be reused directly in the training script without needing to be nested in the fastpitch conf directory itself.
- Add code branches to FastPitch model to allow configuring new data loader for weighted sampling.
- Add `collate_fn` to featurizer class.
- Make log energy optional in FastPitch module so user can experiment with different normalization approaches.

# Usage
* This is an example command to train FastPitch on LJSpeech & VCTK with 0.2 and 0.8 sampling weight, respectively.

```bash
/home/rlangman/miniconda3/envs/nemo_dev/bin/python /home/rlangman/Code/NeMo/examples/tts/fastpitch.py
--config-path=/home/rlangman/Code/NeMo/examples/tts/conf/fastpitch
--config-dir=/home/rlangman/Code/NeMo/examples/tts/conf
--config-name=fastpitch_22050.yaml
n_speakers=110
speaker_path=/home/rlangman/Data/multi/ljspeech_vctk_speakers.json
max_epochs=1
weighted_sample_steps=10
phoneme_dict_path=/home/rlangman/Code/NeMo/scripts/tts_dataset_files/ipa_cmudict-0.7b_nv23.01.txt
heteronyms_path=/home/rlangman/Code/NeMo/scripts/tts_dataset_files/heteronyms-052722
feature_stats_path=/home/rlangman/Data/multi/ljspeech_vctk_stats.json
exp_manager.exp_dir=/home/rlangman/exps/ljspeech_vctk
+train_ds_meta.ljspeech._target_=nemo.collections.tts.data.text_to_speech_dataset.DatasetMeta
+train_ds_meta.ljspeech.manifest_path=/home/rlangman/Data/ljspeech/train_manifest.json
+train_ds_meta.ljspeech.audio_dir=/home/rlangman/Data/ljspeech/audio
+train_ds_meta.ljspeech.feature_dir=/home/rlangman/Data/ljspeech/features
+train_ds_meta.ljspeech.sample_weight=0.2
+val_ds_meta.ljspeech._target_=nemo.collections.tts.data.text_to_speech_dataset.DatasetMeta
+val_ds_meta.ljspeech.manifest_path=/home/rlangman/Data/ljspeech/val_manifest.json
+val_ds_meta.ljspeech.audio_dir=/home/rlangman/Data/ljspeech/audio
+val_ds_meta.ljspeech.feature_dir=/home/rlangman/Data/ljspeech/features
+train_ds_meta.vctk._target_=nemo.collections.tts.data.text_to_speech_dataset.DatasetMeta
+train_ds_meta.vctk.manifest_path=/home/rlangman/Data/vctk/train_manifest.json
+train_ds_meta.vctk.audio_dir=/home/rlangman/Data/vctk/audio
+train_ds_meta.vctk.feature_dir=/home/rlangman/Data/vctk/features
+train_ds_meta.vctk.sample_weight=0.8
+val_ds_meta.vctk._target_=nemo.collections.tts.data.text_to_speech_dataset.DatasetMeta
+val_ds_meta.vctk.manifest_path=/home/rlangman/Data/vctk/val_manifest.json
+val_ds_meta.vctk.audio_dir=/home/rlangman/Data/vctk/audio
+val_ds_meta.vctk.feature_dir=/home/rlangman/Data/vctk/features
```

# 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