RiconoscimentoVocaleViaDeepLearning
Storia
Il primo passo del riconoscimento vocale è quello di rappresentare il segnale audio mediante una sequenza di vettori di parametri y calcolati su finestre di segnale (frames). Tipicamente questi parametri sono legati ad una rappresentazione spettrale del segnale, come l'uscita di un banco di filtri od il modulo di una FFT, eventualmente applicando una distorsione percettiva all'asse delle frequenze, come nel caso dei MFCC.
I primi sistemi di riconoscimento vocale (anni 70-80) erano basati sulla tecnica del Dynamic Time Warping (DTW), in grado di allineare tra loro sequenze di vettori relative a parole pronunciate a velocità differente, in modo da individuare un percorso di minimo costo all'interno di un grafo (detto traliccio): tale costo viene quindi interpretato come distanza tra coppie di parole. Ripetendo tale calcolo per tutte le parole possibili, quella che ottiene il minimo costo minimo viene dichiarata come riconosciuta.
Successivamente (anni 80-90) si sono affermate le tecniche basate sugli Hidden Markov Models (HMM), in cui l'allineamento ottimo viene eseguito mediante l'algoritmo di Viterbi, ed il traliccio costruito a partire dalla matrice di transizione che definisce la struttura degli HMM utilizzati per rappresentare le unità linguistiche w (parole, fomeni, demisillabe...). Gli HMM sono detti anche modelli acustici in quanto agli stati sono associate le densità di probabilità che descrivono i vettori di parametri y, in modo da assegnare valori di probabilità p(y/w) alle osservazioni, condizionatamente all'ipotesi linguistica w.
Il problema viene quindi tipicamente arricchito specificando un modello di linguaggio capace di assegnare valori di probabilità a sequenze di unità linguistiche W = w1 .. wn, in modo da riformuare il riconoscimento come una decisione di massima probabilità a posteriori, ovvero individuare W* tale che p(Y/W*)p(W*) sia massima.
Avanzamenti
A partire dagli anni 90 si è sviluppato l'approccio legato alle reti neurali (NN), che condividono con gli HMM l'apprendimento dei parametri basato sulla analisi iterativa di dataset: i secondi adottano una tecnica nota come Expectation-Maximization, mentre le prime si basano tipicamente sulla Back Propagation. L'adattamento delle NN al problema del riconoscimento vocale passa da alcuni punti chiave che possono riassumersi in
- stima delle probabilità di ognuna delle unità linguistiche per ogni frame, anziché decisione per una unica sequenza di minor costo
- introduzione di elementi con memoria come le RNN e LSTM
- adozione di tecniche di allineamento temporale come CTC e
- arricchimento della struttura delle NN mediante livelli profondi (DNN)
e presso Wikipedia troviamo al solito una buona descrizione di tale evoluzione
Letture consigliate
Di seguito vengono elencati una serie di link utili e/o interessanti per affrontare l'argomento di tesi
Reti neurali
- presentazione stringata ed essenziale -> https://homes.di.unimi.it/valenti/SlideCorsi/Bioinformatica06/PercMLP_BP.pdf
- molto più discorsiva e dettagliata, eccellente il simulatore citato in fondo -> http://bias.csr.unibo.it/maltoni/ml/DispensePDF/8_ML_RetiNeurali.pdf
- Backpropagation su Wikipedia -> https://en.wikipedia.org/wiki/Backpropagation
- Deep Learning - An MIT Press book - by I.Goodfellow, Y.Bengio, A.Courville -> https://www.deeplearningbook.org/
- Deep Learning for NLP and Speech Recognition - Springer 2019 - by U.Kamath, J.Liu, J.Whitaker -> https://www.academia.edu/43190210/Deep_Learning_for_NLP_and_Speech_Recognition
- Learn Keras for Deep Neural Networks: A Fast-Track Approach to Modern Deep Learning with Python - Apress 2019 - by J.Moolayil
Progetto Common Voice di Mozilla
- Il progetto -> https://voice.mozilla.org/it
- DeepSpeech 0.6: Mozilla’s Speech-to-Text Engine Gets Fast, Lean, and Ubiquitous -> https://hacks.mozilla.org/2019/12/deepspeech-0-6-mozillas-speech-to-text-engine/
- Deep Speech: Scaling up end-to-end speech recognition -> https://arxiv.org/abs/1412.5567
- Deep Speech 2: End-to-End Speech Recognition in English and Mandarin (2017) -> https://arxiv.org/abs/1512.02595 oppure (2016) http://proceedings.mlr.press/v48/amodei16.pdf
- Connectionist Temporal Classification o CTC
- Sequence Modeling With CTC - a visual guide -> https://distill.pub/2017/ctc/
- Connectionist Temporal Classification: Labelling UnsegmentedSequence Data with Recurrent Neural Networks -> http://www.cs.toronto.edu/%7Egraves/icml_2006.pdf
- LSTM e GRU
- Understanding LSTM Networks -> http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- Illustrated Guide to LSTM’s and GRU’s: A step by step explanation -> https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
- Recurrent / LSTM layers explained in a simple way -> https://medium.com/datathings/recurrent-lstm-layers-explained-in-a-simple-way-d615ebcac450
- Tutorial applicativi Tensorflow e PyTorch
- Building an end-to-end Speech Recognition model in PyTorch -> https://www.assemblyai.com/blog/end-to-end-speech-recognition-pytorch
- Riconoscimento audio semplice: riconoscimento delle parole chiave -> https://www.tensorflow.org/tutorials/audio/simple_audio#build_and_train_the_model
Elaborazione del segnale e classificazione
- Audio signal feature extraction and clustering -> https://medium.com/heuristics/audio-signal-feature-extraction-and-clustering-935319d2225
- Real-time Sound event classification -> https://towardsdatascience.com/real-time-sound-event-classification-83e892cf187e
- Speech Classification Using Neural Networks: The Basics -> https://towardsdatascience.com/speech-classification-using-neural-networks-the-basics-e5b08d6928b7
- Voice Classification with Neural Networks -> https://towardsdatascience.com/voice-classification-with-neural-networks-ff90f94358ec
- An Overview of Signal Classification -> https://medium.com/gsi-technology/an-overview-of-signal-classification-d6d7a8d45eb0
- Voice Activity Detection for Voice User Interface -> https://medium.com/linagoralabs/voice-activity-detection-for-voice-user-interface-2d4bb5600ee3
- Si riferisce all'assistente vocale open source Mycroft-AI -> https://mycroft.ai/
- How to do Real Time Trigger Word Detection with Keras -> https://medium.com/hackernoon/how-to-do-real-time-trigger-word-detection-with-keras-b8a56ab106b7
Web Speech API
- ovvero come inserire riconoscimento e sintesi vocale all'interno di pagine web sfruttando i servizi di Google
- Implementing Speech Recognition and Speech Synthesis -> https://medium.com/@nancyw25/implementing-speech-recognition-and-speech-synthesis-61a0ed092d5c
- Speech recognition in browsers, 2018 -> https://medium.com/@seoul_engineer/speech-recognition-in-browsers-2018-f25bf59857bc
Sistemi di riconoscimento Open Source
- Hidden Markov Model Toolkit (HTK) -> http://htk.eng.cam.ac.uk/
- HTKBook Contiene anche una compatta descrizione della teoria -> https://www.researchgate.net/publication/289354717_The_HTK_Book_version_35a
- CMUSphinx Project (HMM) -> https://cmusphinx.github.io/
- Janus Recognition Toolkit (HMM) -> http://isl.anthropomatik.kit.edu/english/1406.php
- Julius basato su HMM, per grandi vocabolari e che occupa poca memoria -> http://julius.osdn.jp/en_index.php
- Kaldi è orientato alle reti neurali, anche usato per estrarre i parametri spettrali di un dataset audio -> http://kaldi-asr.org/
- I migliori 10 strumenti di riconoscimnto vocale open source per Linux -> https://www.ubuntupit.com/best-open-source-speech-recognition-tools-for-linux/
- Wav2letter++ è il sistema di riconoscimento vocale di facebook
- articolo-> https://arxiv.org/abs/1812.07625
- blog -> https://ai.facebook.com/blog/online-speech-recognition-with-wav2letteranywhere/
- Better, Faster Speech Recognition with Wav2Letter’s Auto Segmentation Criterion -> https://towardsdatascience.com/better-faster-speech-recognition-with-wav2letters-auto-segmentation-criterion-765efd55449
- Medium -> https://towardsdatascience.com/facebook-just-open-sourced-some-of-its-recent-work-in-self-supervised-speech-recognition-systems-c5c143885a0d
- Attention in end-to-end Automatic Speech Recognition -> https://medium.com/intel-student-ambassadors/attention-in-end-to-end-automatic-speech-recognition-9f9e42718d21
- Attention Mechanism in Deep Learning : Simplified -> https://medium.com/@prakhargannu/attention-mechanism-in-deep-learning-simplified-d6a5830a079d
Dataset Audio
- VoxForge -> http://www.voxforge.org/ - ci sono sia dataset che modelli acustici, più
- linee guida per la segmentazione audio -> http://www.voxforge.org/home/dev/mansegaudio
- link al programma di segmentazione -> https://julius.osdn.jp/juliusbook/en/adintool.html
- LiberLiber -> https://www.liberliber.it/online/ - audio libri italiani
- Librivox -> https://librivox.org/ - audio libri multilingue
- da cui deriva LibriSpeech -> http://www.openslr.org/12 - circa 1000 ore di inglese letto, campionato a 16kHz, segmentato ed allineato. Articolo: https://www.danielpovey.com/files/2015_icassp_librispeech.pdf
- Speech Commands -> https://ai.googleblog.com/2017/08/launching-speech-commands-dataset.html - 65,000 files di un secondo con 30 parole brevi, pronunciate da migliaia di persone. Articolo: https://arxiv.org/pdf/1804.03209.pdf
- Commonn Voice -> https://voice.mozilla.org/en/datasets - dataset multilingua, per l'italiano abbiamo un centinaio di ore validate di frasi qualunque, su 4000 voci etichettate per genere ed età
- Speech Dataset su Kaggle -> https://www.kaggle.com/datasets?search=speech - un elenco di dataset per applicazioni di Machine Learning
- Paperswithcode -> https://paperswithcode.com/task/speech-recognition - per ogni dataset pubblico stila una classifica degli approcci che conseguono l'error rate inferiore, con links ad articolo e codice
- Public Domain Sounds Backup -> http://pdsounds.tuxfamily.org/ - 635 copyright-free sound recordings
- Un elenco di dataset di voce e musica -> https://github.com/jim-schwoebel/voice_datasets
Linguaggi e Ambienti
- Open AI just chose PyTorch over Tensorflow -> https://medium.com/the-ultimate-engineer/open-ai-just-choose-pytorch-over-tensorflow-d1385133d534
- Is PyTorch Catching TensorFlow? -> https://towardsdatascience.com/is-pytorch-catching-tensorflow-ca88f9128304
- Hands-On Speech Recognition Engine with Keras and Python -> https://medium.com/@fortes.arthur/hands-on-speech-recognition-engine-with-keras-and-python-c60488ac53cd
- Google Colab per il Machine Learning: cos’è e come si usa -> https://www.html.it/articoli/google-colab-per-il-machine-learning-cose-e-come-si-usa/
- A Simple Neural Network from Scratch with PyTorch and Google Colab -> https://medium.com/dair-ai/a-simple-neural-network-from-scratch-with-pytorch-and-google-colab-c7f3830618e0
- Building RNNs is Fun with PyTorch and Google Colab -> https://medium.com/dair-ai/building-rnns-is-fun-with-pytorch-and-google-colab-3903ea9a3a79
- Numba makes Python code fast -> http://numba.pydata.org/
Modello di linguaggio
- Pre-trained language model in any language -> https://medium.com/ai-quest/pre-trained-language-model-in-any-language-7531ea7217d4
Altro
- Building Custom Speech Recognition Models Within Minutes -> https://medium.com/ibm-watson/building-custom-speech-recognition-models-within-minutes-33221c1ed8f8
- Hello World in Speech Recognition - Stripped down end to end ASR in Tensorflow -> https://towardsdatascience.com/hello-world-in-speech-recognition-b2f43b6c5871
- How to run GPU accelerated Signal Processing in TensorFlow -> https://medium.com/swlh/how-to-run-gpu-accelerated-signal-processing-in-tensorflow-13e1633f4bfb
- How to do Deep Learning on Graphs with Graph Convolutional Networks -> https://towardsdatascience.com/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-7d2250723780