Context-biasing by CTC-based Word Spotter (CTC-WS)
jenkins jenkins jenkins jenkins jenkins jenkins jenkins jenkins jenkins jenkins jenkins
# What does this PR do ?

A new context-biasing method for CTC and Transducer (RNNT) models (only Hybrid Transducer-CTC in case of Transducer) by CTC-based Word Spotter (CTC-WS). The idea is to use CTC logprobs for fast decoding with context-biasing graph (tree). The context-biasing graph is built according to the context-biasing list of words/phrases and CTC transition topology. Obtained results (words with start/end timestamps) are merged with greedy CTC/Transducer word-level predictions. 

CTC-WS allows context-biasing in greedy decoding mode which is much faster than approaches based on shallow fusion (beam search decoding with external lm or context-biasing graph).

A detailed description of the CTC-WS algorithm and the comparison results will be published later.

**Collection**: [ASR]

# Changelog 
- Add specific line by line info of high level changes in this PR.

# Usage

```python
python scripts/asr_context_biasing/eval_greedy_decoding_with_context_biasing.py \
            nemo_model_file=<path to the .nemo file of the model> \
            input_manifest=<path to the evaluation JSON manifest file \
            preds_output_folder=<optional folder to store the predictions> \
            decoder_type=<type of model decoder [ctc or rnnt]> \
            acoustic_batch_size=<batch size to calculate log probabilities> \
            apply_context_biasing=<True or False to apply context biasing> \
            context_file=<path to the context biasing file with key words/phrases> \
            beam_threshold=[<list of the beam thresholds, separated with commas>] \
            context_score=[<list of the context scores, separated with commas>] \
            ctc_ali_token_weight=[<list of the ctc alignment token weights, separated with commas>] \
```

# Jenkins CI
To run Jenkins, a NeMo User with write access must comment `jenkins` on the PR.

# 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)
- [x] 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 the community is free to review the PR once the checks have passed. 
[Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md) contains specific people who can review PRs to various areas.

# Additional Information
* Related to # (issue)
