From 0bd653a975a9c248a5582c6858bda28b50164112 Mon Sep 17 00:00:00 2001 From: Reuben Morais Date: Tue, 30 Mar 2021 19:38:31 +0200 Subject: [PATCH] Merge STT playbook into docs --- doc/conf.py | 5 +- doc/index.rst | 10 +- doc/playbook/ABOUT.md | 37 ++++ doc/playbook/ALPHABET.md | 42 ++++ doc/playbook/AM_vs_LM.md | 21 ++ doc/playbook/DATA_FORMATTING.md | 115 ++++++++++ doc/playbook/DEEPSPEECH.md | 37 ++++ doc/playbook/DEPLOYMENT.md | 114 ++++++++++ doc/playbook/ENVIRONMENT.md | 299 ++++++++++++++++++++++++++ doc/playbook/EXAMPLES.md | 47 ++++ doc/playbook/INTRO.md | 54 +++++ doc/playbook/LICENSE.md | 3 + doc/playbook/README.md | 84 ++++++++ doc/playbook/SCORER.md | 310 +++++++++++++++++++++++++++ doc/playbook/TESTING.md | 163 ++++++++++++++ doc/playbook/TRAINING.md | 368 ++++++++++++++++++++++++++++++++ doc/playbook/images/nvtop.png | Bin 0 -> 227667 bytes doc/requirements.txt | 3 +- 18 files changed, 1707 insertions(+), 5 deletions(-) create mode 100755 doc/playbook/ABOUT.md create mode 100644 doc/playbook/ALPHABET.md create mode 100644 doc/playbook/AM_vs_LM.md create mode 100644 doc/playbook/DATA_FORMATTING.md create mode 100644 doc/playbook/DEEPSPEECH.md create mode 100644 doc/playbook/DEPLOYMENT.md create mode 100644 doc/playbook/ENVIRONMENT.md create mode 100644 doc/playbook/EXAMPLES.md create mode 100644 doc/playbook/INTRO.md create mode 100644 doc/playbook/LICENSE.md create mode 100644 doc/playbook/README.md create mode 100644 doc/playbook/SCORER.md create mode 100644 doc/playbook/TESTING.md create mode 100644 doc/playbook/TRAINING.md create mode 100644 doc/playbook/images/nvtop.png diff --git a/doc/conf.py b/doc/conf.py index 30ef47df..3b69dba6 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -76,7 +76,8 @@ extensions = [ 'sphinx.ext.viewcode', 'sphinx_js', 'sphinx_csharp', - 'breathe' + 'breathe', + 'recommonmark', ] @@ -112,7 +113,7 @@ language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['.build', 'Thumbs.db', '.DS_Store', 'node_modules'] +exclude_patterns = ['.build', 'Thumbs.db', '.DS_Store', 'node_modules', 'examples'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' diff --git a/doc/index.rst b/doc/index.rst index 4a4894c0..6a4f4011 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -76,7 +76,7 @@ The fastest way to deploy a pre-trained 🐸STT model is with `pip` with Python DotNet-Examples Java-Examples - + HotWordBoosting-Examples Contributed-Examples @@ -85,10 +85,16 @@ The fastest way to deploy a pre-trained 🐸STT model is with `pip` with Python :maxdepth: 1 :caption: Language Model - Scorer + LANGUAGE_MODEL .. include:: SUPPORT.rst +.. toctree:: + :maxdepth: 1 + :caption: STT Playbook + + playbook/README + Indices and tables ================== diff --git a/doc/playbook/ABOUT.md b/doc/playbook/ABOUT.md new file mode 100755 index 00000000..5235184a --- /dev/null +++ b/doc/playbook/ABOUT.md @@ -0,0 +1,37 @@ +[Home](README.md) | [Previous - Introduction](INTRO.md) | [Next - Formatting your training data](DATA_FORMATTING.md) + +# About Coqui STT + +## Contents + +- [About Coqui STT](#about-coqui-stt) + * [Contents](#contents) + * [What does Coqui STT do?](#what-does-coqui-stt-do-) + * [How does Coqui STT work?](#how-does-coqui-stt-work-) + * [How is Coqui STT implemented?](#how-is-coqui-stt-implemented-) + +## What does Coqui STT do? + +🐸STT is a tool for automatically transcribing spoken audio. 🐸STT takes digital audio as input and returns a "most likely" text transcript of that audio. + +🐸STT is an implementation of the 🐸STT algorithm developed by Baidu and presented in this research paper: + +> Hannun, A., Case, C., Casper, J., Catanzaro, B., Diamos, G., Elsen, E., Prenger R, Satheesh S, Sengupta S, Coates A., & Ng, A. Y. (2014). Deep speech: Scaling up end-to-end speech recognition. [arXiv preprint arXiv:1412.5567](https://arxiv.org/pdf/1412.5567). + +🐸STT can be used for two key activities related to speech recognition - _training_ and _inference_. Speech recognition _inference_ - the process of converting spoken audio to written text - relies on a _trained model_. 🐸STT can be used, with appropriate hardware (GPU) to train a model using a set of voice data, known as a _corpus_. Then, _inference_ or _recognition_ can be performed using the trained model. 🐸STT includes several pre-trained models. + +**This Playbook is focused on helping you train your own model.** + +## How does Coqui STT work? + +🐸STT takes a stream of audio as input, and converts that stream of audio into a sequence of characters in the designated alphabet. This conversion is made possible by two basic steps: First, the audio is converted into a sequence of probabilities over characters in the alphabet. Secondly, this sequence of probabilities is converted into a sequence of characters. + +The first step is made possible by a [Deep Neural Network](https://en.wikipedia.org/wiki/Deep_learning#Deep_neural_networks), and the second step is made possible by an [N-gram](https://en.wikipedia.org/wiki/N-gram)language model. The neural network is trained on audio and corresponding text transcripts, and the N-gram language model is trained on a text corpus (which is often different from the text transcripts of the audio). The neural model is trained to predict the text from speech, and the language model is trained to predict text from preceding text. At a very high level, you can think of the first part (the acoustic model) as a phonetic transcriber, and the second part (the language model) as a spelling and grammar checker. + +## How is Coqui STT implemented? + +The core of 🐸STT is written in C++, but it has bindings to Python, .NET, Java, JavaScript, and community-based bindings for Golang, Rust, Vlang, and NIM-lang. + +--- + +[Home](README.md) | [Previous - Introduction](INTRO.md) | [Next - Formatting your training data](DATA_FORMATTING.md) diff --git a/doc/playbook/ALPHABET.md b/doc/playbook/ALPHABET.md new file mode 100644 index 00000000..8f45fc9b --- /dev/null +++ b/doc/playbook/ALPHABET.md @@ -0,0 +1,42 @@ +[Home](README.md) | [Previous - Scorer - language model for determining which words occur together ](SCORER.md) | [Next - Acoustic Model and Language Model](AM_vs_LM.md) + +# The alphabet.txt file + +## Contents + +- [The alphabet.txt file](#the-alphabettxt-file) + * [Contents](#contents) + * [What is alphabet.txt ?](#what-is-alphabettxt--) + * [How does the Glue work?](#how-does-the-glue-work-) + + [How to diagnose mis-matched alphabets?](#how-to-diagnose-mis-matched-alphabets-) + * [Common alphabet.txt related errors](#common-alphabettxt-related-errors) + +This tiny text file is easy to overlook, but it is very important. The *exact same* alphabet must be used to train the both acoustic model and the language model. This alphabet.txt is the glue that holds the language model and the acoustic model together. + +## What is alphabet.txt ? + +Let's take a look at the English [alphabet.txt](https://github.com/coqui-ai/STT/blob/master/data/alphabet.txt) which was used to train the release 🐸STT models. If you were to ask a native English speaker to write down the alphabet, this `alphabet.txt` isn't what they would write. *The `alphabet.txt` file contains all characters used in a language which are necessary for writing*. Looking at the English alphabet file, the first character is the space `" "`. We need spaces to separate words when writing. Following the space, we find all the familiar letters of the alphabet which children learn in school. Finally, we find the apostrophe "'". The apostrophe is needed for writing contractions, which are very common in English. The apostrophe can distinguish words like "we're" and "were", which have different prounuciations. Not all languages need spaces, and not all languages need apostrophes. Creating the alphabet for a new language takes some research. Two people creating the same alphabet file may disagree, and no one is objectively right. The best alphabet will depend on the target application and the available training data. You may notice that the `alphabet.txt` file released with 🐸STT for English does not contain any characters with accents, even though they do occur sometimes in English. The off-the-shelf 🐸STT model cannot produce words like "naïvely" or "résumé", and this was a design decision. We could make an alphabet that contains every possible character for every possible loan-word into English, but then we would need training data for all those new characters. + +## How does the Glue work? + +Quite simply, `alphabet.txt` helps 🐸STT make a lookup table, and at run-time that lookup table is used instead of characters themselves. For the English example, the 🐸STT acoustic model doesn't have any idea what the letter 'a' is, but it does know what index '1' is. The `alphabet.txt` file tells us that the index '1' for the acoustic model corresponds to the letter 'a', so we can make sense of the output. If the indeces for the acoustic model and language model don't match, then the acoustic model might hear an 'a', but the language model interprets it instead as 'b'. This mis-match is sneaky, and if the alphabets used for the acoustic model and language are similar, but slightly off, this is a hard problem to diagnose. If you used different `alphabet.txt` files, you may not get any run-time error messages, but the output transcriptions will make no sense. + +### How to diagnose mis-matched alphabets? + +If you think you used different alphabets to create a [language model and an acoustic model](AM_vs_LM.md), try decoding _without_ the scorer. If you can decode the audio without a scorer and the output is reasonable, but when you decode the same audio with a scorer, and the output is _not_ reasonable, then you could have mis-matched alphabets. Usually the easiest way to fix this is to re-compile the scorer with the correct alphabet. + +[Read more information on building a language model (scorer)](SCORER.md). + +## Common alphabet.txt related errors + +One of the most common errors occurs when there is a character in the corpus that is not in the `alphabet.txt` file. You need to include the missing character in the `alphabet.txt` file. + +``` +File "/STT/training/coqui_stt_training/util/text.py", line 18, in text_to_char_array + .format(transcript, context, list(ch for ch in transcript if not alphabet.CanEncodeSingle(ch)))) +ValueError: Alphabet cannot encode transcript "panggil ambulan!" while processing sample "persistent-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_19338419.wav", check that your alphabet contains all characters in the training corpus. Missing characters are: ['!']. +``` + +--- + +[Home](README.md) | [Previous - Scorer - language model for determining which words occur together ](SCORER.md) | [Next - Acoustic Model and Language Model](AM_vs_LM.md) diff --git a/doc/playbook/AM_vs_LM.md b/doc/playbook/AM_vs_LM.md new file mode 100644 index 00000000..7263de56 --- /dev/null +++ b/doc/playbook/AM_vs_LM.md @@ -0,0 +1,21 @@ +[Home](README.md) | [Previous - Scorer - language model for determining which words occur together](SCORER.md) | [Next - Setting up your Coqui STT training environment](ENVIRONMENT.md) + +# Acoustic model vs. Language model + +## Contents + +- [Acoustic model vs. Language model](#acoustic-model-vs-language-model) + * [Contents](#contents) + * [Training](#training) + +At runtime, 🐸STT is made up of two main parts: (1) the acoustic model and (2) the language model. The acoustic model takes audio as input and converts it to a probability over characters in the alphabet. The language model helps to turn these probabilities into words of coherent language. The language model (aka. the scorer), assigns probabilities to words and phrases based on statistics from training data. The language model knows that "I read a book" is much more probable then "I red a book", even though they may sound identical to the acoustic model. + +## Training + +The acoustic model is a neural network trained with Tensorflow, and the training data is a corpus of speech and transcripts. + +The language model is a n-gram model trained with kenlm, and the training data is a corpus of text. + +--- + +[Home](README.md) | [Previous - Scorer - language model for determining which words occur together](SCORER.md) | [Next - Setting up your Coqui STT training environment](ENVIRONMENT.md) diff --git a/doc/playbook/DATA_FORMATTING.md b/doc/playbook/DATA_FORMATTING.md new file mode 100644 index 00000000..c647d827 --- /dev/null +++ b/doc/playbook/DATA_FORMATTING.md @@ -0,0 +1,115 @@ +[Home](README.md) | [Previous - About Coqui STT](ABOUT.md) | [Next - The alphabet.txt file](ALPHABET.md) + +# Formatting your training data for Coqui STT + +## Contents + +- [Formatting your training data for Coqui STT](#formatting-your-training-data-for-coqui-stt) + * [Contents](#contents) + * [Collecting data](#collecting-data) + * [Preparing your data for training](#preparing-your-data-for-training) + + [Data from Common Voice](#data-from-common-voice) + * [Importers](#importers) + +🐸STT expects audio files to be WAV format, mono-channel, and with a 16kHz sampling rate. + +For training, testing, and development, you need to feed 🐸STT CSV files which contain three columns: `wav_filename,wav_filesize,transcript`. The `wav_filesize` (i.e. number of bytes) is used to group together audio of similar lengths for efficient batching. + +## Collecting data + +This PlayBook is focused on _training_ a speech recognition model, rather than on _collecting_ the data that is required for an accurate model. However, a good model starts with data. + +* Ensure that your voice clips are 10-20 seconds in length. If they are longer or shorter than this, your model will be less accurate. + +* Ensure that every character in your transcription of a voice clip is in your [alphabet.txt](ALPHABET.md) file + +* Ensure that your voice clips exhibit the same sort of diversity you expect to encounter in your runtime audio. This means a diversity of accents, genders, background noise and so on. + +* Ensure that your voice clips are created using similar microphones to that which you expect in your runtime audio. For example, if you expect to deploy your model on Android mobile phones, ensure that your training data is generated from Android mobile phones. + +* Ensure that the phrasing on which your voice clips are generated covers the phrases you expect to encounter in your runtime audio. + +### Punctuation and numbers + +If you are collecting data that will be used to train a speech model, then you should remove punctuation marks such as dashes, tick marks, quote marks and so on. These will often be confused, and can hinder training an accurate model. + +Numbers should be written in full (ie as a [cardinal](https://en.wikipedia.org/wiki/Cardinal_numeral)) - that is, as `eight` rather than `8`. + +## Preparing your data for training + +### Data from Common Voice + +If you are using data from Common Voice for training a model, you will need to prepare it as [outlined in the 🐸STT documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#common-voice-training-data). + +In this example we will prepare the Indonesian dataset for training, but you can use any language from Common Voice that you prefer. We've chosen Indonesian as it has the same [orthographic alphabet](ALPHABET.md) as English, which means we don't have to use a different `alphabet.txt` file for training; we can use the default. + +--- +This example assumes you have already [set up a Docker [environment](ENVIRONMENT.md) for [training](TRAINING.md). If you have not yet set up your Docker environment, we suggest you pause here and do this first. +--- + +First, [download the dataset from Common Voice](https://commonvoice.mozilla.org/en/datasets), and extract the archive into your `stt-data` directory. This makes it available to your Docker container through a _bind mount_. Start your 🐸STT Docker container with the `stt-data` directory as a _bind mount_ (this is covered in the [environment](ENVIRONMENT.md) section). + +Your CV corpus data should be available from within the Docker container. + + ``` + root@3de3afbe5d6f:/STT# ls stt-data/cv-corpus-6.1-2020-12-11/id/ + clips invalidated.tsv reported.tsv train.tsv + dev.tsv other.tsv test.tsv validated.tsv +``` + +The `ghcr.io/coqui-ai/stt-train` Docker image _does not_ come with `sox`, which is a package used for processing Common Voice data. We need to install `sox` first. + +``` +root@4b39be3b0ffc:/STT# apt-get -y update && apt-get install -y sox +``` + +Next, we will run the Common Voice importer that ships with 🐸STT. + +``` +root@3de3afbe5d6f:/STT# bin/import_cv2.py stt-data/cv-corpus-6.1-2020-12-11/id +``` + +This will process all the CV data into the `clips` directory, and it can now be used [for training](TRAINING.md). + +## Importers + +🐸STT ships with several scripts which act as _importers_ - preparing a corpus of data for training by 🐸STT. + +If you want to create importers for a new language, or a new corpus, you will need to fork the 🐸STT repository, then add support for the new language and/or corpus by creating an _importer_ for that language/corpus. + +The existing importer scripts are a good starting point for creating your own importers. + +They are located in the `bin` directory of the 🐸STT repo: + +``` +root@3de3afbe5d6f:/STT# ls | grep import +import_aidatatang.py +import_aishell.py +import_ccpmf.py +import_cv.py +import_cv2.py +import_fisher.py +import_freestmandarin.py +import_gram_vaani.py +import_ldc93s1.py +import_librivox.py +import_lingua_libre.py +import_m-ailabs.py +import_magicdata.py +import_primewords.py +import_slr57.py +import_swb.py +import_swc.py +import_ted.py +import_timit.py +import_ts.py +import_tuda.py +import_vctk.py +import_voxforge.py +``` + +The importer scripts ensure that the `.wav` files and corresponding transcriptions are in the `.csv` format expected by 🐸STT. + +--- + +[Home](README.md) | [Previous - About Coqui STT](ABOUT.md) | [Next - The alphabet.txt file](ALPHABET.md) diff --git a/doc/playbook/DEEPSPEECH.md b/doc/playbook/DEEPSPEECH.md new file mode 100644 index 00000000..a6257a26 --- /dev/null +++ b/doc/playbook/DEEPSPEECH.md @@ -0,0 +1,37 @@ +[Home](README.md) | [Previous - Introduction](INTRO.md) | [Next - Formatting your training data](DATA_FORMATTING.md) + +# About DeepSpeech + +## Contents + +- [About DeepSpeech](#about-deepspeech) + * [Contents](#contents) + * [What does DeepSpeech do?](#what-does-deepspeech-do-) + * [How does DeepSpeech work?](#how-does-deepspeech-work-) + * [How is DeepSpeech implemented?](#how-is-deepspeech-implemented-) + +## What does DeepSpeech do? + +DeepSpeech is a tool for automatically transcribing spoken audio. DeepSpeech takes digital audio as input and returns a "most likely" text transcript of that audio. + +DeepSpeech is an implementation of the DeepSpeech algorithm developed by Baidu and presented in this research paper: + +> Hannun, A., Case, C., Casper, J., Catanzaro, B., Diamos, G., Elsen, E., Prenger R, Satheesh S, Sengupta S, Coates A., & Ng, A. Y. (2014). Deep speech: Scaling up end-to-end speech recognition. [arXiv preprint arXiv:1412.5567](https://arxiv.org/pdf/1412.5567). + +DeepSpeech can be used for two key activities related to speech recognition - _training_ and _inference_. Speech recognition _inference_ - the process of converting spoken audio to written text - relies on a _trained model_. DeepSpeech can be used, with appropriate hardware (GPU) to train a model using a set of voice data, known as a _corpus_. Then, _inference_ or _recognition_ can be performed using the trained model. DeepSpeech includes several pre-trained models. + +**This Playbook is focused on helping you train your own model.** + +## How does DeepSpeech work? + +DeepSpeech takes a stream of audio as input, and converts that stream of audio into a sequence of characters in the designated alphabet. This conversion is made possible by two basic steps: First, the audio is converted into a sequence of probabilities over characters in the alphabet. Secondly, this sequence of probabilities is converted into a sequence of characters. + +The first step is made possible by a [Deep Neural Network](https://en.wikipedia.org/wiki/Deep_learning#Deep_neural_networks), and the second step is made possible by an [N-gram](https://en.wikipedia.org/wiki/N-gram)language model. The neural network is trained on audio and corresponding text transcripts, and the N-gram language model is trained on a text corpus (which is often different from the text transcripts of the audio). The neural model is trained to predict the text from speech, and the language model is trained to predict text from preceding text. At a very high level, you can think of the first part (the acoustic model) as a phonetic transcriber, and the second part (the language model) as a spelling and grammar checker. + +## How is DeepSpeech implemented? + +The core of DeepSpeech is written in C++, but it has bindings to Python, .NET, Java, JavaScript, and community-based bindings for Golang, Rust, Vlang, and NIM-lang. + +--- + +[Home](README.md) | [Previous - Introduction](INTRO.md) | [Next - Formatting your training data](DATA_FORMATTING.md) diff --git a/doc/playbook/DEPLOYMENT.md b/doc/playbook/DEPLOYMENT.md new file mode 100644 index 00000000..8857381a --- /dev/null +++ b/doc/playbook/DEPLOYMENT.md @@ -0,0 +1,114 @@ +[Home](README.md) | [Previous - Testing and evaluating your trained model](TESTING.md) | [Next - Real life examples of using Coqui STT](EXAMPLES.md) + +# Deployment + +## Contents + +- [Deployment](#deployment) + * [Contents](#contents) + * [Protocol buffer and memory mappable file formats](#protocol-buffer-and-memory-mappable-file-formats) + * [Exporting a memory mappable protocol buffer file with `graphdef`](#exporting-a-memory-mappable-protocol-buffer-file-with--graphdef-) + * [Exporting a tflite model](#exporting-a-tflite-model) + +Now that you have [trained](TRAINING.md) and [evaluated](TESTING.md) your model, you are ready to use it for _inference_ - where spoken phrases - _utterances_ - are assessed by your trained model and a text _transcription_ provided. + +There are some things to be aware of during this stage of the process. + +## Protocol buffer and memory mappable file formats + +By default, 🐸STT will export the trained model as a `.pb` file, such as: + +``` +$ sudo ls -las volumes/stt-data/_data/exported-model + + 4 drwxr-xr-x 2 root root 4096 Feb 1 22:13 . + 4 drwxr-xr-x 6 root root 4096 Feb 1 22:23 .. + 4 -rwxr-xr-x 1 root root 1586 Feb 1 22:13 author_model_0.0.1.md +184488 -rwxr-xr-x 1 root root 188915369 Feb 1 22:13 output_graph.pb +``` + +A `.pb` file is a [protocol buffer](https://en.wikipedia.org/wiki/Protocol_Buffers) file. Protocol buffer is a widely used file format for trained models, but it has a significant downsides. It is not _memory mappable_. [Memory mappable](https://en.wikipedia.org/wiki/Memory-mapped_file) files can be referenced by the operating system using a _file descriptor_, and they consume far less memory than non-memory-mappable files. Protocol buffer files also tend to be much larger than memory-mappable files. + +Most inference libraries, such as TensorFlow, require a memory-mappable format. + +There are two formats in particular that you should be familiar with. + +## Exporting a memory mappable protocol buffer file with `graphdef` + +Using the `graphdef` tool which is built in to TensorFlow (but deprecated in TensorFlow 2.3), you can export a memory-mappable protocol buffer file using the following commands: + +``` +convert_graphdef_memmapped_format --in_graph=output_graph.pb --out_graph=output_graph.pbmm +``` + +where `--in_graph` is a path to your `.pb` file and `--out_graph` is a path to the exported memory-mappable protocol buffer file. + +``` +root@12a4ee8ce1ed:/STT# ./convert_graphdef_memmapped_format \ + --in_graph="persistent-data/exported-model/output_graph.pb" \ + --out_graph="persistent-data/exported-model/output_graph.pbmm" +2021-02-03 21:13:09.516709: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 134217728 exceeds 10% of system memory. +2021-02-03 21:13:09.647395: I tensorflow/contrib/util/convert_graphdef_memmapped_format_lib.cc:171] Converted 7 nodes +``` + +For [more information on creating a memory-mappable protocol buffer file, consult the documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#exporting-a-model-for-inference). + +***Be aware that this file format is likely to be deprecated in the future. We strongly recommend the use of `tflite`.*** + +## Exporting a tflite model + +The `tflite` engine ([more information on tflite](https://www.tensorflow.org/lite/)) is designed to allow inference on mobile, IoT and embedded devices. If you have _not_ yet trained a model, and you want to export a model compatible with `tflite`, you will need to use the `--export_tflite` flags with the `train.py` script. For example: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model \ + --export_tflite +``` + +If you have _already_ trained a model, and wish to export to `tflite` format, you can re-export it by specifying the same `checkpoint_dir` that you used for training, and by passing the `--export_tflite` parameter. + +Here is an example: + +``` + +python3 train.py \ + --checkpoint_dir persistent-data/checkpoints \ + --export_dir persistent-data/exported-model \ + --export_tflite + + I Loading best validating checkpoint from persistent-data/checkpoints-1feb2021-id/best_dev-34064 + I Loading variable from checkpoint: cudnn_lstm/rnn/multi_rnn_cell/cell_0/cudnn_compatible_lstm_cell/bias + I Loading variable from checkpoint: cudnn_lstm/rnn/multi_rnn_cell/cell_0/cudnn_compatible_lstm_cell/kernel + I Loading variable from checkpoint: layer_1/bias + I Loading variable from checkpoint: layer_1/weights + I Loading variable from checkpoint: layer_2/bias + I Loading variable from checkpoint: layer_2/weights + I Loading variable from checkpoint: layer_3/bias + I Loading variable from checkpoint: layer_3/weights + I Loading variable from checkpoint: layer_5/bias + I Loading variable from checkpoint: layer_5/weights + I Loading variable from checkpoint: layer_6/bias + I Loading variable from checkpoint: layer_6/weights + I Models exported at persistent-data/exported-model + I Model metadata file saved to persistent-data/exported-model/author_model_0.0.1.md. Before submitting the exported model for publishing make sure all information in the metadata file is correct, and complete the URL fields. + +root@0913858a2868:/STT/persistent-data/exported-model# ls -las +total 415220 + 4 drwxr-xr-x 2 root root 4096 Feb 3 22:42 . + 4 drwxr-xr-x 7 root root 4096 Feb 3 21:54 .. + 4 -rwxr-xr-x 1 root root 1582 Feb 3 22:42 author_model_0.0.1.md +184488 -rwxr-xr-x 1 root root 188915369 Feb 1 11:13 output_graph.pb +184496 -rw-r--r-- 1 root root 188916323 Feb 3 21:13 output_graph.pbmm + 46224 -rw-r--r-- 1 root root 47332112 Feb 3 22:42 output_graph.tflite + +``` + +For more information on exporting a `tflite` model, [please consult the documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#exporting-a-model-for-inference). + +--- + +[Home](README.md) | [Previous - Testing and evaluating your trained model](TESTING.md) | [Next - Real life examples of using Coqui STT](EXAMPLES.md) diff --git a/doc/playbook/ENVIRONMENT.md b/doc/playbook/ENVIRONMENT.md new file mode 100644 index 00000000..72594126 --- /dev/null +++ b/doc/playbook/ENVIRONMENT.md @@ -0,0 +1,299 @@ +[Home](README.md) | [Previous - Acoustic Model and Language Model](AM_vs_LM.md) | [Next - Training your model](TRAINING.md) + +# Setting up your environment for training using Coqui STT + +## Contents + +- [Setting up your environment for training using Coqui STT](#setting-up-your-environment-for-training-using-coqui-stt) + * [Contents](#contents) + * [Installing dependencies for working with GPUs under Docker](#installing-dependencies-for-working-with-gpus-under-docker) + + [GPU drivers](#gpu-drivers) + * [What is Docker and why is it recommended for training a model with Coqui STT?](#what-is-docker-and-why-is-it-recommended-for-training-a-model-with-coqui-stt-) + * [Install Docker](#install-docker) + + [Ensure that you create a `docker` group and that you add yourself to this group](#ensure-that-you-create-a--docker--group-and-that-you-add-yourself-to-this-group) + + [Install the `nvidia-container-toolkit`](#install-the--nvidia-container-toolkit-) + * [Pulling down a pre-built Coqui STT Docker image](#pulling-down-a-pre-built-coqui-stt-docker-image) + + [Testing the image by creating a container and running a script](#testing-the-image-by-creating-a-container-and-running-a-script) + * [Setting up a bind mount to store persistent data](#setting-up-a-bind-mount-to-store-persistent-data) + * [Extending the base `stt-train` Docker image for your needs](#extending-the-base--stt-train--docker-image-for-your-needs) + +This section of the Playbook assumes you are comfortable installing 🐸STT and using it with a pre-trained model, and that you are comfortable setting up a Python _virtual environment_. + +Here, we provide information on setting up a Docker environment for training your own speech recognition model using 🐸STT. We also cover dependencies Docker has for NVIDIA GPUs, so that you can use your GPU(s) for training a model. + +--- + +*** Do not train using only CPU(s) *** + +This Playbook assumes that you will be using NVIDIA GPU(s). Training a 🐸STT speech recognition model on CPU(s) only will take a _very, very, very_ long time. Do not train on your CPU(s). + +--- + +## Installing dependencies for working with GPUs under Docker + +Before we install Docker, we are going to make sure that we have all the Ubuntu Linux dependencies required for working with NVIDIA GPUs and Docker. + +--- + +*** Non-NVIDIA GPUS *** + +Although non-NVIDIA GPUs exist, they are currently rare, and we do not aim to support them in this Playbook. + +--- + +### GPU drivers + +By default, your machine should already have GPU drivers installed. A good way to check is with the `nvidia-smi` tool. If your drivers are installed correctly, `nvidia-smi` will report the driver version and CUDA version. + +``` +$ nvidia-smi + +Sat Jan 9 11:48:50 2021 ++-----------------------------------------------------------------------------+ +| NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 | +|-------------------------------+----------------------+----------------------+ +| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|===============================+======================+======================| +| 0 GeForce GTX 1060 Off | 00000000:01:00.0 On | N/A | +| N/A 70C P0 27W / N/A | 766MiB / 6069MiB | 2% Default | +| | | N/A | ++-------------------------------+----------------------+----------------------+ + ++-----------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=============================================================================| | | ++-----------------------------------------------------------------------------+ + +``` + +If your drivers are _not_ installed correctly, you will likely see this warning: + +``` +$ nvidia-smi + +Command 'nvidia-smi' not found, but can be installed with: + +sudo apt install nvidia-utils-440 # version 440.100-0ubuntu0.20.04.1, or +sudo apt install nvidia-340 # version 340.108-0ubuntu2 +sudo apt install nvidia-utils-435 # version 435.21-0ubuntu7 +sudo apt install nvidia-utils-390 # version 390.141-0ubuntu0.20.04.1 +sudo apt install nvidia-utils-450 # version 450.102.04-0ubuntu0.20.04.1 +sudo apt install nvidia-utils-450-server # version 450.80.02-0ubuntu0.20.04.3 +sudo apt install nvidia-utils-460 # version 460.32.03-0ubuntu0.20.04.1 +sudo apt install nvidia-utils-418-server # version 418.152.00-0ubuntu0.20.04.1 +sudo apt install nvidia-utils-440-server # version 440.95.01-0ubuntu0.20.04.1 + +``` + +[Follow this guide](https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux) to install your GPU drivers. + +Once you've installed your drivers, use `nvidia-smi` to prove that they are installed correctly. + +_Note that you may need to restart your host after installing the GPU drivers._ + +Ideally, you should not be running any other processes on your GPU(s) before you start training. + +Next, we will install the utility `nvtop` so that you can monitor the performance of your GPU(s). We will also use `nvtop` to prove that Docker is able to use your GPU(s) later in this document. + +``` +$ sudo apt install nvtop +``` + +_Note that you may need to restart your host after installing `nvtop`._ + +If you run `nvtop` you will see a graph similar to this: + +![Screenshot of nvtop](images/nvtop.png "Screenshot of nvtop") + +You are now ready to install Docker. + +## What is Docker and why is it recommended for training a model with Coqui STT? + +[Docker](https://www.docker.com/why-docker) is virtualization software that allows a consistent collection of software, dependencies and environments to be packaged into a _container_ which is then run on a host, or many hosts. It is one way to manage the many software dependencies which are required for training a model with 🐸STT, particularly if using an NVIDIA GPU. + +## Install Docker + +First, you must install Docker on your host. Follow the [instructions on the Docker website](https://docs.docker.com/engine/install/ubuntu/). + +### Ensure that you create a `docker` group and that you add yourself to this group + +Once you have installed Docker, be sure to follow the [post-installation](https://docs.docker.com/engine/install/linux-postinstall/) steps. These include setting up a `docker` group and adding your user account to this group. If you do not follow this step, you will need to use `sudo` with every Docker command, and this can have unexpected results. + +--- + +If you try to use `docker` commands and constantly receive permission warnings, it's likely that you have forgotten this step. + +--- + +### Install the `nvidia-container-toolkit` + +Next, we need to install `nvidia-container-toolkit`. This is necessary to allow Docker to be able to access the GPU(s) on your machine for training. + +First, add the repository for your distribution, following the instructions on the [NVIDIA Docker GitHub page](https://nvidia.github.io/nvidia-docker/). For example: + +``` +curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ + sudo apt-key add - +distribution=$(. /etc/os-release;echo $ID$VERSION_ID) +curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ + sudo tee /etc/apt/sources.list.d/nvidia-docker.list +sudo apt-get update +``` + +Next, install `nvidia-container-toolkit`: + +``` +$ sudo apt-get install -y nvidia-container-toolkit +``` + +## Pulling down a pre-built Coqui STT Docker image + +Once you have installed Docker and the `nvidia-container-toolkit`, you are ready to build a Docker _image_. Although it's [possible to build your own Docker image from scratch](), we're going to use a pre-built 🐸STT training image which is hosted on Docker Hub. Once the image is pulled down, you can then create a Docker _container_ from the image to perform training. + +As you become more proficient with using 🐸STT, you can use the pre-built Docker image as the basis for your own images. + +**Running this command will download several gigabytes of data. Do not perform this command if you are on a limited or metered internet connection** + +``` +$ docker pull ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4 +v0.10.0-alpha.4: Pulling from coqui-ai/stt-train +Digest: sha256:0f8ee9208874a925618e527f1d06ea9065dd09c700972cba740884e7e7e4cd17 +Status: Image is up to date for ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4 +ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4 +``` + + + +### Testing the image by creating a container and running a script + +Now that you have your Docker image pulled down, you can create a _container_ from the image. Here, we're going to create a container and run a simple test to make sure that the image is working correctly. + +_Note that you can refer to Docker images by `id` - such as `7cdc0bb1fe2a` in the example above, or by the image's name and `tag`. Here, we will be using the image name and `tag` - ie `ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4`._ + +``` +$ docker run -it --name stt-test --entrypoint /bin/bash ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4 +``` + +The `entrypoint` instruction following `docker run` tells Docker to run the `/bin/bash` (ie shell) after creating the container. + +This command assumes that `/bin/bash` will be invoked as the `root` user. This is necessary, as the Docker container needs to make changes to the filesystem. If you use the `-u $(id -u):$(id -g)` switches, you will tell Docker to invoke `/bin/bash` as the current user of the host that is running the Docker container. You will likely encounter `permission denied` errors while running training. + +When you run the above command, you should see the following prompt: + +``` +________ _______________ +___ __/__________________________________ ____/__ /________ __ +__ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / +_ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / +/_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ + + +WARNING: You are running this container as root, which can cause new files in +mounted volumes to be created as the root user on your host machine. + +To avoid this, run the container by specifying your user's userid: + +$ docker run -u $(id -u):$(id -g) args... + +root@d14b2d062526:/STT# +``` + +In a separate terminal, you can see that you now have a Docker image running: + +``` +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +d14b2d062526 7cdc0bb1fe2a "/bin/bash" About a minute ago Up About a minute compassionate_rhodes +``` + +🐸STT includes a number of convenience scripts in the `bin` directory. They are named for the corpus they are configured for. To ensure that your Docker environment is functioning correctly, run one of these scripts (in the terminal session where your container is running). + +``` +root@d14b2d062526:/STT/bin# ./bin/run-ldc93s1.sh +``` + +This will train on a single audio file for 200 epochs. + +We've now proved that the image is working correctly. + +## Setting up a bind mount to store persistent data + +Now that we have a Docker image pulled down, we can create a _container_ from the image, and do training from within the image. + +However, Docker containers are not _persistent_. This means that if the host on which the container is running reboots, or there is a fatal error within the container, all the results stored _within_ the container will be lost. We need to set up _persistent storage_ so that the checkpoints and exported model are stored _outside_ the container. + +To do this we create a [bind mount](https://docs.docker.com/storage/bind-mounts/) for Docker. A _bind mount_ allows Docker to store files externally to the container, on your local filesystem. + +First, stop and remove the container we created above. + +``` +$ docker rm -f stt-test +``` + +Next, we will create a new container, except this time we will also create a _bind mount_ so that it can store persistent data. + +First, we create a directory on our local system for the bind mount. + +``` +$ mkdir stt-data +``` + +Next, we create a container and instruct it to use a bind mount to the directory. + +``` +$ docker run -it \ + --entrypoint /bin/bash \ + --name stt-train \ + --gpus all \ + --mount type=bind,source="$(pwd)"/stt-data,target=/STT/stt-data \ + 7cdc0bb1fe2a +``` + +We all pass the `--gpus all` parameter here to instruct Docker to use all available GPUs. If you need to restrict the use of GPUs, then please consult the [Docker documentation](https://docs.docker.com/config/containers/resource_constraints/). You can also restrict the amount of memory or CPU(s) that the Docker container consumes. This might be useful if you need to use the host that you're training on _at the same time_ as the training is occurring, or if you're on a shared host or cluster (for example at a university). + +From within the container, the `stt-data` directory will now be available: + +``` +root@e964b1e5a60c:/STT# ls | grep stt-data +stt-data +``` + +You are now ready to begin [training](TRAINING.md) your model. + +## Extending the base `stt-train` Docker image for your needs + +As you become more comfortable training speech recognition models with 🐸STT, you may wish to extend the base Docker image. You can do this using the `FROM` instruction in a `Dockerfile`, for example: + +``` +# Custom Dockerfile for training models using 🐸STT + +# Get the latest 🐸STT image +FROM ghcr.io/coqui-ai/stt-train:v0.10.0-alpha.4 + +# Install nano editor +RUN apt-get -y update && apt-get install -y nano + +# Install sox for inference and for processing Common Voice data +RUN apt-get -y update && apt-get install -y sox + +``` + +You can then use `docker build` with this `Dockerfile` to build your own custom Docker image. + +--- + +[Home](README.md) | [Previous - Acoustic Model and Language Model](AM_vs_LM.md) | [Next - Training your model](TRAINING.md) diff --git a/doc/playbook/EXAMPLES.md b/doc/playbook/EXAMPLES.md new file mode 100644 index 00000000..23dbdbd1 --- /dev/null +++ b/doc/playbook/EXAMPLES.md @@ -0,0 +1,47 @@ +[Home](README.md) | [Previous - Deploying your model](DEPLOYMENT.md) + +# Example applications of Coqui STT + +## Contents + +- [Example applications of Coqui STT](#example-applications-of-coqui-stt) + * [Contents](#contents) + * [Coqui STT worked examples repository](#coqui-stt-worked-examples-repository) + * [Other suggestions for integrating Coqui STT](#other-suggestions-for-integrating-coqui-stt) + + [A stand-alone transcription tool](#a-stand-alone-transcription-tool) + + [Key Word Search in spoken audio](#key-word-search-in-spoken-audio) + + [An interface to a voice-controlled application](#an-interface-to-a-voice-controlled-application) + +## Coqui STT worked examples repository + +There is a repository of examples of using 🐸STT for several use cases, including sample code, in the [🐸STT examples](https://github.com/coqui-ai/STT-examples/) repository. + +The examples here include: + +* [Android microphone streaming and transcription](https://github.com/coqui-ai/STT-examples/tree/r0.9/android_mic_streaming) + +* [🐸STT running in an Electron app using ReactJS](https://github.com/coqui-ai/STT-examples/tree/r0.9/electron) + +## Other suggestions for integrating Coqui STT + +There are many other possibilities for incorporating speech recognition into your projects using 🐸STT. + +### A stand-alone transcription tool + +Accurate human-created transcriptions require someone who has been professionally trained, and their time is expensive. High quality transcription of audio may take up to 10 hours of transcription time per one hour of audio. With 🐸STT, you could increase transcriber productivity with a human-in-the-loop approach, in which 🐸STT generates a first-pass transcription, and the transcriber fixes any errors. + +### Key Word Search in spoken audio + +Key Word Search in audio is a simple task, but it takes considerable time. Given a collection of 100 hours of audio, if you only want to find all the instances of the word "coronavirus", instead of paying a professional transcriber, you might just pay someone to listen to all the audio and note when the word "coronavirus" was spoken. Nevertheless, you will still be paying for human time relative to the amount of audio you wish to search. + +A better approach would be to modify 🐸STT to listen better for words of interest (e.g. "coronavirus") and run 🐸STT over all audio in parallel. Afterwards, a human may verify that the identified segments of audio contain the words of interest. This is another human-in-the-loop example, which makes the humans considerably more time-efficient. + +### An interface to a voice-controlled application + +Another example application of 🐸STT is as an interface to a voice-controlled application. This is an instance where a successful application (e.g. a digital assistant or smart speaker) cannot contain a human-in-the-loop. As such, 🐸STT is not making human-time more efficient, but rather, 🐸STT is enabling technologies which were previously not possible. + +One example of a voice-controlled application using 🐸STT is the [voice add-on for WebThings.IO](https://github.com/WebThingsIO/voice-addon). + +--- + +[Home](README.md) | [Previous - Deploying your model](DEPLOYMENT.md) diff --git a/doc/playbook/INTRO.md b/doc/playbook/INTRO.md new file mode 100644 index 00000000..a44a8a15 --- /dev/null +++ b/doc/playbook/INTRO.md @@ -0,0 +1,54 @@ +[Home](README.md) | [Next - About Coqui STT](ABOUT.md) + +# Introduction + +## Contents + +- [Introduction](#introduction) + * [Contents](#contents) + * [Is this guide for you?](#is-this-guide-for-you-) + * [Setting expectations](#setting-expectations) + * [Setting up for success](#setting-up-for-success) + * [Checklist for success](#checklist-for-success) + +## Is this guide for you? + +You're probably here because you're interested in automatic speech recognition (ASR) - the process of converting phrases spoken by humans into written form. There have been significant advances in speech recognition in recent years, driven both by new deep learning algorithms, and by advances in hardware that are capable of the large volume of computations required by those algorithms. Several new tools are available to assist developers with both training speech recognition models and using those models for inference - 🐸STT being one of them. + +If you're trying to get 🐸STT working for your application, your data, or a new language, you've come to the right place! You can easily download a pre-trained 🐸STT model for English, but it might not work for you out of the box. No worries, with a little tweaking you can get 🐸STT working for most anything! + +Specifically, this guide will help you create a working 🐸STT model for a new language. Along the way, you will learn some best practices for speech recognition and data wrangling. + +## Setting expectations + +You might think that speech recognition is solved for English, and as such, with a little work you can solve speech recognition for a new language. This is false for two reasons. Firstly, speech recognition is far from solved for English, and secondly it is unlikely you will be able to create something that works as well as a pre-trained English 🐸STT model unless you have a few thousand hours of data. + +Nevertheless, with some tips and tricks, you can still make create useful voice technology for a non-English language! + +## Setting up for success + +Speech recognition is a _statistical_ process. Speech recognition models are _trained_ on large amounts of voice data, using statistical techniques to "learn" associations between sounds, in the form of `.wav` files, and characters, that are found in an alphabet. Because speech recognition is statistical, it does not have "bugs" in the sense that computer code has bugs; instead, anomalies or biases in the data used for a speech recognition model mean that the resulting model will likely exhibit those biases. + +Speech recognition still requires trial and error - with the data that is used to train a model, the language model or scorer that is used to form words from characters, and with specific training settings. "Debugging" speech recognition models means findings ways to make the data, the alphabet and and scorer more _accurate_. That is, making them mirror as closely as possible the real-world conditions in which the speech recognition model will be used. If your speech recognition model will be used to help transcribe geographic place names, then your voice data and your scorer need to cover those place names. + +The success of any voice technology depends on a constellation of factors, and the accuracy of your speech recognizer is just one factor. To the extent that an existing voice technology works, it works because the creators have eliminated sources of failure. Think about one of the oldest working voice technologies: spoken digit recognition. When you call a bank you might hear a recording like this: "Say ONE to learn about credit cards, say TWO to learn about debit cards, or say ZERO to speak to a representative". These systems usually work well, but you might not know that if you answer with anything other than a single digit, the system will completely fail to understand you. Spoken digit recognition systems are setup for success because they've re-formulated an open-ended transcription problem as a simple classification problem. In this case, as long as the system is able to distinguish spoken digits from one another, it will succeed. + +We will talk about ways in which you can constrain the search space of a problem and bias a model towards a set of words that you actually care about. If you want to make a useful digit recognizer, it doesn't matter if your model has an 85% Word Error Rate (WER) when transcribing the nightly news. All that matters is your model can correctly identify spoken digits. It is key to align what you care about with what you are measuring. + +If you have ever used a speech technology and it worked flawlessly, the creators of the product set themselves up for success. This is what you must also do in your application. + +## Checklist for success + +To help set you up for success, we've included a checklist below. + +- [ ] Have a clear understanding of the intended _use case_. What phrases will be used in the use case that you want to recognise? +- [ ] Ensure as many audio samples as possible, and ensure that they cover all the phrases expected in the use case. Remember, you will need hundreds of hours of audio data for large vocabulary speech recognition. +- [ ] The language model (scorer) needs to include every word that will be expected to be spoken in your intended use case. +- [ ] The language model (scorer) should _exclude_ any words that are _not_ expected to be spoken in your intended use case, to constrain the model. +- [ ] If your intended use case will have background noise, then your voice data should have background noise. +- [ ] If your intended use case will need to recognise particular accents, then your voice data should contain those accents. +- [ ] You will need access to a Linux host with an NVIDIA GPU, and you should be comfortable operating in a `bash` environment. + +--- + +[Home](README.md) | [Next - About Coqui STT](ABOUT.md) diff --git a/doc/playbook/LICENSE.md b/doc/playbook/LICENSE.md new file mode 100644 index 00000000..9b49939a --- /dev/null +++ b/doc/playbook/LICENSE.md @@ -0,0 +1,3 @@ +Unless otherwise indicated, the text of documents in this collection is available under the Creative Commons Attribution Share-Alike 3.0 Unported license, or any later version. + +[https://creativecommons.org/licenses/by-sa/3.0/](https://creativecommons.org/licenses/by-sa/3.0/) diff --git a/doc/playbook/README.md b/doc/playbook/README.md new file mode 100644 index 00000000..017fd9ff --- /dev/null +++ b/doc/playbook/README.md @@ -0,0 +1,84 @@ +# Coqui STT Playbook + +A crash course on training speech recognition models using 🐸STT. + +## Quick links + +* [STT on GitHub](https://github.com/coqui-ai/STT) +* [STT documentation on ReadTheDocs](https://stt.readthedocs.io/en/latest/) +* [STT discussions on GitHub](https://github.com/coqui-ai/STT/discussions) +* [Common Voice Datasets](https://commonvoice.mozilla.org/en/datasets) +* [How to install Docker](https://docs.docker.com/engine/install/) + +## [Introduction](INTRO.md) + +Start here. This section will set your expectations for what you can achieve with the STT Playbook, and the prerequisites you'll need to start to train your own speech recognition models. + +## [About Coqui STT](ABOUT.md) + +Once you know what you can achieve with the STT Playbook, this section provides an overview of STT itself, its component parts, and how it differs from other speech recognition engines you may have used in the past. + +## [Formatting your training data](DATA_FORMATTING.md) + +Before you can train a model, you will need to collect and format your _corpus_ of data. This section provides an overview of the data format required for STT, and walks through an example in prepping a dataset from Common Voice. + +## [The alphabet.txt file](ALPHABET.md) + +If you are training a model that uses a different alphabet to English, for example a language with diacritical marks, then you will need to modify the `alphabet.txt` file. + +## [Building your own scorer](SCORER.md) + +Learn what the scorer does, and how you can go about building your own. + +## [Acoustic model and language model](AM_vs_LM.md) + +Learn about the differences between STT's _acoustic_ model and _language_ model and how they combine to provide end to end speech recognition. + +## [Setting up your training environment](ENVIRONMENT.md) + +This section walks you through building a Docker image, and spawning STT in a Docker container with persistent storage. This approach avoids the complexities of dependencies such as `tensorflow`. + +## [Training a model](TRAINING.md) + +Once you have your training data formatted, and your training environment established, this section will show you how to train a model, and provide guidance for overcoming common pitfalls. + +## [Testing a model](TESTING.md) + +Once you've trained a model, you will need to validate that it works for the context it's been designed for. This section walks you through this process. + +## [Deploying your model](DEPLOYMENT.md) + +Once trained and tested, your model is deployed. This section provides an overview of how you can deploy your model. + +## [Applying STT to real world problems](EXAMPLES.md) + +This section covers specific use cases where STT can be applied to real world problems, such as transcription, keyword searching and voice controlled applications. + +--- + +## Introductory courses on machine learning + +Providing an introduction to machine learning is beyond the scope of this PlayBook, howevever having an understanding of machine learning and deep learning concepts will aid your efforts in training speech recognition models with STT. + +Here, we've linked to several resources that you may find helpful; they're listed in the order we recommend reading them in. + +* [Digital Ocean's introductory machine learning tutorial](https://www.digitalocean.com/community/tutorials/an-introduction-to-machine-learning) provides an overview of different types of machine learning. The diagrams in this tutorial are a great way of explaining key concepts. + +* [Google's machine learning crash course](https://developers.google.com/machine-learning/crash-course/ml-intro) provides a gentle introduction to the main concepts of machine learning, including _gradient descent_, _learning rate_, _training, test and validation sets_ and _overfitting_. + +* If machine learning is something that sparks your interest, then you may enjoy [the MIT Open Learning Library's Introduction to Machine Learning course](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+6.036+1T2019/course/), a 13-week college-level course covering perceptrons, neural networks, support vector machines and convolutional neural networks. + +--- + +## How you can help provide feedback on the STT PlayBook + +You can help to make the STT PlayBook even better by providing [via a GitHub Issue](https://github.com/coqui-ai/STT-playbook/issues) + +* Please _try these instructions_, particularly for building a Docker image and running a Docker container, on multiple distributions of Linux so that we can identify corner cases. + +* Please _contribute your tacit knowledge_ - such as: + - common errors encountered in data formatting, environment setup, training and validation + - techniques or approaches for improving the scorer, alphabet file or the accuracy of Word Error Rate (WER) and Character Error Rate (CER). + - case studies of the work you or your organisation have been doing, showing your approaches to data validation, training or evaluation. + +* Please identify errors in text - with many eyes, bugs are shallow :-) diff --git a/doc/playbook/SCORER.md b/doc/playbook/SCORER.md new file mode 100644 index 00000000..028936a9 --- /dev/null +++ b/doc/playbook/SCORER.md @@ -0,0 +1,310 @@ +[Home](README.md) | [Previous - The alphabet.txt file](ALPHABET.md) | [Next - Acoustic Model and Language Model](AM_vs_LM.md) + +# Scorer - language model for determining which words occur together + +## Contents + +- [Scorer - language model for determining which words occur together](#scorer---language-model-for-determining-which-words-occur-together) + * [Contents](#contents) + + [What is a scorer?](#what-is-a-scorer-) + + [Building your own scorer](#building-your-own-scorer) + - [Preparing the text file](#preparing-the-text-file) + - [Using `lm_optimizer.py` to generate values for the parameters `--default_alpha` and `--default_beta` that are used by the `generate_scorer_package` script](#using--lm-optimizerpy--to-generate-values-for-the-parameters----default-alpha--and----default-beta--that-are-used-by-the--generate-scorer-package--script) + * [Additional parameters for `lm_optimizer.py`](#additional-parameters-for--lm-optimizerpy-) + - [Using `generate_lm.py` to create `lm.binary` and `vocab-500000.txt` files](#using--generate-lmpy--to-create--lmbinary--and--vocab-500000txt--files) + - [Generating a `kenlm.scorer` file from `generate_scorer_package`](#generating-a--kenlmscorer--file-from--generate-scorer-package-) + - [Using the scorer file in model training](#using-the-scorer-file-in-model-training) + + +### What is a scorer? + +A scorer is a _language model_ and it is used by 🐸STT to improve the accuracy of transcription. A _language model_ predicts which words are more likely to follow each other. For example, the word `chicken` might be frequently followed by the words `nuggets`, `soup` or `rissoles`, but is unlikely to be followed by the word `purple`. The scorer identifies probabilities of words occurring together. + +The default scorer used by 🐸STT is trained on the LibriSpeech dataset. The LibriSpeech dataset is based on [LibriVox](https://librivox.org/) - an open collection of out-of-copyright and public domain works. + +You may need to build your own scorer - your own _language model_ if: + +* You are training 🐸STT in another language +* You are training a speech recognition model for a particular domain - such as technical words, medical transcription, agricultural terms and so on +* If you want to improve the accuracy of transcription + +**🐸STT supports the _optional_ use of an external scorer - if you're not sure if you need to build your own scorer, stick with the built-in one to begin with**. + +### Building your own scorer + +_This section assumes that you are using a Docker image and container for training, as outlined in the [environment](ENVIRONMENT.md) section. If you are not using the Docker image, then some of the scripts such as `generate_lm.py` will not be available in your environment._ + +_This section assumes that you have already trained a model and have a set of **checkpoints** for that model. See the section on [training](TRAINING.md) for more information on **checkpoints**._ + +🐸STT uses an algorithm called [_connectionist temporal classification_](https://distill.pub/2017/ctc/) or CTC for short, to map between _input_ sequences of audio and _output_ sequences of characters. The mapping between _inputs_ and _outputs_ is called an _alignment_. The alignment between _inputs_ and _outputs_ is not one-to-one; many _inputs_ may make up an _output_. CTC is therefore a _probabilistic_ algorithm. This means that for each _input_ there are many possible _outputs_ that can be selected. A process call _beam search_ is used to identify the possible _outputs_ and select the one with the highest probability. A [language model](AM_vs_LM.md) or _scorer_ helps the _beam search_ algorithm select the most optimal _output_ value. This is why building your own _scorer_ is necessary for training a model on a narrow domain - otherwise the _beam search_ algorithm would probably select the wrong _output_. + +The default _scorer_ used with 🐸STT is trained on Librivox. It's a general model. But let's say that you want to train a speech recognition model for agriculture. If you have the phrase `tomatoes are ...`, a general scorer might identify `red` as the most likely next word - but an agricultural model might identify `ready` as the most likely next word. + +The _scorer_ is only used during the _test_ stage of [training](TRAINING.md) (rather than at the _train_ or _validate_ stages) because this is where the _beam search_ decdoder determines which words are formed from the identified characters. + +The process for building your own _scorer_ has the following steps: + +1. Having, or preparing, a text file (in `.txt` or `.txt.gz` format), with one phrase or word on each line. If you are training a speech recognition model for a particular _domain_ - such as technical words, medical transcription, agricultural terms etc, then they should appear in the text file. The text file is used by the `generate_lm.py` script. + +2. Using the `lm_optimizer.py` with your dataset (your `.csv` files) and a set of _checkpoints_ to find optimal values of `--default_alpha` and `--default_beta`. The `--default_alpha` and `--default_beta` parameters are used by the `generate_scorer_package` script to assign initial _weights_ to sequences of words. + +3. Using the `generate_lm.py` script which is distributed with 🐸STT, along with the text file, to create two files, called `lm.binary` and `vocab-500000.txt`. + +4. Downloading the prebuilt `native_client` from the 🐸STT repository on GitHub, and using the `generate_scorer_package` to create a `kenlm.scorer` file. + +5. Using the `kenlm.scorer` file as the _external_scorer_ passed to `train.py`, and used for the _test_ phase. The `scorer` does not impact training; it is used for calculating `word error rate` (covered more in [testing](TESTING.md)). + +In the following example we will create a custom external scorer file for Bahasa Indonesia (BCP47: `id-ID`). + +#### Preparing the text file + +This is straightforward. In this example, we will use a file called `indonesian-sentences.txt`. This file should contain phrases that you wish to prioritize recognising. For example, you may want to recognise place names, digits or medical phrases - and you will include these phrases in the `.txt` file. + +_These phrases should not be copied from `test.tsv`, `train.tsv` or `validated.tsv` as you will bias the resultant model._ + +``` +~/stt-data$ ls cv-corpus-6.1-2020-12-11/id +total 6288 + 4 drwxr-xr-x 3 root root 4096 Feb 24 19:01 ./ + 4 drwxr-xr-x 4 root root 4096 Feb 11 07:09 ../ +1600 drwxr-xr-x 2 root root 1638400 Feb 9 10:43 clips/ + 396 -rwxr-xr-x 1 root root 401601 Feb 9 10:43 dev.tsv + 104 -rwxr-xr-x 1 root root 103332 Feb 9 10:43 invalidated.tsv +1448 -rwxr-xr-x 1 root root 1481571 Feb 9 10:43 other.tsv + 28 -rwxr-xr-x 1 root root 26394 Feb 9 10:43 reported.tsv + 392 -rwxr-xr-x 1 root root 399790 Feb 9 10:43 test.tsv + 456 -rwxr-xr-x 1 root root 465258 Feb 9 10:43 train.tsv +1848 -rwxr-xr-x 1 root root 1889606 Feb 9 10:43 validated.tsv +``` + +The `indonesian-sentences.txt` file is stored on the local filesystem in the `stt-data` directory so that the Docker container can access it. + +``` +~/stt-data$ ls | grep indonesian-sentences + 476 -rw-rw-r-- 1 root root 483481 Feb 24 19:02 indonesian-sentences.txt +``` + +The `indonesian-sentences.txt` file is formatted with one phrase per line, eg: + +``` +Kamar adik laki-laki saya lebih sempit daripada kamar saya. +Ayah akan membunuhku. +Ini pulpen. +Akira pandai bermain tenis. +Dia keluar dari ruangan tanpa mengatakan sepatah kata pun. +Besok Anda akan bertemu dengan siapa. +Aku mengerti maksudmu. +Tolong lepas jasmu. +``` + +#### Using `lm_optimizer.py` to generate values for the parameters `--default_alpha` and `--default_beta` that are used by the `generate_scorer_package` script + +The `lm_optimizer.py` script is located in the `STT` directory if you have set up your [environment][ENVIRONMENT.md] as outlined in the PlayBook. + +``` +root@57e6bf4eeb1c:/STT# ls | grep lm_optimizer.py +lm_optimizer.py +``` + +This script takes a set of test data (`--test_files`), and a `--checkpoint_dir` parameter and determines the optimal `--default_alpha` and `--default_beta` values. + +Call `lm_optimizer.py` and pass it the `--test_files` and a `--checkpoint_dir` directory. + +``` +root@57e6bf4eeb1c:/STT# python3 lm_optimizer.py \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints +``` + +In general, any change to _geometry_ - the shape of the neural network - needs to be reflected here, otherwise the _checkpoint_ will fail to load. It's always a good idea to record the parameters you used to train a model. For example, if you trained your model with a `--n_hidden` value that is different to the default (`1024`), you should pass the same `--n_hidden` value to `lm_optimizer.py`, i.e: + +``` +root@57e6bf4eeb1c:/STT# python3 lm_optimizer.py \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --n_hidden 4 +``` + +`lm_optimizer.py` will create a new _study_. + +``` +[I 2021-03-05 02:04:23,041] A new study created in memory with name: no-name-38c8e8cb-0cc2-4f53-af0e-7a7bd3bc5159 +``` + +It will then run _testing_ and output a trial score. + +``` +[I 2021-03-02 12:48:15,336] Trial 0 finished with value: 1.0 and parameters: {'lm_alpha': 1.0381777700987271, 'lm_beta': 0.02094605391055826}. Best is trial 0 with value: 1.0. +``` + +By default, `lm_optimizer.py` will run `6` trials, and identify the trial with the most optimal parameters. + +``` +[I 2021-03-02 17:50:00,662] Trial 6 finished with value: 1.0 and parameters: {'lm_alpha': 3.1660260368070423, 'lm_beta': 4.7438794403688735}. Best is trial 0 with value: 1.0. +``` + +The optimal parameters `--default_alpha` and `--default_beta` are now known, and can be used with `generate_scorer_package`. In this case, the optimal settings are: + +``` +--default_alpha 1.0381777700987271 +--default_beta 0.02094605391055826 +``` + +because `Trial 0` was the best trial. + +##### Additional parameters for `lm_optimizer.py` + +There are additional parameters that may be useful. + +**Please be aware that these parameters may increase processing time significantly - even to a few days - depending on your hardware.** + +* `--n_trials` specifies how many trials `lm_optimizer.py` should run to find the optimal values of `--default_alpha` and `--default_beta`. The default is `6`. You may wish to reduce `--n_trials`. + +* `--lm_alpha_max` specifies a maximum bound for `--default_alpha`. The default is `0.931289039105002`. You may wish to reduce `--lm_alpha_max`. + +* `--lm_beta_max` specifies a maximum bound for `--default_beta`. The default is `1.1834137581510284`. You may wish to reduce `--lm_beta_max`. + +For example: + +``` +root@57e6bf4eeb1c:/STT# python3 lm_optimizer.py \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --n_hidden 4 \ + --n_trials 3 \ + --lm_alpha_max 0.92 \ + --lm_beta_max 1.05 +``` + +#### Using `generate_lm.py` to create `lm.binary` and `vocab-500000.txt` files + +We then use `generate_lm.py` script that comes with 🐸STT to create a [_trie file_](https://en.wikipedia.org/wiki/Trie). The _trie file_ represents associations between words, so that during training, words that are more closely associated together are more likely to be transcribed by 🐸STT. + +The _trie file_ is produced using a software package called [KenLM](https://kheafield.com/code/kenlm/). KenLM is designed to create large language models that are able to be filtered and queried easily. + +First, create a directory in `stt-data` directory to store your `lm.binary` and `vocab-500000.txt` files: + +``` +stt-data$ mkdir indonesian-scorer +``` + +Then, use the `generate_lm.py` script as follows: + +``` +cd data/lm +python3 generate_lm.py \ + --input_txt /STT/stt-data/indonesian-sentences.txt \ + --output_dir /STT/stt-data/indonesian-scorer \ + --top_k 500000 --kenlm_bins /STT/native_client/kenlm/build/bin/ \ + --arpa_order 5 --max_arpa_memory "85%" --arpa_prune "0|0|1" \ + --binary_a_bits 255 --binary_q_bits 8 --binary_type trie +``` + +_Note: the `/STT/native_client/kenlm/build/bin/` is the path to the binary files for `kenlm`. If you are using the Docker image and container (explained on the [environment page of the PlayBook](ENVIRONMENT.md)), then `/STT/native_client/kenlm/build/bin/` is the correct path to use. If you are not using the Docker environment, your path may vary._ + +You should now have a `lm.binary` and `vocab-500000.txt` file in your `indonesian-scorer` directory: + +``` +stt-data$ ls indonesian-scorer/ +total 1184 + 4 drwxrwxr-x 2 root root 4096 Feb 25 23:13 ./ + 4 drwxrwxr-x 5 root root 4096 Feb 26 09:24 ../ +488 -rw-r--r-- 1 root root 499594 Feb 24 19:05 lm.binary + 52 -rw-r--r-- 1 root root 51178 Feb 24 19:05 vocab-500000.txt +``` + +#### Generating a `kenlm.scorer` file from `generate_scorer_package` + +Next, we need to install the `native_client` package, which contains the `generate_scorer_package`. This is _not_ pre-built into the 🐸STT Docker image. + +The `generate_scorer_package`, once installed via the `native client` package, is usable on _all platforms_ supported by 🐸STT. This is so that developers can generate scorers _on-device_, such as on an Android device, or Raspberry Pi 3. + +To install `generate_scorer_package`, first download the relevant `native client` package from the [🐸STT GitHub releases page](https://github.com/coqui-ai/STT/releases/tag/v0.9.3) into the `data/lm` directory. The Docker image uses Ubuntu Linux, so you should use either the `native_client.amd64.cuda.linux.tar.xz` package if you are using `cuda` or the `native_client.amd64.cpu.linux.tar.xz` package if not. + +The easiest way to download the package and extract it is using `curl [URL] | tar -Jxvf [FILENAME]`: + +``` +root@dcb62aada58b:/STT/data/lm# curl https://github.com/coqui-ai/STT/releases/download/v0.9.3/native_client.amd64.cuda.linux.tar.xz | tar -Jxvf native_client.amd64.cuda.linux.tar.xz +libstt.so +generate_scorer_package +LICENSE +stt +coqui-stt.h +README.coqui +``` + +You can now generate a `ken.lm` scorer file. + +``` +root@dcb62aada58b:/STT/data/lm# ./generate_scorer_package \ + --alphabet ../alphabet.txt \ + --lm ../../stt-data/indonesian-scorer/lm.binary + --vocab ../../stt-data/indonesian-scorer/vocab-500000.txt \ + --package kenlm-indonesian.scorer \ + --default_alpha 0.931289039105002 \ + --default_beta 1.1834137581510284 +6021 unique words read from vocabulary file. +Doesn't look like a character based (Bytes Are All You Need) model. +--force_bytes_output_mode was not specified, using value infered from vocabulary contents: false +Package created in kenlm-indonesian.scorer. +``` + +The message `Doesn't look like a character based (Bytes Are All You Need) model.` is _not_ an error. + +If you receive the error message: + +``` +--force_bytes_output_mode was not specified, using value infered from vocabulary contents: false +Error: Can’t parse scorer file, invalid header. Try updating your scorer file. +Error loading language model file: Invalid magic in trie header. +``` + +then you should add the parameter `--force_bytes_output_mode` when calling `generate_scorer_package`. This error most usually occurs when training languages that use [alphabets](ALPHABET.md) that contain a large number of characters, such as Mandarin. `--force_bytes_output_mode` forces the _decoder_ to predict `UTF-8` bytes instead of characters. For more information, [please see the 🐸STT documentation](https://stt.readthedocs.io/en/master/Decoder.html#bytes-output-mode). For example: + +``` +root@dcb62aada58b:/STT/data/lm# ./generate_scorer_package \ + --alphabet ../alphabet.txt \ + --lm ../../stt-data/indonesian-scorer/lm.binary + --vocab ../../stt-data/indonesian-scorer/vocab-500000.txt \ + --package kenlm-indonesian.scorer \ + --default_alpha 0.931289039105002 \ + --default_beta 1.1834137581510284 \ + --force_bytes_output_mode True +``` + +The `kenlm-indonesian.scorer` file is stored in the `/STT/data/lm` directory within the Docker container. Copy it to the `stt-data` directory. + +``` +root@dcb62aada58b:/STT/data/lm# cp kenlm-indonesian.scorer ../../stt-data/indonesian-scorer/ +``` + +``` +root@dcb62aada58b:/STT/stt-data/indonesian-scorer# ls -las +total 1820 + 4 drwxrwxr-x 2 1000 1000 4096 Feb 26 21:56 . + 4 drwxrwxr-x 5 1000 1000 4096 Feb 25 22:24 .. +636 -rw-r--r-- 1 root root 648000 Feb 26 21:56 kenlm-indonesian.scorer +488 -rw-r--r-- 1 root root 499594 Feb 24 08:05 lm.binary + 52 -rw-r--r-- 1 root root 51178 Feb 24 08:05 vocab-500000.txt +``` + +#### Using the scorer file during the test phase of training + +You now have your own scorer file that can be used during the test phase of model training process using the `--scorer` parameter. + +For example: + +``` +python3 train.py \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints-newscorer-id \ + --export_dir stt-data/exported-model-newscorer-id \ + --n_hidden 2048 \ + --scorer stt-data/indonesian-scorer/kenlm.scorer +``` + +For more information on scorer files, refer to the [🐸STT documentation](https://stt.readthedocs.io/en/latest/Scorer.html). + +--- + +[Home](README.md) | [Previous - The alphabet.txt file](ALPHABET.md) | [Next - Acoustic Model and Language Model](AM_vs_LM.md) diff --git a/doc/playbook/TESTING.md b/doc/playbook/TESTING.md new file mode 100644 index 00000000..74730a13 --- /dev/null +++ b/doc/playbook/TESTING.md @@ -0,0 +1,163 @@ +[Home](README.md) | [Previous - Training your model](TRAINING.md) | [Next - Deploying your model](DEPLOYMENT.md) + +# Testing and evaluating your trained model + +## Contents + +- [Testing and evaluating your trained model](#testing-and-evaluating-your-trained-model) + * [Contents](#contents) + * [Word Error Rate, Character Error Rate, loss and model performance](#word-error-rate--character-error-rate--loss-and-model-performance) + * [Acoustic model and language model working together](#acoustic-model-and-language-model-working-together) + * [Heuristics](#heuristics) + * [Fine tuning and transfer learning](#fine-tuning-and-transfer-learning) + +_This section of the PlayBook covers testing your trained model and setup before [deployment](DEPLOYMENT.md). If you need to test the 🐸STT source code itself, please consult the source code tests._ + +Let's say that you've already trained an acoustic model and a language model (a [scorer](SCORER.md)). Congratulations! But before you [deploy](DEPLOYMENT.md) your setup, you will need to evaluate how well it will work in practice - on your intended use case. + +We're talking here about a _setup_ rather than a trained _model_ on purpose - as there are multiple factors that influence how well a _setup_ performs in real life. There are multiple factors that influence the success of an application, and you need to keep all these factors in mind. The acoustic model and language model work with each other to turn speech into text, and there are lots of ways (i.e. decoding hyperparameter settings) with which you can combine those two models. + +## Gathering training information + +When you invoked `train.py` in the [training](TRAINING.md) section, and trained a model, the training would have finished by printing out a set of WER and CER metrics. It would have looked like this: + +``` +Testing model on stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv +Test epoch | Steps: 1844 | Elapsed Time: 0:51:11 +Test on stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv - WER: 1.000000, CER: 0.824103, loss: 104.989326 +-------------------------------------------------------------------------------- +Best WER: +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.873786, loss: 317.729767 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_23819387.wav + - src: "kami percaya bahwa perdamaian dari koeksistensi dua sistem sosial yang berbeda sepenuhnya bisa terwujud" + - res: "aaaaaaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.851485, loss: 295.564240 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_19748999.wav + - src: "jika anda mencari informasi tentang pergerakan esperanto di indonesia silakan kunjungi halaman webnya" + - res: "aaaaaaaaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.875000, loss: 283.844696 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_23819383.wav + - src: "indah memiliki standar hidup yang tinggi tidak heran dia dikenal sebagai orang yang perfeksionis" + - res: "aaaaaaaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.818182, loss: 276.511597 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_24015532.wav + - src: "selain itu bahasa gaul juga menciptakan kosakata baru yang terbentuk melalui kaidah kaidah tertentu" + - res: "aaaaaaaaaaaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.820000, loss: 269.262909 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_24015257.wav + - src: "berbagai bahasa daerah dan bahasa asing menjadi bahasa serapan dan kemudian menjadi bahasa indonesia" + - res: "aaaaaaaaaaaaaaaaaa" +-------------------------------------------------------------------------------- +Median WER: +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.800000, loss: 97.870811 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_20954705.wav + - src: "pemandangan dari hotel sangat indah" + - res: "aaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.941176, loss: 97.848030 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_20387916.wav + - src: "hari ini hujan turun rintik rintik" + - res: "aaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.800000, loss: 97.800034 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_20879262.wav + - src: "berapa biaya sewa untuk ruangan ini" + - res: "aaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.705882, loss: 97.773476 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_19611909.wav + - src: "saya bukan gay tapi pacar saya gay" + - res: "aaaaaaaaaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.806452, loss: 97.725914 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_24018261.wav + - src: "selamat datang di san fransisco" + - res: "aaaaaaaaaaa" +-------------------------------------------------------------------------------- +Worst WER: +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.800000, loss: 25.830986 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_22546523.wav + - src: "tidak" + - res: "aaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 1.333333, loss: 25.499653 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_22185104.wav + - src: "nol" + - res: "aaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.800000, loss: 23.874924 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_22546522.wav + - src: "empat" + - res: "aaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.750000, loss: 22.441967 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_22528020.wav + - src: "tiga" + - res: "aaaa" +-------------------------------------------------------------------------------- +WER: 1.000000, CER: 0.750000, loss: 21.356133 + - wav: file://stt-data/cv-corpus-6.1-2020-12-11/id/clips/common_voice_id_22412536.wav + - src: "lima" + - res: "aaaa" +-------------------------------------------------------------------------------- + +``` + +_Note: the WER and CER on this output example are both poor because a custom scorer for the language hasn't been built yet._ + +If you didn't keep the training information, then as long as you stored _checkpoints_ while training, then you will be able to re-run just the _testing_ part of training by using the following command: + +``` +root@9d052f0c3dcf:/STT# python3 train.py \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints +``` + +By passing just the `--test_files` parameter and the `--checkpoint_dir` parameter, `train.py` will re-run testing. Note that this command will fail if you don't have _checkpoints_ stored. + +## Word Error Rate, Character Error Rate, loss and model performance + +During acoustic model [training](TRAINING.md) with Tensorflow, you hopefully saw the training and validation _loss_ go down over time. At the end of the training, 🐸STT would have printed scores for your model called the _Word Error Rate (WER)_ and _Character Error Rate (CER)_. + +The WER is how accurately 🐸STT was able to recognise a _word_, and is generally a measure of how well the language model (scorer) is operating. The CER is how accurately 🐸STT was able to recognise a _character_, and is generally a measure of how well the acoustic model is operating, along with an [alphabet](ALPHABET.md) file. + +WER and CER are the typical scores reported for speech recognition models, but their usefulness will vary a lot, depending on the use case of your _setup_. You should not take the WER as the "be-all" metric for the performance of your _setup_. + +Often, the data in your _test_ `.csv` file will be different to the data your model will be asked to perform inference on when it is deployed. It is the performance of your _setup_ at runtime - in a real life context - that is most important. + +## Acoustic model and language model working together + +Remember, the acoustic model and language model work together to produce your transcript. You might have an acoustic model that seems to perform abysmally, but if you combine it with the right language model, you experience amazing near-perfect accuracy. How is this possible? + +The _acoustic model_ is where the majority of training time is spent. The job of the _acoustic model_ is to use the 🐸STT algorithm - a _sequence to sequence_ algorithm, to learn which acoustic signals correspond to which _letters_ (as specified in the `alphabet.txt` file). This accuracy is the _character error rate (CER)_. + +In many languages though, words that sound the same are spelled differently. These are called [homonyms](https://en.wikipedia.org/wiki/Homonym). For example, the words `their`, `they're` and `there` are all pronounced similarly in English, but are spelled differently. + +The _language model_ seeks to overcome this challenge. The _language model_, produced by a [scorer](SCORER.md), predicts which words will follow each other in a sequence. This is also known in linguistics as [n-gram modelling](https://en.wikipedia.org/wiki/N-gram). For example, the words `nugget`, `wings` and `salad` are more likely to occur after the word `chicken` than say `ticket`, even though the words `chicken` and `ticket` have similar sounds. + +The _acoustic model_ and the _language model_ work together to provide better overall accuracy. + +## Heuristics + +In general, if you have a low CER - that is, your _characters_ are being detected accurately in your _acoustic model_, but you have a high WER - that is, the _words_ are not being detected accurately, this indicates that you should retrain your _language model_ ([scorer](SCORER.md)). + +Conversely, if you have a high CER, and a low WER, this indicates that your _acoustic model_ may require fine-tuning. + +## Fine tuning and transfer learning + +_Fine tuning_ and _transfer learning_ are two processes used to improve the accuracy of an _acoustic model_. _Fine tuning_ is where the same [alphabet.txt](ALPHABET.md) file is used, with a set of _checkpoints_ from another model. In _transfer learning_, the alphabet layer is removed from the neural network, and this allows a model to be trained on a model from another language. In general, this works best on languages that have a similar vocabulary and/or structure. For example, English and French will work better than English and Hindi given that English and French are more similar than English and Hindi. + +For more information on [fine tuning in 🐸STT, please consult the documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#fine-tuning-same-alphabet). + +For more information on [transfer learning in 🐸STT, please consult the documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#transfer-learning-new-alphabet). + +--- + +[Home](README.md) | [Previous - Training your model](TRAINING.md) | [Next - Deploying your model](DEPLOYMENT.md) diff --git a/doc/playbook/TRAINING.md b/doc/playbook/TRAINING.md new file mode 100644 index 00000000..50ba9971 --- /dev/null +++ b/doc/playbook/TRAINING.md @@ -0,0 +1,368 @@ +[Home](README.md) | [Previous - Setting up your Coqui STT training environment](ENVIRONMENT.md) | [Next - Testing and evaluating your trained model](TESTING.md) + +# Training a Coqui STT model + +## Contents + +- [Training a Coqui STT model](#training-a-coqui-stt-model) + * [Contents](#contents) + * [Making training files available to the Docker container](#making-training-files-available-to-the-docker-container) + * [Running training](#running-training) + + [Specifying checkpoint directories so that you can restart training from a checkpoint](#specifying-checkpoint-directories-so-that-you-can-restart-training-from-a-checkpoint) + - [Advanced checkpoint configuration](#advanced-checkpoint-configuration) + * [How checkpoints are stored](#how-checkpoints-are-stored) + * [Managing disk space and checkpoints](#managing-disk-space-and-checkpoints) + * [Different checkpoints for loading and saving](#different-checkpoints-for-loading-and-saving) + + [Specifying the directory that the trained model should be exported to](#specifying-the-directory-that-the-trained-model-should-be-exported-to) + * [Other useful parameters that can be passed to `train.py`](#other-useful-parameters-that-can-be-passed-to--trainpy-) + + [`n_hidden` parameter](#-n-hidden--parameter) + + [Reduce learning rate on plateau (RLROP)](#reduce-learning-rate-on-plateau--rlrop-) + + [Early stopping](#early-stopping) + + [Dropout rate](#dropout-rate) + * [Steps and epochs](#steps-and-epochs) + * [Advanced training options](#advanced-training-options) + * [Monitoring GPU use with `nvtop`](#monitoring-gpu-use-with--nvtop-) + * [Possible errors](#possible-errors) + + [`Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.` error when training](#-failed-to-get-convolution-algorithm-this-is-probably-because-cudnn-failed-to-initialize--so-try-looking-to-see-if-a-warning-log-message-was-printed-above--error-when-training) + +## Making training files available to the Docker container + +Before we can train a model, we need to make the training data available to the Docker container. The training data was previously prepared in the [instructions for formatting data](DATA_FORMATTING.md). Copy or extract them to the directory you specified in your _bind mount_. This will make them available to the Docker container. + +``` +$ cd stt-data +$ ls cv-corpus-6.1-2020-12-11/ +total 12 +4 drwxr-xr-x 3 kathyreid kathyreid 4096 Feb 9 10:42 ./ +4 drwxrwxr-x 7 kathyreid kathyreid 4096 Feb 9 10:43 ../ +4 drwxr-xr-x 3 kathyreid kathyreid 4096 Feb 9 10:43 id/ +``` + +We're now ready to being training. + +## Running training + +We're going to walk through some of the key parameters you can use with `train.py`. + +``` +python3 train.py \ + --train_files persistent-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files persistent-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files persistent-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv +``` + +**Do not run this yet** + +The options `--train_files`, `--dev_files` and `--test_files` take a path to the relevant data, which was prepared in the section on [data formatting](DATA_FORMATTING.md). + +### Specifying checkpoint directories so that you can restart training from a checkpoint + +As you are training your model, 🐸STT will store _checkpoints_ to disk. The checkpoint allows interruption to training, and to restart training from the checkpoint, saving hours of training time. + +Because we have our [training environment](ENVIRONMENT.md) configured to use Docker, we must ensure that our checkpoint directories are stored in the directory used by the _bind mount_, so that they _persist_ in the event of failure. + +To specify checkpoint directories, use the `--checkpoint_dir` parameter with `train.py`: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints +``` + +**Do not run this yet** + +#### Advanced checkpoint configuration + +##### How checkpoints are stored + +_Checkpoints_ are stored as [Tensorflow `tf.Variable` objects](https://www.tensorflow.org/guide/checkpoint). This is a binary file format; that is, you won't be able to read it with a text editor. The _checkpoint_ stores all the weights and biases of the current state of the _neural network_ as training progresses. + +_Checkpoints_ are named by the total number of steps completed. For example, if you train for 100 epochs at 2000 steps per epoch, then the final _checkpoint_ will be named `20000`. + +``` +~/stt-data/checkpoints-true-id$ ls +total 1053716 + 4 drwxr-xr-x 2 root root 4096 Feb 24 14:17 ./ + 4 drwxrwxr-x 5 root root 4096 Feb 24 13:18 ../ +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:11 best_dev-12774.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:11 best_dev-12774.index + 1236 -rw-r--r-- 1 root root 1262944 Feb 24 14:11 best_dev-12774.meta + 4 -rw-r--r-- 1 root root 85 Feb 24 14:11 best_dev_checkpoint + 4 -rw-r--r-- 1 root root 247 Feb 24 14:17 checkpoint + 4 -rw-r--r-- 1 root root 3888 Feb 24 13:18 flags.txt +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:09 train-12774.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:09 train-12774.index + 1236 -rw-r--r-- 1 root root 1262938 Feb 24 14:09 train-12774.meta +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:13 train-14903.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:13 train-14903.index + 1236 -rw-r--r-- 1 root root 1262938 Feb 24 14:13 train-14903.meta +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:17 train-17032.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:17 train-17032.index + 1236 -rw-r--r-- 1 root root 1262938 Feb 24 14:17 train-17032.meta +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:01 train-19161.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:01 train-19161.index + 1236 -rw-r--r-- 1 root root 1262938 Feb 24 14:01 train-19161.meta +174376 -rw-r--r-- 1 root root 178557296 Feb 24 14:05 train-21290.data-00000-of-00001 + 4 -rw-r--r-- 1 root root 1469 Feb 24 14:05 train-21290.index +``` + +##### Managing disk space and checkpoints + +_Checkpoints_ can consume a lot of disk space, so you may wish to configure how often a _checkpoint_ is written to disk, and how many _checkpoints_ are stored. + +* `--checkpoint_secs` specifies the time interval for storing a _checkpoint_. The default is `600`, or every five minutes. You may wish to increase this if you have limited disk space. + +* `--max_to_keep` specifies how many _checkpoints_ to keep. The default is `5`. You may wish to decrease this if you have limited disk space. + +In this example we will store a _checkpoint_ every 15 minutes, and keep only 3 _checkpoints_. + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --checkpoint_secs 1800 \ + --max_to_keep 3 +``` + +**Do not run this yet** + +##### Different checkpoints for loading and saving + +In some cases, you may wish to _load_ _checkpoints_ from one location, but _save_ _checkpoints_ to another location - for example if you are doing fine tuning or transfer learning. + +* `--load_checkpoint_dir` specifies the directory to load _checkpoints_ from. + +* `--save_checkpoint_dir` specifies the directory to save _checkpoints_ to. + +In this example we will store a _checkpoint_ every 15 minutes, and keep only 3 _checkpoints_. + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --load_checkpoint_dir stt-data/checkpoints-to-train-from \ + --save_checkpoint_dir stt-data/checkpoints-to-save-to +``` + +**Do not run this yet** + +### Specifying the directory that the trained model should be exported to + +Again, because we have our [training environment](ENVIRONMENT.md) configured to use Docker, we must ensure that our trained model is stored in the directory used by the _bind mount_, so that it _persists_ in the event of failure of the Docker container. + +To specify where the trained model should be saved, use the `--export-dir` parameter with `train.py`: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model +``` + +**You can run this command to start training** + +## Other useful parameters that can be passed to `train.py` + +_For a full list of parameters that can be passed to `train.py`, please [consult the documentation](https://stt.readthedocs.io/en/latest/Flags.html#training-flags)._ + +`train.py` has many parameters - too many to cover in an introductory PlayBook. Here are some of the commonly used parameters that are useful to explore as you begin to train speech recognition models with 🐸STT. + +### `n_hidden` parameter + +Neural networks work through a series of _layers_. Usually there is an _input layer_, which takes an input - in this case an audio recording, and a series of _hidden layers_ which identify features of the _input layer_, and an _output layer_, which makes a prediction - in this case a character. + +In large datasets, you need many _hidden layers_ to arrive at an accurate trained model. With smaller datasets, often called _toy corpora_ or _toy datasets_, you don't need as many _hidden layers_. + +If you are learning how to train using 🐸STT, and are working with a small dataset, you will save time by reducing the value of `--n_hidden`. This reduces the number of _hidden layers_ in the neural network. This both reduces the amount of computing resources consumed during training, and makes training a model much faster. + +The `--n_hidden` parameter has a default value of `2048`. + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model \ + --n_hidden 64 +``` + +### Reduce learning rate on plateau (RLROP) + +In neural networks, the _learning rate_ is the rate at which the neural network makes adjustments to the predictions it generates. The accuracy of predictions is measured using the _loss_. The lower the _loss_, the lower the difference between the neural network's predictions, and actual known values. If training is effective, _loss_ will reduce over time. A neural network that has a _loss_ of `0` has perfect prediction. + + If the _learning rate_ is too low, predictions will take a long time to align with actual targets. If the learning rate is too high, predictions will overshoot actual targets. The _learning rate_ has to aim for a balance between _exploration and exploitation_. + +If loss is not reducing over time, then the training is said to have _plateaued_ - that is, the adjustments to the predictions are not reducing _loss_. By adjusting the _learning rate_, and other parameters, we may escape the _plateau_ and continue to decrease _loss_. + +* The `--reduce_lr_on_plateau` parameter instructs `train.py` to automatically reduce the _learning rate_ if a _plateau_ is detected. By default, this is `false`. + +* The `--plateau_epochs` parameter specifies the number of epochs of training during which there is no reduction in loss that should be considered a _plateau_. The default value is `10`. + +* The `--plateau_reduction` parameter specifies a multiplicative factor that is applied to the current learning rate if a _plateau_ is detected. This number **must** be less than `1`, otherwise it will _increase_ the learning rate. The default value is `0.1`. + +An example of training with these parameters would be: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model \ + --n_hidden 64 \ + --reduce_lr_on_plateau true \ + --plateau_epochs 8 \ + --plateau_reduction 0.08 +``` + +### Early stopping + +If training is not resulting in a reduction of _loss_ over time, you can pass parameters to `train.py` that will stop training. This is called _early stopping_ and is useful if you are using cloud compute resources, or shared resources, and can't monitor the training continuously. + +* The `--early_stop` parameter enables early stopping. It is set to `false` by default. + +* The `--es_epochs` parameter takes an integer of the number of epochs with no improvement after which training will be stopped. It is set to `25` by default, for example if this parameter is omitted, but `--early_stop` is set to `true`. + +* The `--es_min_delta` parameter is the minimum change in _loss_ per epoch that qualifies as an improvement. By default it is set to `0.05`. + +An example of training with these parameters would be: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model \ + --n_hidden 64 \ + --reduce_lr_on_plateau true \ + --plateau_epochs 8 \ + --plateau_reduction 0.08 \ + --early_stop true \ + --es_epochs 10 \ + --es_min_delta 0.06 +``` + +### Dropout rate + +In machine learning, one of the risks during training is that of [_overfitting_](https://en.wikipedia.org/wiki/Overfitting). _Overfitting_ is where training creates a model that does not _generalize_ well. That is, it _fits_ to only the set of data on which it is trained. During inference, new data is not recognised accurately. + +_Dropout_ is a technical approach to reduce _overfitting_. In _dropout_, nodes are randomly removed from the neural network created during training. This simulates the effect of more diverse data, and is a computationally cheap way of reducing _overfitting_, and improving the _generalizability_ of the model. + +_Dropout_ can be set for any layer of a neural network. The parameter that has the most effect for 🐸STT training is `--dropout_rate`, which controls the feedforward layers of the neural network. To see the full set of _dropout parameters_, consult the 🐸STT documentation. + +* The `-dropout_rate` parameter specifies how many nodes should be dropped from the neural network during training. The default value is `0.05`. However, if you are training on less than thousands of hours of voice data, you will find a value of `0.3` to `0.4` works better to prevent overfitting. + +An example of training with this parameter would be: + +``` +python3 train.py \ + --train_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/train.csv \ + --dev_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/dev.csv \ + --test_files stt-data/cv-corpus-6.1-2020-12-11/id/clips/test.csv \ + --checkpoint_dir stt-data/checkpoints \ + --export_dir stt-data/exported-model \ + --n_hidden 64 \ + --reduce_lr_on_plateau true \ + --plateau_epochs 8 \ + --plateau_reduction 0.08 \ + --early_stop true \ + --es_epochs 10 \ + --es_min_delta 0.06 \ + --dropout_rate 0.3 +``` + +## Steps and epochs + +In training, a _step_ is one update of the [gradient](https://en.wikipedia.org/wiki/Gradient_descent); that is, one attempt to find the lowest, or minimal _loss_. The amount of processing done in one _step_ depends on the _batch size_. By default, `train.py` has a _batch size_ of `1`. That is, it processes one audio file in each _step_. + +An _epoch_ is one full cycle through the training data. That is, if you have 1000 files listed in your `train.tsv` file, then you will expect to process 1000 _steps_ per epoch (assuming a _batch size_ of `1`). + +To find out how many _steps_ to expect in each _epoch_, you can count the number of lines in your `train.tsv` file: + +``` +~/stt-data/cv-corpus-6.1-2020-12-11/id$ wc -l train.tsv +2131 train.tsv +``` + +In this case there would be `2131` _steps_ per _epoch_. + +* `--epochs` specifies how many _epochs_ to train. It has a default of `75`, which would be appropriate for training tens to hundreds of hours of audio. If you have thousands of hours of audio, you may wish to increase the number of _epochs_ to around 150-300. + +* `--train_batch_size`, `--dev_batch_size`, `--test_batch_size` all specify the _batch size_ per _step_. These all have a default value of `1`. Increasing the _batch size_ increases the amount of memory required to process the _step_; you need to be aware of this before increasing the _batch size_. + +## Advanced training options + +Advanced training options are available, such as _feature cache_ and _augmentation_. They are beyond the scope of this PlayBook, but you can [read more about them in the 🐸STT documentation](https://stt.readthedocs.io/en/latest/TRAINING.html#augmentation). + +For a full list of parameters that can be passed to the `train.py` file, [please consult the 🐸STT documentation](https://stt.readthedocs.io/en/latest/Flags.html#training-flags). + +## Monitoring GPU use with `nvtop` + +In a separate terminal (ie not from the session where you have the Docker container open), run the command `nvtop`. You should see the `train.py` process consuming all available GPUs. + +If you _do not_ see the GPU(s) being heavily utilised, you may be training only on your CPUs and you should double check your [environment](ENVIRONMENT.md). + +## Possible errors + +### `Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.` error when training + +_You can safely skip this section if you have not encountered this error_ + +There have been several reports of an error similar to the below when training is initiated. Anecdotal evidence suggests that the error is more likely to be encountered if you are training using an RTX-model GPU. + +The error will look like this: + +``` +Epoch 0 | Training | Elapsed Time: 0:00:00 | Steps: 0 | Loss: 0.000000Traceback (most recent call last): + File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py", line 1365, in _do_call + return fn(*args) + File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py", line 1350, in _run_fn + target_list, run_metadata) + File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py", line 1443, in _call_tf_sessionrun + run_metadata) +tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found. + (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. + [[{{node tower_0/conv1d}}]] + [[concat/concat/_99]] + (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. + [[{{node tower_0/conv1d}}]] +0 successful operations. +0 derived errors ignored. +``` + +To work around this error, you will need to set the `TF_FORCE_GPU_ALLOW_GROWTH` flag to `True`. + +This is done in the file + +`STT/training/coqui_stt_training/util/config.py` + +and you should edit it as below: + +``` +root@687a2e3516d7:/STT/training/coqui_stt_training/util# nano config.py + +... + + # Standard session configuration that'll be used for all new sessions. + c.session_config = tfv1.ConfigProto(allow_soft_placement=True, log_device$ + inter_op_parallelism_threads=FLAGS.in$ + intra_op_parallelism_threads=FLAGS.in$ + + gpu_options=tfv1.GPUOptions(allow_gro$ + + # Set TF_FORCE_GPU_ALLOW_GROWTH to work around cuDNN error on RTX GPUs + c.session_config.gpu_options.allow_growth=True +``` + +--- + +[Home](README.md) | [Previous - Setting up your Coqui STT training environment](ENVIRONMENT.md) | [Next - Testing and evaluating your trained model](TESTING.md) diff --git a/doc/playbook/images/nvtop.png b/doc/playbook/images/nvtop.png new file mode 100644 index 0000000000000000000000000000000000000000..96eed1071a56557a22a356710addf7c73c0b33c1 GIT binary patch literal 227667 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

=2YYh$w# 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