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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

MdSg(Qi=VU4Wu@<`Zqaf67^c(I1DqG?T$(j?y4 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

0`btfK}-uD*U`88p=d0*wZT`S^U9m#*|85@^V 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 IcOBpS55OkQ9RL6T literal 0 HcmV?d00001 diff --git a/doc/requirements.txt b/doc/requirements.txt index dca62cfa..ddcce166 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -5,4 +5,5 @@ sphinx-js==3.1 furo==2021.2.28b28 pygments==2.6.1 #FIXME: switch to stable after C# changes have been merged: https://github.com/djungelorm/sphinx-csharp/pull/8 -git+https://github.com/rogerbarton/sphinx-csharp.git +git+https://github.com/reuben/sphinx-csharp.git@9dc6202f558e3d3fa14ec7f5f1e36a8e66e6d622 +recommonmark==0.7.1 \ No newline at end of file