Building an end-to-end Speech Recognition model in PyTorch
assemblyai.com
assemblyai.com
1. Tons of diverse data sets (real world)
2. Solution for Noise - Either de-noise and train OR train with noise.
There are lots of extra challenges that voice recognition problem have to solve which is not common with other deep learning problems:
1. Pitch
2. Speed of conversation
3. Accents (can be solved with more data, I think)
4. Real time inference (low latency)
5. On the edge (i.e. Offline on mobile devices)
The article mentions that they used a dataset composed of 100 hours of audiobooks. A comment thread here [1] estimates 10-50k visitors from a successful hackernews post. Call it 30k visitors. If 20% of visitors donated by reading a one minute prompt, that's another 6,000 minutes, or, oddly, also 100 hours.
Seems like a potentially easy way to double your dataset and make it more diverse.
Audio data of people reading prompts is quite common, what is missing for robust voice recognition is plenty of data of e.g. people screaming it across the room. There is only so much physics simulations can do.
There is also not really a problem about available open source code. There are countless of open source projects which already have that mostly ready to use, for all the common DL frameworks, like TF, PyTorch, Jax, MXNet, whatever. For anyone with a bit of ML experience, this should really not be too hard to setup.
But then to get good performance, on your own dataset, what you really need is experience. Probably taking some existing pipeline will get you some model, with an okish word-error-rate. But then you should tune it. In any case, even without tuning, probably encoder-decoder-attention models will perform better than CTC models.
You do need attention in the language model part of the pipeline
See for example here as an overview (my own work, already a bit outdated, but attention has even improved much more since then): https://openreview.net/pdf?id=S1gp9v_jsm
The blog does mention Listen-Attend-Spell (which is an encoder-decoder architecture) as an alternative to the CTC model.
Note that there are also approaches for encoder-decoder-attention to make that streaming capable, e.g. MoChA or hard attention, etc.
Google uses RNN-T on-device. But they are researching on extending it with another encoder-decoder-attention model on-top, to get better performance.
This is a quite active research area, and it has not really settled. But CTC is not really too much relevant anymore, as RNNT is just a better variant.
Edit: I think I've fixed it by changing the pip command to:
!pip install torchaudio comet_ml==3.0
Its a problem that as an industry I think we are in the middle of "solving" (probably can't be solved fully, but things are getting better). I'm really excited to see what kinds of tools and tests will be developed around getting ML projects with some better practices.
https://github.com/mozilla/DeepSpeech
https://hacks.mozilla.org/2019/12/deepspeech-0-6-mozillas-sp...
I haven't had a chance to test it, and I wish there were a client-side WASM demo of it that I could just visit on Mozilla's site.
Most open source models are trained on Libri, SWB, etc. which are not really big or diverse enough for real-world scenarios.
But to max-out results the devil is in the details IMO (network architecture, optimizer, weight initialization, regularization, data augmentation, hyperparam tuning, etc) which requires a lot of experiments.
Google is training on datasets that are as big as 30kh and MS seems to work on a 10k h dataset.
At the moment, I am working on a similar e2e system but 80h big dataset makes it a really challenging task to generalize well.